master #57
|
|
@ -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.');
|
||||
}
|
||||
}
|
||||
|
|
@ -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'];
|
||||
}
|
||||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
@ -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']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue