Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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

3. В этом домашнем задании необходимо:

- Вынести бизнес логику и запросы в БД в отдельные слои приложения.
- Добавить кэширование запросов к 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**