Проект представляет собой REST API для работы с меню ресторана, реализованный с использованием FastAPI и PostgreSQL в качестве базы данных. API предоставляет возможность выполнения операций CRUD (создание, чтение, обновление и удаление) для трех сущностей: Меню, Подменю и Блюда.
-
Склонируйте репозиторий с проектом:
-
Установите зависимости проекта:
pip install -r requirements.txt
-
Создайте базу данных PostgreSQL для проекта.
-
В файле config.py настройте подключение к базе данных, указав хост, порт, имя базы данных, имя пользователя и пароль.
-
Примените миграции для создания таблиц в базе данных:
alembic upgrade head
Для запуска приложения выполните следующую команду:
uvicorn main:app --reload Установите переменные "DB_USER" и "DB_PASSWORD".
Приложение будет доступно по адресу http://localhost:8000.
API предоставляет следующие эндпоинты:
- GET /menus/ - получить список меню
- GET /menus/{menu_id} - получить информацию о конкретном меню
- POST /menus/ - создать новое меню
- PUT /menus/{menu_id} - обновить информацию о меню
- DELETE /menus/{menu_id} - удалить меню
- GET /menus/{menu_id}/submenus/ - получить список подменю в указанном меню
- GET /submenus/{submenu_id} - получить информацию о конкретном подменю
- POST /menus/{menu_id}/submenus/ - создать новое подменю в указанном меню
- PUT /submenus/{submenu_id} - обновить информацию о подменю
- DELETE /submenus/{submenu_id} - удалить подменю
- GET /menus/{menu_id}/submenus/{submenu_id}/dishes/ - получить список блюд в указанном подменю
- GET /dishes/{dish_id} - получить информацию о конкретном блюде
- POST /menus/{menu_id}/submenus/{submenu_id}/dishes/ - создать новое блюдо в указанном подменю
- PUT /dishes/{dish_id} - обновить информацию о блюде
- DELETE /dishes/{dish_id} - удалить блюдо
Для выполнения операций создания и обновления используется JSON-формат данных.
Для проверки функциональности API предоставляется Postman коллекция с тестовыми запросами. Вы можете импортировать коллекцию в Postman и запустить тесты, чтобы убедиться, что все операции работают корректно.
В процессе разработки данного API были учтены следующие условия:
- Блюдо не может быть привязано напрямую к меню, минуя подменю.
- Блюдо не может находиться в 2-х подменю одновременно.
- Подменю не может находиться в 2-х меню одновременно.
- При удалении меню, удаляются все подменю и блюда этого меню.
- При удалении подменю, удаляются все блюда этого подменю.
- Цены блюд выводятся с округлением до 2 знаков после запятой.