diff --git a/README.md b/README.md index 87ef887..13a8756 100644 --- a/README.md +++ b/README.md @@ -5,29 +5,50 @@ Fastapi веб приложение реализующее api для общеп Данный проект, это результат выполнения практических домашних заданий интенсива от YLAB Development. Проект реализован на фреймворке fastapi, с использованием sqlalchemy. В качестве базы данных используется postgresql. ## Техническое задание -### Спринт 3 - Паттерны и принципы разработки +### Спринт 4 - Многопроцессорность, асинхронность +В этом домашнем задании необходимо: +1.Переписать текущее FastAPI приложение на асинхронное выполнение +2.Добавить в проект фоновую задачу с помощью Celery + RabbitMQ. +3.Добавить эндпоинт (GET) для вывода всех меню со всеми связанными подменю и со всеми связанными блюдами. +4.Реализовать инвалидация кэша в background task (встроено в FastAPI) +5.* Обновление меню из google sheets раз в 15 сек. +6.** Блюда по акции. Размер скидки (%) указывается в столбце G файла Menu.xlsx -1.Вынести бизнес логику и запросы в БД в отдельные слои приложения. +Фоновая задача: синхронизация Excel документа и БД. + В проекте создаем папку admin. В эту папку кладем файл Menu.xlsx (будет прикреплен к ДЗ). Не забываем запушить в гит. + При внесении изменений в файл все изменения должны отображаться в БД. Периодичность обновления 15 сек. Удалять БД при каждом обновлении – нельзя. -2.Добавить кэширование запросов к API с использованием Redis. Не забыть про инвалидацию кэша. - -3.Добавить pre-commit хуки в проект. Файл yaml будет прикреплен к ДЗ. - -4.Покрыть проект type hints (тайпхинтами) - -5.* Описать ручки API в соответствий c OpenAPI - -6.** Реализовать в тестах аналог Django reverse() для FastAPI Требования: -●Код должен проходить все линтеры. -●Код должен соответствовать принципам SOLID, DRY, KISS. -●Проект должен запускаться по одной команде (докер). -●Проект должен проходить все Postman тесты (коллекция с Вебинара №1). -●Тесты написанные вами после Вебинара №2, должны быть актуальны, запускать и успешно проходить +●Данные меню, подменю, блюд для нового эндпоинта должны доставаться одним 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 @@ -43,8 +64,12 @@ Fastapi веб приложение реализующее api для общеп Запуск/остановка образов: -- Запуск FAstAPI приложения -> `$ docker-compose -f compose_app.yml up ` +- Запуск FAstAPI приложения c локальным файлом для фоновой задачи +> `$ docker-compose -f compose_app.yml up` + +- Запуск FAstAPI приложения c Google Sheets для фоновой задачи +> `$ docker-compose -f compose_google.yml up` +(ЧИТАЙТЕ СООБЩЕНИЕ В ЧАТЕ) После успешного запуска образов документация по API будет доступна по адресу http://localhost:8000