migrate to gtea from bistbucket
This commit is contained in:
@@ -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