Zaed_Abdullah/irrigation-report-api/app/Http/Controllers/Report/StatusController.php
2024-12-31 11:48:55 +07:00

71 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers\Report;
use App\Http\Controllers\Controller;
use App\Http\Resources\Report\StatusResource;
use App\Models\Report\Status;
use App\Services\Report\StatusFilter;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Spatie\QueryBuilder\QueryBuilder;
class StatusController extends Controller
{
public function index(Request $request)
{
$statusFilter = new StatusFilter();
$queryItems = $statusFilter->transform($request);
$query = QueryBuilder::for(Status::class)
->allowedSorts([
'id', 'name', 'desc', 'created_at', 'updated_at'
]);
foreach ($queryItems as $filter) {
$query->where($filter[0], $filter[1], $filter[2]);
}
if ($request->has('limit')) {
$status = $query->paginate($request->query('limit'));
} else {
$status = $query->paginate();
}
$status->getCollection()->transform(function ($status) {
return $status;
});
return StatusResource::collection($status);
}
public function show($id)
{
$statusId = Status::findOrFail($id);
return new StatusResource($statusId);
}
public function destroy($id)
{
try {
$status = Status::findOrFail($id);
$status->delete();
return response()->json([
'message' => 'Status deleted successfully',
], 200);
} catch (ModelNotFoundException $e) {
return response()->json([
'error' => 'Status not found with provided ID',
'message' => $e->getMessage(),
], 404);
} catch (\Exception $e) {
return response()->json([
'error' => 'Failed to delete Status',
'message' => $e->getMessage(),
], 500);
}
}
}