Run the 15-min payment-expiry every minute through Symfony Scheduler so unpaid pending bookings flip to expired without a system crontab. Install symfony/scheduler; extract the expiry logic into AppointmentExpiryService (reused by the existing command); add ExpireAppointmentsMessage + handler and an #[AsSchedule] provider (RecurringMessage::every 1 minute); wire a scheduler_default transport in messenger.yaml. Slots already free just-in-time via isSlotTaken, so this only syncs the DB status. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
21 lines
607 B
PHP
21 lines
607 B
PHP
<?php
|
|
|
|
namespace App\Appointment\Schedule;
|
|
|
|
use App\Appointment\Message\ExpireAppointmentsMessage;
|
|
use Symfony\Component\Scheduler\Attribute\AsSchedule;
|
|
use Symfony\Component\Scheduler\RecurringMessage;
|
|
use Symfony\Component\Scheduler\Schedule;
|
|
use Symfony\Component\Scheduler\ScheduleProviderInterface;
|
|
|
|
#[AsSchedule('appointment_expiry')]
|
|
final class ExpireAppointmentsSchedule implements ScheduleProviderInterface
|
|
{
|
|
public function getSchedule(): Schedule
|
|
{
|
|
return (new Schedule())->add(
|
|
RecurringMessage::every('1 minute', new ExpireAppointmentsMessage())
|
|
);
|
|
}
|
|
}
|