Сергей Ванюшкин f75415d9d9 | ||
---|---|---|
admin | ||
bg_tasks | ||
fastfood | ||
postman_scripts | ||
tests | ||
.env | ||
.gitignore | ||
.pre-commit-config.yaml | ||
Dockerfile | ||
README.md | ||
compose_app.yml | ||
compose_google.yml | ||
compose_test.yml | ||
creds.json | ||
example.env | ||
manage.py | ||
openapi.json | ||
poetry.lock | ||
pyproject.toml |
README.md
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 будет доступна по адресу http://localhost:8000
По завершении работы остановите контейнеры
$ 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 лицензией.