## Домашнее задание №14 «Кроликизация Календаря»
Необходимо реализовать "напоминания" о событиях с помощью RabbitMQ (кролика).
Общая концепция описана в [техническом задании](./CALENDAR.MD).

Порядок выполнения ДЗ:
* установить локально очередь сообщений RabbitMQ (или сразу через Docker, если знаете как);
* создать процесс Планировщик (`scheduler`), который периодически сканирует основную базу данных,
выбирая события о которых нужно напомнить:
    - при запуске процесс должен подключаться к RabbitMQ и создавать все необходимые структуры
    (топики и пр.) в ней;
    - процесс должен выбирать сообытия для которых следует отправить уведомление (у события есть соотв. поле),
    создавать для каждого Уведомление (описание сущности см. в [ТЗ](./CALENDAR.MD)),
    сериализовать его (например, в JSON) и складывать в очередь;
    - процесс должен очищать старые (произошедшие более 1 года назад) события.
* создать процесс Рассыльщик (`sender`), который читает сообщения из очереди и шлёт уведомления;
непосредственно отправку делать не нужно - достаточно логировать сообщения / выводить в STDOUT.
* настройки подключения к очереди, периодичность запуска и пр. настройки процессов вынести в конфиг проекта;
* работу с кроликом вынести в отдельный пакет, который будут использовать пакеты, реализующие процессы выше.

Процессы не должны зависеть от конкретной реализации RMQ-клиента.

В результате компиляции проекта (`make build`) должно получаться 3 отдельных исполняемых файла
(по одному на микросервис):
- API (`calendar`);
- Планировщик (`calendar_scheduler`);
- Рассыльщик (`calendar_sender`).

Каждый из сервисов должен принимать путь файлу конфигурации:
```bash
./calendar           --config=/path/to/calendar_config.yaml
./calendar_scheduler --config=/path/to/scheduler_config.yaml
./calendar_sender    --config=/path/to/sender_config.yaml
```

После запуска RabbitMQ и PostgreSQL процессы `calendar_scheduler` и `calendar_sender`
должны запускаться без дополнительных действий.

### Критерии оценки
- Makefile заполнен и пайплайн зеленый - 1 балл
- Работа с RMQ выделена в отдельный пакет, код не дублируется - 1 балл
- Реализован Планировщик:
    - отсылает уведомления о выбранных событиях - 2 балла
    - удаляет старые события - 1 балл
- Реализован Рассыльщик - 2 балла
- Можно собрать сервисы одной командой (`make build`) - 1 балл
- Понятность и чистота кода - до 2 баллов

#### Зачёт от 7 баллов
