request('search'), 'is_primary' => request('is_primary'), 'client_id' => request('client_id'), 'sort_by' => request('sort_by', 'created_at'), 'sort_direction' => request('sort_direction', 'desc'), ]; $contacts = $this->contactRepository->paginate($perPage, $filters); return new ContactCollection($contacts); } catch (\Exception $e) { Log::error('Error fetching contacts: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des contacts.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Store a newly created contact. */ public function store(StoreContactRequest $request): ContactResource|JsonResponse { try { $contact = $this->contactRepository->create($request->validated()); return new ContactResource($contact); } catch (\Exception $e) { Log::error('Error creating contact: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la création du contact.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Display the specified contact. */ public function show(string $id): ContactResource|JsonResponse { try { $contact = $this->contactRepository->find($id); if (!$contact) { return response()->json([ 'message' => 'Contact non trouvé.', ], 404); } return new ContactResource($contact); } catch (\Exception $e) { Log::error('Error fetching contact: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'contact_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération du contact.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Update the specified contact. */ public function update(UpdateContactRequest $request, string $id): ContactResource|JsonResponse { try { $updated = $this->contactRepository->update($id, $request->validated()); if (!$updated) { return response()->json([ 'message' => 'Contact non trouvé ou échec de la mise à jour.', ], 404); } $contact = $this->contactRepository->find($id); return new ContactResource($contact); } catch (\Exception $e) { Log::error('Error updating contact: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'contact_id' => $id, 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise à jour du contact.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Remove the specified contact. */ public function destroy(string $id): JsonResponse { try { $deleted = $this->contactRepository->delete($id); if (!$deleted) { return response()->json([ 'message' => 'Contact non trouvé ou échec de la suppression.', ], 404); } return response()->json([ 'message' => 'Contact supprimé avec succès.', ], 200); } catch (\Exception $e) { Log::error('Error deleting contact: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'contact_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression du contact.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function getContactsByClient(string $clientId): JsonResponse { try { $intId = (int) $clientId; $contacts = $this->contactRepository->getByClientId($intId); return response()->json([ 'data' => ContactResource::collection($contacts), ], 200); } catch (\Exception $e) { Log::error('Error fetching contacts by client: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'client_id' => $clientId, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des contacts du client.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }