Skip to content

DraksPlay/ServiceNotification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

Сервис уведомлений (Service Notification)

Задача

Необходимо разработать сервис управления рассылками 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published