get('per_page', 15); $filters = [ 'search' => $request->get('search'), 'is_active' => $request->get('is_active'), '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 !== ''; }); $fournisseurs = $this->fournisseurRepository->paginate($perPage, $filters); return new FournisseurCollection($fournisseurs); } catch (\Exception $e) { Log::error('Error fetching fournisseurs: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des fournisseurs.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Store a newly created fournisseur. */ public function store(StoreFournisseurRequest $request): FournisseurResource|JsonResponse { try { $fournisseur = $this->fournisseurRepository->create($request->validated()); return new FournisseurResource($fournisseur); } catch (\Exception $e) { Log::error('Error creating fournisseur: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la création du fournisseur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Display the specified fournisseur. */ public function show(string $id): FournisseurResource|JsonResponse { try { $fournisseur = $this->fournisseurRepository->find($id); if (!$fournisseur) { return response()->json([ 'message' => 'Fournisseur non trouvé.', ], 404); } return new FournisseurResource($fournisseur); } catch (\Exception $e) { Log::error('Error fetching fournisseur: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'fournisseur_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération du fournisseur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } public function searchBy(Request $request): JsonResponse { try { $name = $request->get('name', ''); if (empty($name)) { return response()->json([ 'message' => 'Le paramètre "name" est requis.', ], 400); } $fournisseurs = $this->fournisseurRepository->searchByName($name); return response()->json([ 'data' => $fournisseurs, 'count' => $fournisseurs->count(), 'message' => $fournisseurs->count() > 0 ? 'Fournisseurs trouvés avec succès.' : 'Aucun fournisseur trouvé.', ], 200); } catch (\Exception $e) { Log::error('Error searching fournisseurs by name: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'search_term' => $name, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la recherche des fournisseurs.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Update the specified fournisseur. */ public function update(UpdateFournisseurRequest $request, string $id): FournisseurResource|JsonResponse { try { $updated = $this->fournisseurRepository->update($id, $request->validated()); if (!$updated) { return response()->json([ 'message' => 'Fournisseur non trouvé ou échec de la mise à jour.', ], 404); } $fournisseur = $this->fournisseurRepository->find($id); return new FournisseurResource($fournisseur); } catch (\Exception $e) { Log::error('Error updating fournisseur: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'fournisseur_id' => $id, 'data' => $request->validated(), ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise à jour du fournisseur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Remove the specified fournisseur. */ public function destroy(string $id): JsonResponse { try { $deleted = $this->fournisseurRepository->delete($id); if (!$deleted) { return response()->json([ 'message' => 'Fournisseur non trouvé ou échec de la suppression.', ], 404); } return response()->json([ 'message' => 'Fournisseur supprimé avec succès.', ], 200); } catch (\Exception $e) { Log::error('Error deleting fournisseur: ' . $e->getMessage(), [ 'exception' => $e, 'trace' => $e->getTraceAsString(), 'fournisseur_id' => $id, ]); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression du fournisseur.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }