Readme
parent
d54e704dfb
commit
4c3779776d
63
README.md
63
README.md
|
@ -5,29 +5,50 @@ Fastapi веб приложение реализующее api для общеп
|
||||||
Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql.
|
Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql.
|
||||||
|
|
||||||
## Техническое задание
|
## Техническое задание
|
||||||
### Спринт 3 - Паттерны и принципы разработки
|
### Спринт 4 - Многопроцессорность, асинхронность
|
||||||
|
В этом домашнем задании необходимо:
|
||||||
|
1.Переписать текущее FastAPI приложение на асинхронное выполнение
|
||||||
|
2.Добавить в проект фоновую задачу с помощью Celery + RabbitMQ.
|
||||||
|
3.Добавить эндпоинт (GET) для вывода всех меню со всеми связанными подменю и со всеми связанными блюдами.
|
||||||
|
4.Реализовать инвалидация кэша в background task (встроено в FastAPI)
|
||||||
|
5.* Обновление меню из google sheets раз в 15 сек.
|
||||||
|
6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx
|
||||||
|
|
||||||
1.Вынести бизнес логику и запросы в БД в отдельные слои приложения.
|
Фоновая задача: синхронизация Excel документа и БД.
|
||||||
|
В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). Не забываем запушить в гит.
|
||||||
|
При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя.
|
||||||
|
|
||||||
2.Добавить кэширование запросов к API с использованием Redis. Не забыть про инвалидацию кэша.
|
|
||||||
|
|
||||||
3.Добавить pre-commit хуки в проект. Файл yaml будет прикреплен к ДЗ.
|
|
||||||
|
|
||||||
4.Покрыть проект type hints (тайпхинтами)
|
|
||||||
|
|
||||||
5.* Описать ручки API в соответствий c OpenAPI
|
|
||||||
|
|
||||||
6.** Реализовать в тестах аналог Django reverse() для FastAPI
|
|
||||||
|
|
||||||
Требования:
|
Требования:
|
||||||
●Код должен проходить все линтеры.
|
●Данные меню, подменю, блюд для нового эндпоинта должны доставаться одним ORM-запросом в БД (использовать подзапросы и агрегирующие функций SQL).
|
||||||
●Код должен соответствовать принципам SOLID, DRY, KISS.
|
●Проект должен запускаться одной командой
|
||||||
●Проект должен запускаться по одной команде (докер).
|
●Проект должен соответствовать требованиям всех предыдущих вебинаров. (Не забыть добавить тесты для нового API эндпоинта)
|
||||||
●Проект должен проходить все Postman тесты (коллекция с Вебинара №1).
|
|
||||||
●Тесты написанные вами после Вебинара №2, должны быть актуальны, запускать и успешно проходить
|
### Выполненные доп задания со *
|
||||||
|
Спринт 2
|
||||||
|
3.* Реализовать вывод количества подменю и блюд для Меню через один (сложный) ORM запрос.
|
||||||
|
`./fastfood/repository/menu.py` Метод `get_menu_item`
|
||||||
|
|
||||||
|
4.** Реализовать тестовый сценарий «Проверка кол-ва блюд и подменю в меню» из Postman с помощью pytest
|
||||||
|
`./tests/test_postman.py`
|
||||||
|
|
||||||
|
Спринт 3
|
||||||
|
5.* Описать ручки API в соответствий c OpenAPI
|
||||||
|
'./openapi.json'
|
||||||
|
|
||||||
|
6.** Реализовать в тестах аналог Django reverse() для FastAPI
|
||||||
|
'./tests/urls.py'
|
||||||
|
|
||||||
|
Спринт 4
|
||||||
|
5.* Обновление меню из google sheets раз в 15 сек.
|
||||||
|
`./bg_tasks/` Реализовано чтение как локальной, так и удаленной таблицы.
|
||||||
|
В зависимости какой compose поднять, тот и будет использоваться
|
||||||
|
|
||||||
|
6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx
|
||||||
|
`./fastfood/service/dish.py`, метод _get_discont, подменяет сумму в выдаче,
|
||||||
|
скидка хранится в REDIS под ключами вида DISCONT:{UUID блюда}
|
||||||
|
|
||||||
|
|
||||||
Дополнительно:
|
|
||||||
Контейнеры с проектом и с тестами запускаются разными командами.
|
|
||||||
|
|
||||||
## Зависимости
|
## Зависимости
|
||||||
- docker
|
- docker
|
||||||
|
@ -43,9 +64,13 @@ Fastapi веб приложение реализующее api для общеп
|
||||||
|
|
||||||
Запуск/остановка образов:
|
Запуск/остановка образов:
|
||||||
|
|
||||||
- Запуск FAstAPI приложения
|
- Запуск FAstAPI приложения c локальным файлом для фоновой задачи
|
||||||
> `$ docker-compose -f compose_app.yml up`
|
> `$ docker-compose -f compose_app.yml up`
|
||||||
|
|
||||||
|
- Запуск FAstAPI приложения c Google Sheets для фоновой задачи
|
||||||
|
> `$ docker-compose -f compose_google.yml up`
|
||||||
|
(ЧИТАЙТЕ СООБЩЕНИЕ В ЧАТЕ)
|
||||||
|
|
||||||
После успешного запуска образов документация по API будет доступна по адресу <a href="http://localhost:8000/docs">http://localhost:8000</a>
|
После успешного запуска образов документация по API будет доступна по адресу <a href="http://localhost:8000/docs">http://localhost:8000</a>
|
||||||
|
|
||||||
По завершении работы остановите контейнеры
|
По завершении работы остановите контейнеры
|
||||||
|
|
Loading…
Reference in New Issue