migrate to gtea from bistbucket
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Observers;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\RestaurantDelivery\Enums\DeliveryStatus;
|
||||
use Modules\RestaurantDelivery\Models\Delivery;
|
||||
use Modules\RestaurantDelivery\Services\Tracking\LiveTrackingService;
|
||||
|
||||
class DeliveryObserver
|
||||
{
|
||||
public function __construct(
|
||||
protected LiveTrackingService $trackingService
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Handle the Delivery "created" event.
|
||||
*/
|
||||
public function created(Delivery $delivery): void
|
||||
{
|
||||
Log::info('Delivery created', [
|
||||
'delivery_id' => $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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user