New-Thanasoft/thanasoft-back/app/Http/Controllers/Api/GoodsReceiptController.php

134 lines
5.0 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreGoodsReceiptRequest;
use App\Http\Requests\UpdateGoodsReceiptRequest;
use App\Http\Resources\GoodsReceiptResource;
use App\Repositories\GoodsReceiptRepositoryInterface;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;
class GoodsReceiptController extends Controller
{
public function __construct(
private readonly GoodsReceiptRepositoryInterface $goodsReceiptRepository
) {
}
/**
* Display a listing of goods receipts.
*/
public function index(): JsonResponse
{
try {
$goodsReceipts = $this->goodsReceiptRepository->all();
return response()->json([
'data' => GoodsReceiptResource::collection($goodsReceipts),
'status' => 'success'
]);
} catch (\Exception $e) {
Log::error('Error fetching goods receipts: ' . $e->getMessage());
return response()->json([
'message' => 'Une erreur est survenue lors de la récupération des réceptions de marchandises.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Store a newly created goods receipt.
*/
public function store(StoreGoodsReceiptRequest $request): JsonResponse
{
try {
$goodsReceipt = $this->goodsReceiptRepository->create($request->validated());
return response()->json([
'data' => new GoodsReceiptResource($goodsReceipt),
'message' => 'Réception de marchandise créée avec succès.',
'status' => 'success'
], 201);
} catch (\Exception $e) {
Log::error('Error creating goods receipt: ' . $e->getMessage());
return response()->json([
'message' => 'Une erreur est survenue lors de la création de la réception de marchandise.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Display the specified goods receipt.
*/
public function show(string $id): JsonResponse
{
try {
$goodsReceipt = $this->goodsReceiptRepository->find((int) $id);
if (!$goodsReceipt) {
return response()->json(['message' => 'Réception de marchandise non trouvée.'], 404);
}
return response()->json([
'data' => new GoodsReceiptResource($goodsReceipt),
'status' => 'success'
]);
} catch (\Exception $e) {
Log::error('Error fetching goods receipt: ' . $e->getMessage());
return response()->json([
'message' => 'Une erreur est survenue lors de la récupération de la réception de marchandise.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Update the specified goods receipt.
*/
public function update(UpdateGoodsReceiptRequest $request, string $id): JsonResponse
{
try {
$updated = $this->goodsReceiptRepository->update((int) $id, $request->validated());
if (!$updated) {
return response()->json(['message' => 'Réception de marchandise non trouvée ou échec de la mise à jour.'], 404);
}
$goodsReceipt = $this->goodsReceiptRepository->find((int) $id);
return response()->json([
'data' => new GoodsReceiptResource($goodsReceipt),
'message' => 'Réception de marchandise mise à jour avec succès.',
'status' => 'success'
]);
} catch (\Exception $e) {
Log::error('Error updating goods receipt: ' . $e->getMessage());
return response()->json([
'message' => 'Une erreur est survenue lors de la mise à jour de la réception de marchandise.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
/**
* Remove the specified goods receipt.
*/
public function destroy(string $id): JsonResponse
{
try {
$deleted = $this->goodsReceiptRepository->delete((int) $id);
if (!$deleted) {
return response()->json(['message' => 'Réception de marchandise non trouvée ou échec de la suppression.'], 404);
}
return response()->json([
'message' => 'Réception de marchandise supprimée avec succès.',
'status' => 'success'
]);
} catch (\Exception $e) {
Log::error('Error deleting goods receipt: ' . $e->getMessage());
return response()->json([
'message' => 'Une erreur est survenue lors de la suppression de la réception de marchandise.',
'error' => config('app.debug') ? $e->getMessage() : null,
], 500);
}
}
}