get()->toArray(); return AbstractController::ResultSuccess($users); } 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) { $technicalData = self::getDataTechnicalsByUserId($userId); return AbstractController::ResultSuccess($technicalData); // // Lấy tất cả các technical // $allTechnicals = Technical::all(); // if ($technicals->isEmpty() && $allTechnicals->isEmpty()) { // return AbstractController::ResultError("No technicals found."); // } // // Chuẩn bị dữ liệu để trả về // $technicalData = $allTechnicals->map(function ($technical) use ($technicals) { // // Tìm kiếm kỹ thuật từ bảng technical_users // $technicalUser = $technicals->firstWhere('technical_id', $technical->id); // return [ // 'id' => $technical->id, // 'name' => $technical->name, // 'level' => $technical->level, // 'point' => $technicalUser ? $technicalUser->point : 0, // Nếu không tồn tại, điểm mặc định là 0 // 'updated_at' => $technicalUser ? $technicalUser->updated_at : null // Nếu không tồn tại, updated_at là null // ]; // }); // $sortedTechnicalData = $technicalData->sortByDesc('point')->values(); // values() để giữ lại chỉ số // return AbstractController::ResultSuccess($sortedTechnicalData); } public static function getDataTechnicalsByUserId($userId) { $technicals = TechnicalUser::with('technical') ->where('user_id', $userId) ->where('point', '>', 0) ->orderBy('point', 'desc') ->orderBy('updated_at', 'desc') ->get(); if ($technicals->isEmpty()) { return []; } // 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 $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); $allTechnicals = Technical::all(); if ($technicals->isEmpty() && $allTechnicals->isEmpty()) { return AbstractController::ResultError("No technicals found."); } // Chuẩn bị dữ liệu để trả về $technicalData = $allTechnicals->map(function ($technical) use ($technicals) { // Tìm kiếm kỹ thuật từ bảng technical_users $technicalUser = $technicals->firstWhere('technical_id', $technical->id); return [ 'id' => $technical->id, 'name' => $technical->name, 'level' => $technical->level, 'point' => $technicalUser ? $technicalUser->point : 0, // Nếu không tồn tại, điểm mặc định là 0 'updated_at' => $technicalUser ? $technicalUser->updated_at : null // Nếu không tồn tại, updated_at là null ]; }); $sortedTechnicalData = $technicalData->sortByDesc('point')->values(); // values() để giữ lại chỉ số return AbstractController::ResultSuccess($sortedTechnicalData); } 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] ]); $existingTechnicals = TechnicalUser::where('user_id', $userInfo->id)->get()->keyBy('technical_id'); foreach ($validatedData['technicals'] as $technical) { $existingTechnical = $existingTechnicals->get($technical['technical_id']); if ($existingTechnical) { // Nếu technical_id đã tồn tại và point khác, thì update if ($existingTechnical->point !== $technical['point']) { $existingTechnical->update([ 'point' => $technical['point'] ]); } } else { // Nếu technical_id chưa tồn tại, tạo mới TechnicalUser::create([ 'user_id' => $userInfo->id, 'technical_id' => $technical['technical_id'], 'point' => $technical['point'] ]); } } return AbstractController::ResultSuccess('Technicals for user updated successfully.'); } }