Создать файл .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 тяжело читать, неудобно читаемо отформатирован код, стоило бы его поделить на подфункции