Bổ sung api Technical

This commit is contained in:
Truong Vo 2024-09-20 15:27:32 +07:00
parent a8a5de20dc
commit 1aeda710e1
4 changed files with 231 additions and 0 deletions

View File

@ -0,0 +1,173 @@
<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Modules\Admin\app\Models\Technical;
use Modules\Admin\app\Models\TechnicalUser;
use App\Traits\AnalyzeData;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
class TechnicalController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
use AnalyzeData;
public function getAllTechnical(Request $request)
{
$technicals = new Technical;
// Order by
$this->orderByRequest($technicals, $request);
$technicals->orderBy('name', 'asc');
// Filter
$this->filterRequest(
builder: $technicals,
request: $request,
filterKeys: [
'name' => self::F_TEXT,
'level' => self::F_TEXT,
]
);
$this->searchRequest(
builder: $technicals,
value: $request->get('search'),
fields: [
'name',
'level'
]
);
$responseData = $technicals->get();
return AbstractController::ResultSuccess($responseData);
}
public function createTechnical(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'level' => 'nullable|integer|min:1|max:3',
]);
$technical = Technical::create([
'name' => $request->name,
'level' => $request->level,
]);
return AbstractController::ResultSuccess($technical, "Technical created successfully!");
}
public function deleteTechnical(Request $request)
{
$id = $request->input('id');
$technical = Technical::find($id);
if (!$technical) {
return AbstractController::ResultError("Technical not found");
}
$technical->delete();
return AbstractController::ResultSuccess("Technical deleted successfully!");
}
public function getTechnicalsByUserId($userId)
{
$technicals = TechnicalUser::with('technical')
->where('user_id', $userId)
->get();
if ($technicals->isEmpty()) {
return AbstractController::ResultError("No technicals found for this user.");
}
// Chuẩn bị dữ liệu để trả về
$technicalData = $technicals->map(function ($technicalUser) {
return [
'id' => $technicalUser->technical->id,
'name' => $technicalUser->technical->name,
'level' => $technicalUser->technical->level,
'point' => $technicalUser->point,
'updated_at' => $technicalUser->updated_at
];
});
return AbstractController::ResultSuccess($technicalData);
}
public function getTechnicalsOfUser()
{
$userInfo = auth('admins')->user();
$userId = $userInfo->id;
$technicals = TechnicalUser::with('technical')
->where('user_id', $userId)
->get();
if ($technicals->isEmpty()) {
return AbstractController::ResultError("No technicals found for this user.");
}
// Chuẩn bị dữ liệu để trả về
$technicalData = $technicals->map(function ($technicalUser) {
return [
'id' => $technicalUser->technical->id,
'name' => $technicalUser->technical->name,
'level' => $technicalUser->technical->level,
'point' => $technicalUser->point,
'updated_at' => $technicalUser->updated_at
];
});
return AbstractController::ResultSuccess($technicalData);
}
public function getListUserByTechnicalId($technicalId)
{
$users = TechnicalUser::with('user')
->where('technical_id', $technicalId)
->get();
if ($users->isEmpty()) {
return AbstractController::ResultError("No users found for this technical.");
}
$userData = $users->map(function ($technicalUser) {
if ($technicalUser->user) {
return [
'user_id' => $technicalUser->user->id ?? "",
'name' => $technicalUser->user->name,
'email' => $technicalUser->user->email,
'point' => $technicalUser->point
];
}
});
return AbstractController::ResultSuccess($userData);
}
public function updateTechnicalsUser(Request $request)
{
$userInfo = auth('admins')->user();
$validatedData = $request->validate([
'technicals' => 'required|array',
'technicals.*.technical_id' => 'required|exists:technicals,id', // Phải tồn tại trong bảng technicals
'technicals.*.point' => 'required|integer|min:0|max:3', // Điểm trong khoảng [0-3]
]);
// Xóa hết các bản ghi hiện có của user trong bảng technical_users
TechnicalUser::where('user_id', $userInfo->id)->delete();
// Duyệt qua mảng technicals và thêm mới dữ liệu
foreach ($validatedData['technicals'] as $technical) {
TechnicalUser::create([
'user_id' => $userInfo->id,
'technical_id' => $technical['technical_id'],
'point' => $technical['point']
]);
}
return AbstractController::ResultSuccess('Technicals for user updated successfully.');
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace Modules\Admin\app\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Technical extends Model
{
use HasFactory;
protected $fillable = ['name', 'level'];
}

View File

@ -0,0 +1,32 @@
<?php
namespace Modules\Admin\app\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class TechnicalUser extends Model
{
use HasFactory;
protected $table = 'technicals_users';
// Các trường có thể được fill
protected $fillable = [
'user_id',
'technical_id',
'point',
];
// Quan hệ với bảng users
public function user()
{
return $this->belongsTo(User::class, 'user_id');
}
// Quan hệ với bảng technicals
public function technical()
{
return $this->belongsTo(Technical::class, 'technical_id');
}
}

View File

@ -17,6 +17,7 @@ use Modules\Admin\app\Http\Controllers\TimekeepingController;
use Modules\Admin\app\Http\Controllers\TrackingController;
use Modules\Admin\app\Http\Controllers\CriteriasController;
use Modules\Admin\app\Http\Controllers\ProfileController;
use Modules\Admin\app\Http\Controllers\TechnicalController;
use Modules\Admin\app\Http\Controllers\TestCaseForSprintController;
use Modules\Admin\app\Http\Middleware\AdminMiddleware;
@ -173,6 +174,18 @@ Route::middleware('api')
Route::get('/profiles-data', [ProfileController::class, 'getProfilesData'])->middleware('check.permission:admin.hr.staff.tester');
Route::post('/profiles-data/update', [ProfileController::class, 'updateProfilesData'])->middleware('check.permission:admin.hr.staff.tester');
});
Route::group([
'prefix' => 'technical',
], function () {
Route::get('/get-all', [TechnicalController::class, 'getAllTechnical']);
Route::post('/create', [TechnicalController::class, 'createTechnical'])->middleware('check.permission:admin');
Route::get('/delete', [TechnicalController::class, 'deleteTechnical'])->middleware('check.permission:admin');
Route::get('/get-tech-of-user', [TechnicalController::class, 'getTechnicalsOfUser']);
Route::get('/get-tech-by-user-id/{userId}', [TechnicalController::class, 'getTechnicalsByUserId'])->middleware('check.permission:admin');
Route::get('/get-list-user-by-tech-id/{technicalId}', [TechnicalController::class, 'getListUserByTechnicalId'])->middleware('check.permission:admin');
Route::post('/technicals-user/update', [TechnicalController::class, 'updateTechnicalsUser']);
});
});
});