Есть много пользователей. Но пример сделаю на одном.
Пользователю надо отправить письмо, а лучше 100 писем.
Эти письма заранее есть, либо могут создаваться.
Письма отправляются по расписанию, которое задаёт пользователь. (Например каждые 17 минут)
Теперь объединим всё это:
Есть 100 писем в очереди. Расписание каждые 17 минут. Всё просто, FIFO и отлично.
Но каждое письмо может иметь свои параметры, для отправки или удаления или еще чего-то. Например:
Есть письмо, которое должно отправится в определенное время.
Другое письмо, должно отправиться следующим.
Третье письмо, через час после отправки, должно быть удалено из БД.
Четвертое письмо имеет сразу 2 действия, и удаление как в 3-ем, и в определенное время.
Пятое письмо вообще особенное, после его отправки, мы больше не шлём писем следующие 5 часов.
Так-же пользователь может создать письмо, и добавить его в рассылку с различными комбинациями статусов. Например:
Отправить письмо моментально.
Отправить письмо следующим( LIFO last in first out)
Просто добавляется в очередь
Добавляется в очередь, с приоритетом(от 0 до 100)
Проблема:о
Очень много различных параметров которые могут быть у письма. И у меня возникла проблема как спроектировать БД под это дело.
Мои мысли по этому поводу:
Мы имеем 3 состояния.
Когда отправляем, Что делаем после отправки.
Когда отправляем:
- Моментально - отправится при следующем запуске скрипта отправщика.
- Следующий (LIFO) - становится первым в очереди
- По времени - указываем дополнительно время когда должны будем отправить именно это письмо.
- В очередь - возможно указание приоритета (0..100) Приоритетом можно изменять порядок отправки писем.
- Сразу после первого - После отправки следующего, моментально отправляем
Что делаем после отправки:
- Удаляем письмо через день.
- Удаляем письмо 18 июля в 15-00
- Удаляем письмо сразу после отправки следующего письма.
- Замораживаем отправку на 1 день
Таблица "mails"
id
user_id
title - название
text - текст
date - заполняется во время отправки
status - статус отправлено / не отправлено
before_type - вид действия управляющее очередностью отправки
before_time - если надо, то время.
delete_type - тип действия, что делать после.
delete_time - время.
freeze_type - заморозка отправки
freeze_time - Время
Собственно, как-то всё сложно уложить в голове.
По данной таблице mails будет вестись рассылка.(т.е. скрипты отсылки, будут использовать данную таблицу)
Дополнительно есть еще таблица schedule с расписанием, которое установил пользователь.