filled('search')) { $search = $request->search; $query->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%"); }); } $perPage = min((int) $request->input('per_page', 15), 100); $sortBy = in_array($request->input('sort_by'), ['id', 'name', 'email', 'status', 'created_at', 'updated_at'], true) ? $request->input('sort_by') : 'created_at'; $sortDir = $request->input('sort_dir') === 'asc' ? 'asc' : 'desc'; $users = $query->orderBy($sortBy, $sortDir)->paginate($perPage); return response()->json([ 'success' => true, 'data' => UserResource::collection($users), 'meta' => [ 'current_page' => $users->currentPage(), 'last_page' => $users->lastPage(), 'per_page' => $users->perPage(), 'total' => $users->total(), ], 'message' => 'لیست کاربران', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در دریافت لیست کاربران', ], 500); } } public function show(User $user): JsonResponse { try { $user->load(['roles.permissions', 'projects', 'dept', 'departments']); return response()->json([ 'success' => true, 'data' => new UserResource($user), 'message' => 'اطلاعات کاربر', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در دریافت اطلاعات کاربر', ], 500); } } public function store(StoreUserRequest $request): JsonResponse { try { $data = $request->validated(); $data['password'] = Hash::make($data['password']); $data['status'] = $data['status'] ?? 'active'; $user = User::create($data); if (array_key_exists('role_id', $data)) { $data['role_id'] ? $user->roles()->sync([$data['role_id']]) : $user->roles()->detach(); } $user->load(['role', 'roles.permissions', 'dept']); return response()->json([ 'success' => true, 'data' => new UserResource($user), 'message' => 'کاربر با موفقیت ایجاد شد', ], 201); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در ایجاد کاربر', ], 500); } } public function update(UpdateUserRequest $request, User $user): JsonResponse { try { $data = $request->validated(); if (! empty($data['password'])) { $data['password'] = Hash::make($data['password']); } else { unset($data['password']); } $user->update($data); if (! empty($data['role_id'])) { $user->roles()->sync([$data['role_id']]); } $user->load(['role', 'roles.permissions']); return response()->json([ 'success' => true, 'data' => new UserResource($user->fresh()), 'message' => 'کاربر با موفقیت به‌روزرسانی شد', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در به‌روزرسانی کاربر', ], 500); } } public function destroy(User $user): JsonResponse { try { if ($user->id === request()->user()->id) { return response()->json([ 'success' => false, 'message' => 'نمی‌توانید خودتان را حذف کنید', ], 400); } $user->delete(); return response()->json([ 'success' => true, 'message' => 'کاربر با موفقیت حذف شد', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در حذف کاربر', ], 500); } } public function updateStatus(Request $request, User $user): JsonResponse { try { $request->validate(['status' => 'required|string|in:active,inactive']); $user->update(['status' => $request->status]); return response()->json([ 'success' => true, 'data' => new UserResource($user->fresh()), 'message' => 'وضعیت کاربر به‌روزرسانی شد', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در به‌روزرسانی وضعیت', ], 500); } } public function syncRoles(Request $request, User $user): JsonResponse { try { $request->validate([ 'roles' => 'present|array', 'roles.*' => 'integer|exists:roles,id', ]); $user->roles()->sync($request->roles); $user->load(['roles.permissions', 'dept', 'departments']); return response()->json([ 'success' => true, 'data' => new UserResource($user), 'message' => 'نقش‌های کاربر به‌روزرسانی شد', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در به‌روزرسانی نقش‌های کاربر', ], 500); } } public function updateWorkload(User $user): JsonResponse { try { $workload = collect($this->workloadService->getWorkload()) ->firstWhere('user_id', $user->id); return response()->json([ 'success' => true, 'data' => $workload, 'message' => 'بار کاری کاربر', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در دریافت بار کاری', ], 500); } } public function taskStats(User $user): JsonResponse { try { $tasks = Task::where('assignee_id', $user->id); return response()->json([ 'success' => true, 'data' => [ 'assigned_tasks_count' => (clone $tasks)->count(), 'in_progress_count' => (clone $tasks)->whereNotIn('status', ['done', 'canceled'])->count(), 'delayed_tasks_count' => (clone $tasks)->whereDate('due_date', '<', now()->toDateString())->where('status', '!=', 'done')->count(), ], 'message' => 'آمار تسک‌های کاربر', ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => 'خطا در دریافت آمار کاربر', ], 500); } } }