validate([ 'status' => ['nullable', 'in:active,maintenance,retired'], 'q' => ['nullable', 'string', 'max:100'], 'per_page' => ['nullable', 'integer', 'min:1', 'max:100'], ]); $perPage = (int) $request->input('per_page', 25); $trucks = Truck::query() ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) ->when($request->filled('q'), function ($q) use ($request) { $term = '%'.$request->string('q').'%'; $q->where(fn ($qq) => $qq->where('plate_number', 'like', $term)->orWhere('model', 'like', $term)); }) ->orderBy('plate_number') ->paginate($perPage); return $this->ok( TruckResource::collection($trucks), null, [ 'page' => $trucks->currentPage(), 'per_page' => $trucks->perPage(), 'total' => $trucks->total(), 'last_page' => $trucks->lastPage(), ], ); } public function store(StoreTruckRequest $request): JsonResponse { $truck = Truck::create($request->validated()); return $this->created(new TruckResource($truck), 'Truck created'); } public function show(Truck $truck): JsonResponse { return $this->ok(new TruckResource($truck)); } public function update(StoreTruckRequest $request, Truck $truck): JsonResponse { $truck->update($request->validated()); return $this->ok(new TruckResource($truck->fresh()), 'Truck updated'); } public function destroy(Truck $truck): JsonResponse { $truck->delete(); return $this->ok(null, 'Truck deleted'); } }