Сервис "Календарь" представляет собой максимально упрощенный сервис для хранения календарных событий и отправки уведомлений.
Сервис предполагает возможность:
- добавить/обновить событие;
- получить список событий на день/неделю/месяц;
- получить уведомление за N дней и часов до события.
Полностью завершенный сервис состоит из 5 процессов.
API предоставляет собой GRPC и HTTP интерфейсы для пользователей.
Планировщик - это фоновый процесс, который не взаимодействует с пользователем и выполняет периодические задания:
- выбор событий, требующих уведомления и отправка уведомлений в очередь рассыльщику;
- очистка старых (более 1 года назад) событий.
Рассыльщик - это фоновый процесс, занимающийся отправкой уведомлений.
На раннем этапе разработки рассыльщик просто записывает эти сообщения в лог.
Реляционная СУБД (PostgreSQL) - хранит информацию о событиях.
Очередь сообщений (RabbitMQ) - используется для передачи уведомлений от Планировщика Рассыльщику.
Событие - основная сущность, содержит в себе поля:
- ID - уникальный идентификатор события;
- Заголовок - короткий текст;
- Дата и время события;
- Дата и время окончания события;
- Описание события - длинный текст;
- За сколько времени высылать уведомление, опционально.
Уведомление - временная сущность, в БД не хранится, складывается в очередь для рассыльщика, содержит поля:
- ID события;
- Заголовок события;
- Дата события;
- Создать (событие);
- Обновить (ID события, событие);
- Удалить (ID события);
- СписокСобытийНаДень (дата);
- СписокСобытийНаНеделю (дата начала недели);
- СписокСобытийНaМесяц (дата начала месяца).