Сервис, который позволяет показывать пользователям баннеры, в зависимости от требуемой фичи и тега пользователя, а также управлять баннерами и связанными с ними тегами и фичами.
https://disk.yandex.ru/i/xiCEISJEF4f0yA
make env
- скопировать sample.env в .envmake up
- запустить сервис (banner_api, postgresql, redis)make fill-db count=10
- заполнить ДБ случайными значениямиmake down
- остановить сервис.make downv
- остановить сервис и удалить volumes
- Swagger: http://127.0.0.1:8000/api/openapi
- Postman: коллекция в корне проекта
Banner API.postman_collection.json
make test
- запустить тестыmake test-down
- полностью удалить контейнеры с тестами
- Линтеры - ruff, mypy
- Интеграционные тесты
- Метод удаления баннера по фиче/тегу. Для выполнения задачи использовался Dramatiq
Основной:
- Python 3.10
- FastAPI
- SQLAlchemy 2
- Dramatiq
- PostreSQL
- Redis
- Docker, docker-compose
Вспомогательный:
- Pydantic v2, pydantic-settings - конфиги, модели
- DependencyInjector - DI
- structlog, asgi_correlation_id - логирование, request-id
- alembic - миграции
Инструменты разработки, линтеры/форматтеры:
- mypy
- ruff
- pre-commit
Т.к. задачи разработать сервис аутентификации/авторизации не стояло, токены реализованы следующим образом:
- отрицательные число - администратор
- положительное число - обычный пользователь
Сделано что-то похожее на слоистую архитектуру. Выделены DTO, но нет абстрактных репозиториев.
Структура состоит из слоёв:
- DTO
- Репозитории (работа происходит через Unit of Work)
- Usecases
- Представления