Files
Verde-Web/app/Http/Controllers/Api/V1/Admin/AdminTruckController.php
admin 15f9295d34 feat(backend): complete Module 9 (teams + trucks)
trucks (with optional last_known_coordinates POINT 4326),
collection_teams, team_members. Admin CRUD for both. TeamConflictDetector
flags double-assignment of driver/scanner/truck/helper across active
teams; override_conflicts: true bypasses for emergencies. Promotes
routes.default_team_id to a real FK now that collection_teams exists.

144 feature tests passing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 02:48:40 +08:00

71 lines
2.1 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1\Admin;
use App\Http\Controllers\Api\V1\ApiController;
use App\Http\Requests\Team\StoreTruckRequest;
use App\Http\Resources\TruckResource;
use App\Models\Truck;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AdminTruckController extends ApiController
{
public function index(Request $request): JsonResponse
{
$request->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');
}
}