get('per_page', 15); $filters = [ 'search' => $request->get('search'), 'deceased_id' => $request->get('deceased_id'), 'doc_type' => $request->get('doc_type'), 'file_id' => $request->get('file_id'), 'sort_by' => $request->get('sort_by', 'created_at'), 'sort_direction' => $request->get('sort_direction', 'desc'), ]; // Remove null filters $filters = array_filter($filters, function ($value) { return $value !== null && $value !== ''; }); $documents = $this->deceasedDocumentRepository->paginate($perPage, $filters); return new DeceasedDocumentCollection($documents); } catch (\Exception $e) { Log::error('Erreur lors de la récupération des documents du défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des documents du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Get documents by deceased ID. */ public function byDeceased(string $deceasedId): DeceasedDocumentCollection|JsonResponse { try { $documents = $this->deceasedDocumentRepository->getByDeceasedId((int) $deceasedId); return new DeceasedDocumentCollection($documents); } catch (\Exception $e) { Log::error('Erreur lors de la récupération des documents par défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'deceased_id' => $deceasedId, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des documents du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Get documents by document type. */ public function byDocType(Request $request): DeceasedDocumentCollection|JsonResponse { try { $docType = $request->get('doc_type'); if (!$docType) { return response()->json([ 'message' => 'Le paramètre doc_type est requis.', ], 400); } $documents = $this->deceasedDocumentRepository->getByDocType($docType); return new DeceasedDocumentCollection($documents); } catch (\Exception $e) { Log::error('Erreur lors de la récupération des documents par type: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'doc_type' => $request->get('doc_type'), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des documents par type.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Get documents by file ID. */ public function byFile(string $fileId): DeceasedDocumentCollection|JsonResponse { try { $documents = $this->deceasedDocumentRepository->getByFileId((int) $fileId); return new DeceasedDocumentCollection($documents); } catch (\Exception $e) { Log::error('Erreur lors de la récupération des documents par fichier: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'file_id' => $fileId, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des documents par fichier.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Search documents by various criteria. */ public function search(Request $request): DeceasedDocumentCollection|JsonResponse { try { $criteria = [ 'deceased_id' => $request->get('deceased_id'), 'doc_type' => $request->get('doc_type'), 'file_id' => $request->get('file_id'), 'generated_from' => $request->get('generated_from'), 'generated_to' => $request->get('generated_to'), ]; // Remove null criteria $criteria = array_filter($criteria, function ($value) { return $value !== null && $value !== ''; }); $documents = $this->deceasedDocumentRepository->search($criteria); return new DeceasedDocumentCollection($documents); } catch (\Exception $e) { Log::error('Erreur lors de la recherche de documents: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'criteria' => $request->all(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la recherche de documents.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Store a newly created deceased document. */ public function store(StoreDeceasedDocumentRequest $request): DeceasedDocumentResource|JsonResponse { try { $document = $this->deceasedDocumentRepository->create($request->validated()); return new DeceasedDocumentResource($document); } catch (\Exception $e) { Log::error('Erreur lors de la création du document du défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la création du document du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Display the specified deceased document. */ public function show(string $id): DeceasedDocumentResource|JsonResponse { try { $document = $this->deceasedDocumentRepository->find($id); if (!$document) { return response()->json([ 'message' => 'Document du défunt non trouvé.', ], 404); } return new DeceasedDocumentResource($document); } catch (\Exception $e) { Log::error('Erreur lors de la récupération du document du défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'document_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération du document du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Update the specified deceased document. */ public function update(UpdateDeceasedDocumentRequest $request, string $id): DeceasedDocumentResource|JsonResponse { try { $updated = $this->deceasedDocumentRepository->update($id, $request->validated()); if (!$updated) { return response()->json([ 'message' => 'Document du défunt non trouvé ou échec de la mise à jour.', ], 404); } $document = $this->deceasedDocumentRepository->find($id); return new DeceasedDocumentResource($document); } catch (\Exception $e) { Log::error('Erreur lors de la mise à jour du document du défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'document_id' => $id, 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise à jour du document du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Remove the specified deceased document. */ public function destroy(string $id): JsonResponse { try { $deleted = $this->deceasedDocumentRepository->delete($id); if (!$deleted) { return response()->json([ 'message' => 'Document du défunt non trouvé ou échec de la suppression.', ], 404); } return response()->json([ 'message' => 'Document du défunt supprimé avec succès.', ], 200); } catch (\Exception $e) { Log::error('Erreur lors de la suppression du document du défunt: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'document_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression du document du défunt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }