2025-06-22 01:18:38 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Observers;
|
|
|
|
|
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
use App\Services\TrafficResetService;
|
|
|
|
|
|
|
|
|
|
class UserObserver
|
|
|
|
|
{
|
2025-07-19 14:22:01 +08:00
|
|
|
public function __construct(
|
|
|
|
|
private readonly TrafficResetService $trafficResetService
|
|
|
|
|
) {
|
2025-06-22 01:18:38 +08:00
|
|
|
}
|
|
|
|
|
|
2025-07-19 14:22:01 +08:00
|
|
|
public function updated(User $user): void
|
2025-06-22 01:18:38 +08:00
|
|
|
{
|
2025-07-19 14:22:01 +08:00
|
|
|
if ($user->isDirty(['plan_id', 'expired_at'])) {
|
|
|
|
|
$user->refresh();
|
|
|
|
|
User::withoutEvents(function () use ($user) {
|
|
|
|
|
$nextResetTime = $this->trafficResetService->calculateNextResetTime($user);
|
|
|
|
|
$user->next_reset_at = $nextResetTime?->timestamp;
|
|
|
|
|
$user->save();
|
|
|
|
|
});
|
2025-06-22 01:18:38 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|