📖 Table of contents
📃 Description
Проект для отбора на стажировку от компании Ylab.
Использовал:
- Asyncpg для асинхронных запросов к базе данных.
- SQLModel как обёртку поверх SQLAlchemy и Pydantic.
- Alembic для миграций.
- Celery beat для периодических задач.
- Пакетный менеджер Poetry.
Выполнил все задания повышенной сложности:
- Реализовать вывод количества подменю и блюд для Меню через один (сложный) ORM запрос:
- app.menu.repository | line 59
- Реализовать тестовый сценарий «Проверка кол-ва блюд и подменю в меню» из Postman с помощью pytest:
- app.menu.tests.test_routes | line 83
- app.submenu.tests.test_routes | line 94
- Описать API эндпоинты в соответствий c OpenAPI.
- Добавил название, описание и теги для каждого эндпоинта.
- Реализовать в тестах аналог Django reverse() для FastAPI
- Добавил каждому эндпоинту название и затем использовал его в router.url_path_for методе
-
Анотация возвращаемых типов для сервисов реализована с помощью Generic и TypeVar, возвращаемый тип сервиса указывается при его создании в модулях dependencies.py.
❕ Peculiarities
- Для прохождения Postman тестов необходимо закоментировать Celery задачу синхронизирующую бд с Excel файлом:
- app.celery | line 14
- Эндпоинт для получения всех меню со всеми связанными подменю и блюдами:
- api/v1/data-processing/all/
- Сервисы синхронизации Excel файла с базой данных находятся в следующих дирректориях:
- app.data_processing.dependencies.admin
- app.data_processing.services.admin_service
- app.data_processing.services.admin_update_services
💽 Installation
-
Clone or download the repository.
-
Fill.env.dist
with the required variables or leave the filled ones for test start and rename the file to.env
. -
Run docker services:docker-compose -f docker/local/docker-compose.yml up
.
Для тестового запуска, переменные из .env.dist менять не нужно, просто переименуйте файл в .env
⚒️ Testing
-
Complete the first 2 steps of the 💽 Installation section.
-
Run docker services for testing:docker-compose -f docker/local/docker-compose.yml -f docker/test/docker-compose.yml up -d
Результат выполнения тестов отображается в логах контейнера.
Контейнер запускается, выполняет тесты и завершает свою работу. Для повторного запуска тестов необходимо перезапустить контейнер.
Для того, что бы не дублировать compose файлы, команда выше использует перезапись. Первый compose файл перезаписываеться вторым.
🪝 Pre-Commit hooks
-
Install:pre-commit install
-
Run:pre-commit run --all-files