Giter Club home page Giter Club logo

fabrique's Introduction

Notification service


Запуск проекта на локальной машине

Требования

Предварительно

Создать файл .env в корне проекта и заполнить его по примеру .env.example.

Запуск

docker compose up -d

При первом запуске нужно создать пользователя с правами администратора:

docker compose exec django python manage.py createsuperuser

Выполненные дополнительные задания

  • подготовить docker-compose для запуска всех сервисов проекта одной командой
  • сделать так, чтобы по адресу /docs/ открывалась страница со Swagger UI и в нём отображалось описание разработанного API. Пример: https://petstore.swagger.io
  • обеспечить автоматическую сборку/тестирование с помощью GitLab CI
  • реализовать администраторский Web UI для управления рассылками и получения статистики по отправленным сообщениям
  • обеспечить интеграцию с внешним OAuth2 сервисом авторизации для административного интерфейса. Пример: https://auth0.com
  • реализовать дополнительный сервис, который раз в сутки отправляет статистику по обработанным рассылкам на email
  • удаленный сервис может быть недоступен, долго отвечать на запросы или выдавать некорректные ответы. Необходимо организовать обработку ошибок и откладывание запросов при неуспехе для последующей повторной отправки. Задержки в работе внешнего сервиса никак не должны оказывать влияние на работу сервиса рассылок.
  • реализовать дополнительную бизнес-логику: добавить в сущность "рассылка" поле "временной интервал", в котором можно задать промежуток времени, в котором клиентам можно отправлять сообщения с учётом их локального времени. Не отправлять клиенту сообщение, если его локальное время не входит в указанный интервал.
  • обеспечить подробное логирование на всех этапах обработки запросов, чтобы при эксплуатации была возможность найти в логах всю информацию по
    • id рассылки - все логи по конкретной рассылке (и запросы на api и внешние запросы на отправку конкретных сообщений)
    • id сообщения - по конкретному сообщению (все запросы и ответы от внешнего сервиса, вся обработка конкретного сообщения)
    • id клиента - любые операции, которые связаны с конкретным клиентом (добавление/редактирование/отправка сообщения/…)

Выполненные задачи вне требований

  • реализовал healthcheck Docker-контейнера
  • более удобная фильтрация в админ-панели: select вместо li


Ревью тестового:

Не хватает декомпозиции кода, ооп, просто отступов между логически связанными участками кода и тд, а так же отсутствует типизация. Сейчас читать тяжело. Стоит поработать над чистотой и ясностью кода - разбивать на логические участки код и структурировать его, это очень важно для читающих код и для покрытия тестами в будущем кода.

Стек: Django, DRF, Postgres, Celery

✅ readme

✅ есть обработки исключений при отправке и get django orm

✅ логирование при отправке нотификаций. Но форматирование строк лучше было бы сделать через f строку, а не .format(...)

✅ gitlab ci

✅ docker-compose

❌ логика во views

❌ отправку нотификаций в celery задаче schedule_messages тяжело читать, неудобно читаемо отформатирован код, стоило бы его поделить на подфункции


fabrique's People

Contributors

abushka 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.