$delivery->id, 'tracking_code' => $delivery->tracking_code, ]); } /** * Handle the Delivery "updated" event. */ public function updated(Delivery $delivery): void { // Check if status changed if ($delivery->isDirty('status')) { $this->handleStatusChange($delivery); } // Check if rider changed if ($delivery->isDirty('rider_id')) { $this->handleRiderChange($delivery); } } /** * Handle status change. */ protected function handleStatusChange(Delivery $delivery): void { $originalStatus = $delivery->getOriginal('status'); Log::info('Delivery status changed', [ 'delivery_id' => $delivery->id, 'from' => $originalStatus, 'to' => $delivery->status->value, ]); // Handle specific status transitions if ($delivery->status === DeliveryStatus::DELIVERED) { $this->handleDeliveryCompleted($delivery); } if ($delivery->status === DeliveryStatus::CANCELLED) { $this->handleDeliveryCancelled($delivery); } } /** * Handle rider change. */ protected function handleRiderChange(Delivery $delivery): void { $originalRiderId = $delivery->getOriginal('rider_id'); $newRiderId = $delivery->rider_id; Log::info('Delivery rider changed', [ 'delivery_id' => $delivery->id, 'from_rider' => $originalRiderId, 'to_rider' => $newRiderId, ]); // Reinitialize tracking with new rider if ($newRiderId) { $this->trackingService->initializeDeliveryTracking($delivery); } } /** * Handle delivery completed. */ protected function handleDeliveryCompleted(Delivery $delivery): void { // End tracking $this->trackingService->endDeliveryTracking($delivery); Log::info('Delivery completed', [ 'delivery_id' => $delivery->id, 'rider_id' => $delivery->rider_id, 'duration_minutes' => $delivery->getActualDuration(), ]); } /** * Handle delivery cancelled. */ protected function handleDeliveryCancelled(Delivery $delivery): void { // End tracking $this->trackingService->endDeliveryTracking($delivery); Log::info('Delivery cancelled', [ 'delivery_id' => $delivery->id, 'cancelled_by' => $delivery->cancelled_by, 'reason' => $delivery->cancellation_reason, ]); } /** * Handle the Delivery "deleted" event. */ public function deleted(Delivery $delivery): void { // End tracking if still active if ($delivery->isActive()) { $this->trackingService->endDeliveryTracking($delivery); } Log::info('Delivery deleted', [ 'delivery_id' => $delivery->id, ]); } }