Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/a-menshikov/ylab_fastapi_project
Проект выполнен в рамках интенсива Python от компании Y_lab. По результатам выполнения и техсобеса принят на стажировку в компанию Y_lab
https://github.com/a-menshikov/ylab_fastapi_project
async celery docker docker-compose open-api pydantic pytest python rabbitmq redis sqlalchemy
Last synced: about 1 month ago
JSON representation
Проект выполнен в рамках интенсива Python от компании Y_lab. По результатам выполнения и техсобеса принят на стажировку в компанию Y_lab
- Host: GitHub
- URL: https://github.com/a-menshikov/ylab_fastapi_project
- Owner: a-menshikov
- License: mit
- Created: 2023-07-20T19:52:33.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2023-10-31T06:35:26.000Z (about 1 year ago)
- Last Synced: 2024-10-01T00:03:27.952Z (about 2 months ago)
- Topics: async, celery, docker, docker-compose, open-api, pydantic, pytest, python, rabbitmq, redis, sqlalchemy
- Language: Python
- Homepage:
- Size: 175 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# YLab_Fastapi_project
Проект выполнен в рамках интенсива от Y_Lab. Проходил в июле-августе 2023г. Состоял из 4-х заданий.
ЗАДАНИЯ:
1. Написать проект на FastAPI с использованием PostgreSQL в качестве БД. В проекте следует реализовать REST API по работе с меню ресторана, все CRUD операции. Даны 3 сущности: Меню, Подменю, Блюдо.
Зависимости:
- У меню есть подменю, которые к ней привязаны.
- У подменю есть блюда.Условия:
- Блюдо не может быть привязано напрямую к меню, минуя подменю.
- Блюдо не может находиться в 2-х подменю одновременно.
- Подменю не может находиться в 2-х меню одновременно.
- Если удалить меню, должны удалиться все подменю и блюда этого меню.
- Если удалить подменю, должны удалиться все блюда этого подменю.
- Цены блюд выводить с округлением до 2 знаков после запятой.
- Во время выдачи списка меню, для каждого меню добавлять кол-во подменю и блюд в этом меню.
- Во время выдачи списка подменю, для каждого подменю добавлять кол-во блюд в этом подменю.2. В этом домашнем задании необходимо:
Обернуть программные компоненты в контейнеры. Контейнеры должны запускаться по одной команде “docker-compose up -d” или той которая описана вами в readme.md.
Образы для Docker:
- (API) python:3.10-slim
- (DB) postgres:15.1-alpine- Написать CRUD тесты для ранее разработанного API с помощью библиотеки pytest
- Подготовить отдельный контейнер для запуска тестов. Команду для запуска указать в README.md3. В этом домашнем задании необходимо:
- Вынести бизнес логику и запросы в БД в отдельные слои приложения.
- Добавить кэширование запросов к API с использованием Redis. Не забыть про инвалидацию кэша.
- Добавить pre-commit хуки в проект.
- Покрыть проект type hints (тайпхинтами)
- Описать ручки API в соответствий c OpenAPI
- Реализовать в тестах аналог Django reverse() для FastAPIДополнительно:
- Контейнеры с проектом и с тестами запускаются разными командами.
4. В этом домашнем задании необходимо:
- Переписать текущее FastAPI приложение на асинхронное выполнение
- Добавить в проект фоновую задачу с помощью Celery + RabbitMQ.
- Добавить эндпоинт (GET) для вывода всех меню со всеми связанными подменю и со всеми связанными блюдами.
- Реализовать инвалидация кэша в background task (встроено в FastAPI)
- Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsxФоновая задача:
Синхронизация Excel документа и БД. В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя.## Запуск
### **Запуск проекта с полным функционалом**
1. Клонировать репозиторий
```bash
git clone <ссылка с git-hub>
```2. Перейти в папку /YLab_Fastapi_project
3. Требуется файл .env - пример в репозитории. Для пробного запуска можно использовать приложенный пример.
4. Поднять контейнеры в фоновом режиме
```bash
docker compose up -d
```5. Чтобы прекратить работу контейнеров воспользуйтесь командой
```bash
docker compose down
```Если хотите прекратить работу контейнеров с удалением томов (рекомендуется), то дополните команду флагом -v
```bash
docker compose down -v
```6. Документация доступна по адресу
### **Запуск проекта с прохождением тестов через pytest**
Для прогона написанных мной тестов подготовлен отдельный вариант файла docker compose.
Сценарий тестирования предполагает старт контейнеров, вывод результатов прохождения тестов на экран и удаление контейнеров вместе с томами.Если проект был запущен локально раньше, то для стабильного запуска по данной инструкции необходимо остановить ранее запущенный сервис, удалить контейнеры, тома и образы, которые использовались для него.
Требуется файл .env_test - пример в репозитории. Для пробного запуска можно использовать приложенный пример. Переменная CELERY_STATUS должна быть в положении "false".
1. Для запуска сценария необходимо после клонирования репозитория выполнить в папке /YLab_Fastapi_project следующую команду
```bash
docker compose -f docker-compose-pytest.yml up -d && docker logs --follow backend && docker compose -f docker-compose-pytest.yml down -v
```## Контакты
**telegram** [@Menshikov_AS](https://t.me/Menshikov_AS)
**e-mail**