Создать сервис для отправки уведомлений пользователям. Пользователь может получать уведомления через:
- SMS
- Telegram
Нужно обеспечить надежную доставку - если один способ не сработал, попробовать другой.
- Язык программирования:
- Python 3.12
- Фреймворк:
- Django Rest Framework
- ORM:
- Django ORM
- Хранение данных:
- PostgreSQL 17
- Очереди сообщений:
- Celery + RabbitMQ
-
Клонируйте проект:
git clone https://github.com/annaputilovskaya/NotificationService.git
-
Создайте файл .env в корне проекта по образцу (Файл .env.example) и заполните его данными.
Команда для Unix-подобных систем для копирования файла:
cp .env.example .env
-
Убедитесь, что на Вашем устройстве установлен Docker.
Проверка версии Docker:
docker --version
Если докер не установлен, осуществите его установку по инструкции с официального сайта
-
Осуществите сборку образов и запуск контейнеров:
docker compose up -d --build
- Пользователи:
- Регистрация с email и паролем
- Получение токена для авторизация
- ОБновление токена авторизации
- Получатели
- Создание получателя
- Просмотр получателя
- Просмотр списка получателей
- Изменение получтаеля
- Удаление получателя
- Уведомления
- Создание уведомления
- Просмотр уведомления
- Просмотр списка уведомлений
При создания уведомления создается задача по отправке уведомления. Происходит выбор стратегии отпраки уведомления в следующем порядке:
- Telegram
- SMS
В случае, если первая стратегия не сработала, переходим ко второй, далее к третьей. Если ни одна страегия отправки для каких-либо получателей не сработала, повторяем попытку отправки для этих получателей через определенный временной интервал.
Сервис подходит для отправки разовых уведомлений. Если нужны повторяющиеся уведомления, возможна доработка.
В проекте настроено логирование отправки уведомлений с отправкой логов в консоль и с сохранением в файл.
Проведено ручное тестирование проекта с помощью Postman.
Автоматизированное тестирование не проводилось.
Для более подробной информации об API ознакомьтесь с интерактивной документацией.
Если проект запущен на localhost, пройдите по ссылке