Сервис разработан на django rest framework с celery
-
Склонировать репозиторий с Github:
-
Перейти в директорию проекта
-
Создать виртуальное окружение:
python -m venv venv
- Активировать окружение:
source\venv\bin\activate
-
В файле .evn заполнить необходимые данные:
TOKEN = '<your token>
-
Установка зависимостей:
pip install -r requirements.txt
- Создать и применить миграции в базу данных:
python manage.py makemigrations
python manage.py migrate
- Запустить сервер
python manage.py runserver
- Запустить celery
celery -A notification_project worker -l info
- Склонировать репозиторий с Github
- Перейти в директорию проекта
- В файле .evn заполнить необходимые данные:
TOKEN = '<your token>'
- Запустить контейнеры
sudo docker-compose up -d
- Остановка работы контейнеров
sudo docker-compose stop
http://0.0.0.0:8000/api/get_all_clients
- получить всех клиентов
http://0.0.0.0:8000/api/get_all_mailing
- получить все рассылки
http://0.0.0.0:8000/api/statistics/get_statistics
- получить статистику
подробнее в файле swagger.yml
Техзадание: https://www.craft.do/s/n6OVYFVUpq0o6L
Необходимо разработать сервис управления рассылками API администрирования и получения статистики
## Описание- Необходимо реализовать методы создания новой рассылки, просмотра созданных и получения статистики по выполненным рассылкам.
- Реализовать сам сервис отправки уведомлений на внешнее API.
- Опционально вы можете выбрать любое количество дополнительных пунктов описанных после основного.
Для успешного принятия задания как выполненного достаточно корректной и рабочей реализации требований по основной части, но дополнительные пункты помогут вам продемонстрировать ваши навыки в смежных технологиях.
## Критерии приёмки- Выполненное задание необходимо разместить в публичном репозитории на gitlab.com
- Понятная документация по запуску проекта со всеми его зависимостями
- Документация по API для интеграции с разработанным сервисом
- Описание реализованных методов в формате OpenAPI
- Если выполнено хотя бы одно дополнительное задание - написать об этом в документации, указав на конкретные пункты из списка ниже.
Спроектировать и разработать сервис, который по заданным правилам запускает рассылку по списку клиентов.
### Сущность "рассылка" имеет атрибуты:- уникальный id рассылки
- дата и время запуска рассылки
- текст сообщения для доставки клиенту
- фильтр свойств клиентов, на которых должна быть произведена рассылка (код мобильного оператора, тег)
- дата и время окончания рассылки: если по каким-то причинам не успели разослать все сообщения - никакие сообщения клиентам после этого времени доставляться не должны
- уникальный id клиента
- номер телефона клиента в формате 7XXXXXXXXXX (X - цифра от 0 до 9)
- код мобильного оператора
- тег (произвольная метка)
- часовой пояс
- уникальный id сообщения
- дата и время создания (отправки)
- статус отправки
- id рассылки, в рамках которой было отправлено сообщение
- id клиента, которому отправили
- добавления нового клиента в справочник со всеми его атрибутами
- обновления данных атрибутов клиента
- удаления клиента из справочника
- добавления новой рассылки со всеми её атрибутами
- получения общей статистики по созданным рассылкам и количеству отправленных сообщений по ним с группировкой по статусам
- получения детальной статистики отправленных сообщений по конкретной рассылке
- обновления атрибутов рассылки
- удаления рассылки
- обработки активных рассылок и отправки сообщений клиентам
- После создания новой рассылки, если текущее время больше времени начала и меньше времени окончания - должны быть выбраны из справочника все клиенты, которые подходят под значения фильтра, указанного в этой рассылке и запущена отправка для всех этих клиентов.
- Если создаётся рассылка с временем старта в будущем - отправка должна стартовать автоматически по наступлению этого времени без дополнительных действий со стороны пользователя системы.
- По ходу отправки сообщений должна собираться статистика (см. описание сущности "сообщение" выше) по каждому сообщению для последующего формирования отчётов.
- Внешний сервис, который принимает отправляемые сообщения, может долго обрабатывать запрос, отвечать некорректными данными, на какое-то время вообще не принимать запросы. Необходимо реализовать корректную обработку подобных ошибок. Проблемы с внешним сервисом не должны влиять на стабильность работы разрабатываемого сервиса рассылок.
Для интеграции с разрабатываемым проектом в данном задании существует внешний сервис, который может принимать запросы на отправку сообщений в сторону клиентов.
OpenAPI спецификация находится по адресу: https://probe.fbrq.cloud/docs
В этом API предполагается аутентификация с использованием JWT. Токен доступа предоставлен вам вместе с тестовым заданием.
## Дополнительные заданияОпциональные пункты, выполнение любого количества из приведённого списка повышают ваши шансы на положительное решение о приёме
- организовать тестирование написанного кода
- подготовить docker-compose для запуска всех сервисов проекта одной командой
- сделать так, чтобы по адресу /docs/ открывалась страница со Swagger UI и в нём отображалось описание разработанного API. Пример: https://petstore.swagger.io
- удаленный сервис может быть недоступен, долго отвечать на запросы или выдавать некорректные ответы. Необходимо организовать обработку ошибок и откладывание запросов при неуспехе для последующей повторной отправки. Задержки в работе внешнего сервиса никак не должны оказывать влияние на работу сервиса рассылок.
- обеспечить подробное логирование на всех этапах обработки запросов, чтобы при эксплуатации была возможность найти в логах всю информацию по • id рассылки - все логи по конкретной рассылке (и запросы на api и внешние запросы на отправку конкретных сообщений) • id сообщения - по конкретному сообщению (все запросы и ответы от внешнего сервиса, вся обработка конкретного сообщения) • id клиента - любые операции, которые связаны с конкретным клиентом (добавление/редактирование/отправка сообщения/…)