2024-01-22 20:54:01 +03:00
# fastfood
Fastapi веб приложение реализующее api для общепита.
2024-01-28 16:29:54 +03:00
## Описание
2024-01-29 02:19:02 +03:00
Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql.
2024-01-22 20:54:01 +03:00
2024-01-29 02:19:02 +03:00
## Техническое задание
2024-02-13 02:44:24 +03:00
### Спринт 4 - Многопроцессорность, асинхронность
В этом домашнем задании необходимо:
1.Переписать текущее FastAPI приложение на асинхронное выполнение
2.Добавить в проект фоновую задачу с помощью Celery + RabbitMQ.
3.Добавить эндпоинт (GET) для вывода всех меню с о всеми связанными подменю и с о всеми связанными блюдами.
4.Реализовать инвалидация кэша в background task (встроено в FastAPI)
5.* Обновление меню из google sheets раз в 15 сек.
6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx
2024-01-22 22:05:52 +03:00
2024-02-13 02:44:24 +03:00
Фоновая задача: синхронизация Excel документа и БД.
В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). Н е забываем запушить в гит.
При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя.
2024-01-22 22:05:52 +03:00
2024-02-13 02:44:24 +03:00
Требования:
●Данные меню, подменю, блюд для нового эндпоинта должны доставаться одним ORM-запросом в БД (использовать подзапросы и агрегирующие функций SQL).
●Проект должен запускаться одной командой
●Проект должен соответствовать требованиям всех предыдущих вебинаров. (Н е забыть добавить тесты для нового API эндпоинта)
2024-01-22 20:54:01 +03:00
2024-02-13 02:44:24 +03:00
### Выполненные доп задания с о *
Спринт 2
3.* Реализовать вывод количества подменю и блюд для Меню через один (сложный) ORM запрос.
`./fastfood/repository/menu.py` Метод `get_menu_item`
2024-01-29 02:19:02 +03:00
2024-02-13 02:44:24 +03:00
4.** Реализовать тестовый сценарий «Проверка кол-ва блюд и подменю в меню» из Postman с помощью pytest
`./tests/test_postman.py`
2024-01-29 02:19:02 +03:00
2024-02-13 02:44:24 +03:00
Спринт 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 блюда}
2024-01-29 02:19:02 +03:00
2024-01-22 20:54:01 +03:00
## Зависимости
2024-01-29 02:19:02 +03:00
- docker
- docker-compose
2024-01-22 20:54:01 +03:00
## Установка
2024-01-31 02:14:43 +03:00
2024-01-29 02:19:02 +03:00
Клонируйте репозиторий
> `$ git clone https://git.pi3c.ru/pi3c/fastfood.git`
Перейдите в каталог
> `$ cd fastfood`
2024-01-31 02:21:12 +03:00
Запуск/остановка образов:
2024-01-31 01:05:28 +03:00
2024-02-13 02:44:24 +03:00
- Запуск FAstAPI приложения c локальным файлом для фоновой задачи
> `$ docker-compose -f compose_app.yml up`
- Запуск FAstAPI приложения c Google Sheets для фоновой задачи
> `$ docker-compose -f compose_google.yml up`
(ЧИТАЙТЕ СООБЩЕНИЕ В ЧАТЕ)
2024-01-31 02:14:43 +03:00
2024-02-03 01:08:04 +03:00
После успешного запуска образов документация по API будет доступна по адресу < a href = "http://localhost:8000/docs" > http://localhost:8000< / a >
2024-01-31 02:21:12 +03:00
2024-01-31 01:05:28 +03:00
По завершении работы остановите контейнеры
> `$ docker-compose -f compose_app.yml down`
- Запуск тестов
2024-01-30 23:11:40 +03:00
> `$ docker-compose -f compose_test.yml up`
2024-01-31 02:14:43 +03:00
2024-01-31 01:05:28 +03:00
По завершении работы остановите контейнеры
> `$ docker-compose -f compose_test.yml down`
2024-01-29 02:19:02 +03:00
2024-01-22 20:54:01 +03:00
## TODO
2024-01-29 22:22:36 +03:00
- Написать тесты для кривых данных
2024-01-22 20:54:01 +03:00
- Много чего другого :)
## Авторы
- Сергей Ванюшкин < pi3c @ yandex . ru >
## Лицензия
2024-01-22 22:05:52 +03:00
Распространяется под [MIT лицензией ](https://mit-license.org/ ).