query('email'); if ($email) { $user = User::query()->with(['roles', 'permissions'])->where('email', $email)->first(); return response()->json([ 'data' => $user, 'message' => $user ? 'Utilisateur recupere avec succes.' : 'Aucun utilisateur trouve pour cet email.', ]); } return response()->json([ 'data' => $this->userRepository->all()->load(['roles', 'permissions'])->sortBy('name')->values(), 'message' => 'Utilisateurs recuperes avec succes.', ]); } catch (\Exception $e) { Log::error('Error fetching users: ' . $e->getMessage(), [ 'exception' => $e, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la recuperation des utilisateurs.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function store(StoreUserRequest $request): JsonResponse { try { $user = $this->userRepository->create($request->validated()); return response()->json([ 'data' => $user->load('roles', 'permissions'), 'message' => 'Utilisateur cree avec succes.', ], 201); } catch (\Exception $e) { Log::error('Error creating user: ' . $e->getMessage(), [ 'exception' => $e, 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la creation de l\'utilisateur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function show(string $id): JsonResponse { try { $user = $this->userRepository->find($id); if (! $user) { return response()->json([ 'message' => 'Utilisateur non trouve.', ], 404); } return response()->json([ 'data' => $user->load('roles', 'permissions'), 'message' => 'Utilisateur recupere avec succes.', ]); } catch (\Exception $e) { Log::error('Error fetching user: ' . $e->getMessage(), [ 'exception' => $e, 'user_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la recuperation de l\'utilisateur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function update(UpdateUserRequest $request, string $id): JsonResponse { try { $user = $this->userRepository->find($id); if (! $user) { return response()->json([ 'message' => 'Utilisateur non trouve ou echec de la mise a jour.', ], 404); } $validated = $request->validated(); if (empty($validated['password'])) { unset($validated['password']); } $updated = $this->userRepository->update($id, $validated); if (! $updated) { return response()->json([ 'message' => 'Utilisateur non trouve ou echec de la mise a jour.', ], 404); } return response()->json([ 'data' => $user->fresh()->load('roles', 'permissions'), 'message' => 'Utilisateur mis a jour avec succes.', ]); } catch (\Exception $e) { Log::error('Error updating user: ' . $e->getMessage(), [ 'exception' => $e, 'user_id' => $id, 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise a jour de l\'utilisateur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function destroy(string $id): JsonResponse { try { $deleted = $this->userRepository->delete($id); if (! $deleted) { return response()->json([ 'message' => 'Utilisateur non trouve ou echec de la suppression.', ], 404); } return response()->json([ 'message' => 'Utilisateur supprime avec succes.', ]); } catch (\Exception $e) { Log::error('Error deleting user: ' . $e->getMessage(), [ 'exception' => $e, 'user_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression de l\'utilisateur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }