warehouseRepository->all(); return response()->json([ 'data' => WarehouseResource::collection($warehouses), 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error fetching warehouses: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération des entrepôts.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Store a newly created warehouse. */ public function store(StoreWarehouseRequest $request): JsonResponse { try { $warehouse = $this->warehouseRepository->create($request->validated()); return response()->json([ 'data' => new WarehouseResource($warehouse), 'message' => 'Entrepôt créé avec succès.', 'status' => 'success' ], 201); } catch (\Exception $e) { Log::error('Error creating warehouse: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la création de l\'entrepôt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Display specified warehouse. */ public function show(string $id): JsonResponse { try { $warehouse = $this->warehouseRepository->find((int) $id); if (!$warehouse) { return response()->json(['message' => 'Entrepôt non trouvé.'], 404); } return response()->json([ 'data' => new WarehouseResource($warehouse), 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error fetching warehouse: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la récupération de l\'entrepôt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Update specified warehouse. */ public function update(UpdateWarehouseRequest $request, string $id): JsonResponse { try { $updated = $this->warehouseRepository->update((int) $id, $request->validated()); if (!$updated) { return response()->json(['message' => 'Entrepôt non trouvé ou échec de la mise à jour.'], 404); } $warehouse = $this->warehouseRepository->find((int) $id); return response()->json([ 'data' => new WarehouseResource($warehouse), 'message' => 'Entrepôt mis à jour avec succès.', 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error updating warehouse: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la mise à jour de l\'entrepôt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Remove specified warehouse. */ public function destroy(string $id): JsonResponse { try { $deleted = $this->warehouseRepository->delete((int) $id); if (!$deleted) { return response()->json(['message' => 'Entrepôt non trouvé ou échec de la suppression.'], 404); } return response()->json([ 'message' => 'Entrepôt supprimé avec succès.', 'status' => 'success' ]); } catch (\Exception $e) { Log::error('Error deleting warehouse: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la suppression de l\'entrepôt.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } /** * Search warehouses by name. */ public function searchBy(Request $request): JsonResponse { try { $name = $request->query('name'); $exactMatch = $request->query('exact_match', false); if (empty($name)) { return response()->json([ 'data' => [], 'count' => 0, 'message' => 'Le paramètre de recherche est requis.' ], 400); } $warehouses = $this->warehouseRepository->all(); $filtered = $warehouses->filter(function ($warehouse) use ($name, $exactMatch) { if ($exactMatch) { return strtolower($warehouse->name) === strtolower($name); } return stripos($warehouse->name, $name) !== false; }); return response()->json([ 'data' => WarehouseResource::collection($filtered), 'count' => $filtered->count(), 'message' => 'Recherche effectuée avec succès.' ]); } catch (\Exception $e) { Log::error('Error searching warehouses: ' . $e->getMessage()); return response()->json([ 'message' => 'Une erreur est survenue lors de la recherche des entrepôts.', 'error' => config('app.debug') ? $e->getMessage() : null, ], 500); } } }