fastfood/README.md

96 lines
5.3 KiB
Markdown
Raw Permalink Normal View History

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
После успешного запуска образов документация по 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/).