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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Observers;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\RestaurantDelivery\Models\DeliveryRating;
|
||||
|
||||
class DeliveryRatingObserver
|
||||
{
|
||||
/**
|
||||
* Handle the DeliveryRating "created" event.
|
||||
*/
|
||||
public function created(DeliveryRating $rating): void
|
||||
{
|
||||
Log::info('Delivery rating created', [
|
||||
'rating_id' => $rating->id,
|
||||
'delivery_id' => $rating->delivery_id,
|
||||
'rider_id' => $rating->rider_id,
|
||||
'overall_rating' => $rating->overall_rating,
|
||||
]);
|
||||
|
||||
// Auto-approve high ratings without review
|
||||
if ($rating->overall_rating >= 4 && ! $rating->review) {
|
||||
$rating->approve();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the DeliveryRating "updated" event.
|
||||
*/
|
||||
public function updated(DeliveryRating $rating): void
|
||||
{
|
||||
// Check if moderation status changed
|
||||
if ($rating->isDirty('moderation_status')) {
|
||||
Log::info('Rating moderation status changed', [
|
||||
'rating_id' => $rating->id,
|
||||
'from' => $rating->getOriginal('moderation_status'),
|
||||
'to' => $rating->moderation_status,
|
||||
]);
|
||||
|
||||
// Recalculate rider's rating if approved or rejected
|
||||
if (in_array($rating->moderation_status, ['approved', 'rejected'])) {
|
||||
$rating->rider?->recalculateRating();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the DeliveryRating "deleted" event.
|
||||
*/
|
||||
public function deleted(DeliveryRating $rating): void
|
||||
{
|
||||
Log::info('Delivery rating deleted', [
|
||||
'rating_id' => $rating->id,
|
||||
'rider_id' => $rating->rider_id,
|
||||
]);
|
||||
|
||||
// Recalculate rider's rating
|
||||
$rating->rider?->recalculateRating();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\RestaurantDelivery\Observers;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Modules\RestaurantDelivery\Models\Rider;
|
||||
use Modules\RestaurantDelivery\Notifications\RiderWarningNotification;
|
||||
use Modules\RestaurantDelivery\Services\Firebase\FirebaseService;
|
||||
|
||||
class RiderObserver
|
||||
{
|
||||
public function __construct(
|
||||
protected FirebaseService $firebase
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Handle the Rider "created" event.
|
||||
*/
|
||||
public function created(Rider $rider): void
|
||||
{
|
||||
Log::info('Rider created', [
|
||||
'rider_id' => $rider->id,
|
||||
'name' => $rider->full_name,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the Rider "updated" event.
|
||||
*/
|
||||
public function updated(Rider $rider): void
|
||||
{
|
||||
// Check if status changed
|
||||
if ($rider->isDirty('status')) {
|
||||
$this->handleStatusChange($rider);
|
||||
}
|
||||
|
||||
// Check if online status changed
|
||||
if ($rider->isDirty('is_online')) {
|
||||
$this->handleOnlineStatusChange($rider);
|
||||
}
|
||||
|
||||
// Check if rating changed
|
||||
if ($rider->isDirty('rating')) {
|
||||
$this->handleRatingChange($rider);
|
||||
}
|
||||
|
||||
// Check if verification status changed
|
||||
if ($rider->isDirty('is_verified')) {
|
||||
$this->handleVerificationChange($rider);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle status change.
|
||||
*/
|
||||
protected function handleStatusChange(Rider $rider): void
|
||||
{
|
||||
$originalStatus = $rider->getOriginal('status');
|
||||
|
||||
Log::info('Rider status changed', [
|
||||
'rider_id' => $rider->id,
|
||||
'from' => $originalStatus,
|
||||
'to' => $rider->status,
|
||||
]);
|
||||
|
||||
// Update Firebase
|
||||
if ($this->firebase->isEnabled()) {
|
||||
$this->firebase->updateRiderStatus($rider->id, $rider->status);
|
||||
}
|
||||
|
||||
// Handle suspension
|
||||
if ($rider->status === 'suspended') {
|
||||
Log::warning('Rider suspended', [
|
||||
'rider_id' => $rider->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle online status change.
|
||||
*/
|
||||
protected function handleOnlineStatusChange(Rider $rider): void
|
||||
{
|
||||
Log::info('Rider online status changed', [
|
||||
'rider_id' => $rider->id,
|
||||
'is_online' => $rider->is_online,
|
||||
]);
|
||||
|
||||
// Update Firebase
|
||||
if ($this->firebase->isEnabled()) {
|
||||
$this->firebase->updateRiderStatus(
|
||||
$rider->id,
|
||||
$rider->is_online ? 'online' : 'offline'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle rating change.
|
||||
*/
|
||||
protected function handleRatingChange(Rider $rider): void
|
||||
{
|
||||
$originalRating = $rider->getOriginal('rating');
|
||||
$newRating = $rider->rating;
|
||||
|
||||
Log::info('Rider rating changed', [
|
||||
'rider_id' => $rider->id,
|
||||
'from' => $originalRating,
|
||||
'to' => $newRating,
|
||||
]);
|
||||
|
||||
$thresholds = config('restaurant-delivery.rating.thresholds');
|
||||
$minRatings = $thresholds['minimum_ratings_for_threshold'] ?? 10;
|
||||
|
||||
// Only check thresholds if rider has enough ratings
|
||||
if ($rider->rating_count >= $minRatings) {
|
||||
// Check warning threshold
|
||||
$warningThreshold = $thresholds['warning_threshold'] ?? 3.0;
|
||||
if ($newRating <= $warningThreshold && $originalRating > $warningThreshold) {
|
||||
$rider->notify(new RiderWarningNotification($rider, 'low_rating'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle verification change.
|
||||
*/
|
||||
protected function handleVerificationChange(Rider $rider): void
|
||||
{
|
||||
Log::info('Rider verification status changed', [
|
||||
'rider_id' => $rider->id,
|
||||
'is_verified' => $rider->is_verified,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the Rider "deleted" event.
|
||||
*/
|
||||
public function deleted(Rider $rider): void
|
||||
{
|
||||
Log::info('Rider deleted', [
|
||||
'rider_id' => $rider->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user