Необходимо разработать сервис управления рассылками API администрирования и получения статистики
• Необходимо реализовать методы создания новой рассылки, просмотра созданных и получения статистики по выполненным рассылкам.
• Реализовать сам сервис отправки уведомлений на внешнее API.
• Опционально вы можете выбрать любое количество дополнительных пунктов описанных после основного. Для успешного принятия задания как выполненного достаточно корректной и рабочей реализации требований по основной части, но дополнительные пункты помогут вам продемонстрировать ваши навыки в смежных технологиях.
Спроектировать и разработать сервис, который по заданным правилам запускает рассылку по списку клиентов.
Сущность "рассылка" имеет атрибуты:
• уникальный id рассылки
• дата и время запуска рассылки
• текст сообщения для доставки клиенту
• фильтр свойств клиентов, на которых должна быть произведена рассылка (код мобильного оператора, тег)
• дата и время окончания рассылки: если по каким-то причинам не успели разослать все сообщения - никакие сообщения клиентам после этого времени доставляться не должны
Сущность "клиент" имеет атрибуты:
• уникальный id клиента
• номер телефона клиента в формате 7XXXXXXXXXX (X - цифра от 0 до 9)
• код мобильного оператора
• тег (произвольная метка)
• часовой пояс
Сущность "сообщение" имеет атрибуты:
• уникальный id сообщения
• дата и время создания (отправки)
• статус отправки
• id рассылки, в рамках которой было отправлено сообщение
• id клиента, которому отправили
Спроектировать и реализовать API для:
• добавления нового клиента в справочник со всеми его атрибутами
• обновления данных атрибутов клиента
• удаления клиента из справочника
• добавления новой рассылки со всеми её атрибутами
• получения общей статистики по созданным рассылкам и количеству отправленных сообщений по ним с группировкой по статусам
• получения детальной статистики отправленных сообщений по конкретной рассылке
• обновления атрибутов рассылки
• удаления рассылки
• обработки активных рассылок и отправки сообщений клиентам
• После создания новой рассылки, если текущее время больше времени начала и меньше времени окончания - должны быть выбраны из справочника все клиенты, которые подходят под значения фильтра, указанного в этой рассылке и запущена отправка для всех этих клиентов.
• Если создаётся рассылка с временем старта в будущем - отправка должна стартовать автоматически по наступлению этого времени без дополнительных действий со стороны пользователя системы.
• По ходу отправки сообщений должна собираться статистика (см. описание сущности "сообщение" выше) по каждому сообщению для последующего формирования отчётов.
• Внешний сервис, который принимает отправляемые сообщения, может долго обрабатывать запрос, отвечать некорректными данными, на какое-то время вообще не принимать запросы. Необходимо реализовать корректную обработку подобных ошибок. Проблемы с внешним сервисом не должны влиять на стабильность работы разрабатываемого сервиса рассылок.
API внешнего сервиса отправки Для интеграции с разрабатываемым проектом в данном задании существует внешний сервис, который может принимать запросы на отправку сообщений в сторону клиентов.
OpenAPI спецификация находится по адресу: https://probe.fbrq.cloud/docs
В этом API предполагается аутентификация с использованием JWT. Токен доступа предоставлен вам вместе с тестовым заданием.
Запустите виртуальное окружение в проекте и выполните команду
docker-compose up
amqp==5.1.1 asgiref==3.7.2 celery==5.3.1 Django==4.2.2 django-celery-beat==2.5.0 djangorestframework==3.14.0 drf-yasg==1.21.6 requests==2.31.0