96 lines
5.3 KiB
Markdown
96 lines
5.3 KiB
Markdown
# fastfood
|
||
Fastapi веб приложение реализующее api для общепита.
|
||
|
||
## Описание
|
||
Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql.
|
||
|
||
## Техническое задание
|
||
### Спринт 4 - Многопроцессорность, асинхронность
|
||
В этом домашнем задании необходимо:
|
||
1.Переписать текущее FastAPI приложение на асинхронное выполнение
|
||
2.Добавить в проект фоновую задачу с помощью Celery + RabbitMQ.
|
||
3.Добавить эндпоинт (GET) для вывода всех меню со всеми связанными подменю и со всеми связанными блюдами.
|
||
4.Реализовать инвалидация кэша в background task (встроено в FastAPI)
|
||
5.* Обновление меню из google sheets раз в 15 сек.
|
||
6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx
|
||
|
||
Фоновая задача: синхронизация Excel документа и БД.
|
||
В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). Не забываем запушить в гит.
|
||
При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя.
|
||
|
||
|
||
Требования:
|
||
●Данные меню, подменю, блюд для нового эндпоинта должны доставаться одним ORM-запросом в БД (использовать подзапросы и агрегирующие функций SQL).
|
||
●Проект должен запускаться одной командой
|
||
●Проект должен соответствовать требованиям всех предыдущих вебинаров. (Не забыть добавить тесты для нового API эндпоинта)
|
||
|
||
### Выполненные доп задания со *
|
||
Спринт 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-compose
|
||
|
||
## Установка
|
||
|
||
Клонируйте репозиторий
|
||
> `$ git clone https://git.pi3c.ru/pi3c/fastfood.git`
|
||
|
||
Перейдите в каталог
|
||
> `$ cd fastfood`
|
||
|
||
Запуск/остановка образов:
|
||
|
||
- Запуск FAstAPI приложения c локальным файлом для фоновой задачи
|
||
> `$ 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>
|
||
|
||
По завершении работы остановите контейнеры
|
||
> `$ docker-compose -f compose_app.yml down`
|
||
|
||
- Запуск тестов
|
||
> `$ docker-compose -f compose_test.yml up`
|
||
|
||
По завершении работы остановите контейнеры
|
||
> `$ docker-compose -f compose_test.yml down`
|
||
|
||
|
||
|
||
## TODO
|
||
- Написать тесты для кривых данных
|
||
- Много чего другого :)
|
||
|
||
## Авторы
|
||
- Сергей Ванюшкин <pi3c@yandex.ru>
|
||
|
||
## Лицензия
|
||
Распространяется под [MIT лицензией](https://mit-license.org/).
|