feat: implement drop-off points & dumpsites edit/delete and status transition logic

This commit is contained in:
Super Admin
2026-06-29 23:15:55 +08:00
parent f2c1573f00
commit cfd7166a24
6 changed files with 355 additions and 33 deletions

View File

@@ -10,12 +10,15 @@ use App\Http\Resources\DropOffCapacityLogResource;
use App\Http\Resources\DropOffPointResource;
use App\Models\DropOffCapacityLog;
use App\Models\DropOffPoint;
use App\Services\DropOff\DropOffPointFinder;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use MatanYadaev\EloquentSpatial\Objects\Point;
class AdminDropOffPointController extends ApiController
{
public function __construct(private readonly DropOffPointFinder $dopFinder) {}
public function index(Request $request): JsonResponse
{
$request->validate([
@@ -89,12 +92,28 @@ class AdminDropOffPointController extends ApiController
public function update(UpdateDropOffPointRequest $request, DropOffPoint $dropOffPoint): JsonResponse
{
$data = $request->validated();
$oldStatus = $dropOffPoint->status;
$newStatus = $data['status'] ?? $oldStatus;
if (isset($data['lat'], $data['lng'])) {
$data['coordinates'] = $this->makePoint($data);
}
unset($data['lat'], $data['lng']);
$dropOffPoint->update($data);
DB::transaction(function () use ($dropOffPoint, $data, $oldStatus, $newStatus) {
$dropOffPoint->update($data);
if ($newStatus !== DropOffPoint::STATUS_ACTIVE && $oldStatus === DropOffPoint::STATUS_ACTIVE) {
$households = $dropOffPoint->households;
foreach ($households as $household) {
$nearest = $this->dopFinder->nearest(
$household->coordinates->latitude,
$household->coordinates->longitude
);
$household->update(['assigned_drop_off_point_id' => $nearest?->id]);
}
}
});
return $this->ok(
new DropOffPointResource($dropOffPoint->fresh()->load('barangay')),