fastfood/README.md

5.3 KiB
Raw Permalink Blame History

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 лицензией.