Git Product home page Git Product logo

notification_service_api's Introduction

Сервис уведомлений

Cервис управления рассылками API администрирования и получения статистики. Тестовое задание для Fabrique.

Built with Cookiecutter Django Black code style

License: MIT

О проекте

Сущность "Рассылка":

Сделано:

  • реализована фильтрация по выбранными тегами и операторам:
    • если операторы не выбраны, то рассылка идет по всем операторам, если выбрано несколько, то в рассылку попадают клиенты с оператором из выбранных;
    • фильтрация по тегам происходит в зависимости от выбранной логики фильтрации: "Все выбранные теги" - в рассылку попадут клиенты у которых ксть все теги из выбранных, "Любой из выбранных тегов" - в рассылку попадут клиенты минимум с одним из выбранных тегов. Если теги не выбраны - рассылка будет производиться по всем клиентам.
  • время окончания рассылки не может быть меньше времени начала;
  • API: можно создавать рассылку только для существующих тегов и операторов;
  • получение общей статистики по созданным рассылкам и количеству отправленных сообщений по ним с группировкой по статусам
  • получение детальной статистики отправленных сообщений по конкретной рассылке

Сущность "Клиент":

  • API: при создании клиента с несуществующим тегом и/или оператором - недостающие сущности создаются автоматически;

Сущность "Сообщение":

  • создается автоматически при запуске рассылки.

Реализовано

  1. Реализована втоматическая сборка/тестирование с помощью GitHub CI
  2. Стек поднимается в docker-compose (local/production)
  3. Traefik как реверс-прокси в production
  4. По адресу api/docs/ открывается страница со Swagger UI
  5. Celery+Redis
  6. Обеспечено подробное логирование приложения
  7. Все подготовлено для написания тестов, написано несколько тестов
  8. Обеспечена интеграция с внешним OAuth2 сервисом авторизации (django-allauth)

В планах

  • Использовать django-celery-beat для работы с задачами
  • Реализовать администраторский Web UI
  • Реализовать дополнительный сервис, который раз в сутки отправляет статистику по обработанным рассылкам на email
  • Реализовать отдачу метрик в формате prometheus и задокументировать эндпоинты и экспортируемые метрики
  • Реализовать дополнительную бизнес-логику: добавить в сущность "рассылка" поле "временной интервал", в котором можно задать промежуток времени, в котором клиентам можно отправлять сообщения с учётом их локального времени. Не отправлять клиенту сообщение, если его локальное время не входит в указанный интервал.

Сборка и запуск

Клонировать репозиторий

git clone https://github.com/baikov/notification_service_api.git

Собираем стек в Docker

docker compose -f local.yml build

Поднимаем стек

docker compose -f local.yml up -d

Выполняем миграции

docker compose -f local.yml run --rm django python manage.py migrate

Создаем суперюзера

docker compose -f local.yml run --rm django python manage.py createsuperuser

Тестирование

docker compose -f local.yml run --rm django pytest

Дополнтельно

MailHog на порту 8025

Flower на порту 5555 admin:admin

notification_service_api's People

Contributors

baikov avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.