Сендер почты по расписанию
проект таск-менеджер, стоит следующая задача: необходимо сделать сендер-напоминалку за день до окончания задачи на почту пользователя. Примерный алгоритм:
- Задача создаётся с полем id и deadline, летит в очередь
- Шедулер подхватывает значение deadline и высчитывает дату как deadline - date.now + 24h и когда этот момент настает, вызывает сендер с данными задачи (задачу нужно отобразить в письме в таком виде, в каком и на сайте)
- Удаление задачи с очереди и шедулера
Если я правильно понял алгоритм, подскажите, пожалуйста, как реализовать это
Ответы (1 шт):
Автор решения: Gromfer
→ Ссылка
- Зачем задача летит в очередь? Она просто хранится в бд.
- Как вариант, шедулер раз в час запускает джоб на проверку задач по которым нужно разослать уведомления о дедлайне.
$scheduler->job(new CheckForTaskDeadlinedJob())->hourly();
В джобе берешь задачи по которым нужно отправить уведомление. Если важно уведомить только один раз, то можно добавить флаг о том что уведомление уже было отправлено.
function handle() {
Task::whereDate('deadline_at', '<', now()->addDay())
->each(fn(Task $task) => dispatch(new TaskDeadlinedNotification($task)));
}
- Джоб с уведомлением отправляет письмо, в нем можно отправить задачу как view файл.
Если что-то не понятно, спрашивай