# 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 - Написать тесты для кривых данных - Много чего другого :) ## Авторы - Сергей Ванюшкин ## Лицензия Распространяется под [MIT лицензией](https://mit-license.org/).