diff --git a/fastfood/app.py b/fastfood/app.py index 980a822..2e1f6cf 100644 --- a/fastfood/app.py +++ b/fastfood/app.py @@ -1,87 +1,25 @@ +import json + from fastapi import FastAPI from fastfood.routers.dish import router as dish_router from fastfood.routers.menu import router as menu_router from fastfood.routers.submenu import router as submenu_router -description = """ -# 🔥🔥🔥Fastfood-API поможет тебе подкрепиться 🔥🔥🔥 -### У нас есть Menu. Ты можеш выбрать блюда из кухни, которая тебе нравится - -## Menu - -Ты можешь **add menu**. - -Ты можешь **read menu**. - -Ты можешь **patch menu**. - -Ты можешь **delete menu**. - -### У нас есть в SubMenu, где ты сможешь найти -десерты/напитки/супчики/прочие вкусности - -# SubMenu - -Ты можешь **add submenu into menu**. - -Ты можешь **read submenu**. - -Ты можешь **patch submenu**. - -Ты можешь **delete menu**. - -### У нас есть в Dish, где ты сможешь найти блюдо по вкусу - -# Dish - -Ты можешь **add dish into submenu**. - -Ты можешь **read dish**. - -Ты можешь **patch dish**. - -Ты можешь **delete dish**. - -## Приятного аппетита -""" - - -tags_metadata = [ - { - 'name': 'menu', - 'description': 'Операции с меню.', - }, - { - 'name': 'submenu', - 'description': 'Подменю и работа с ним', - }, - {'name': 'dish', 'description': 'Блюда и работа с ними'}, -] - - -def create_app(redis=None) -> FastAPI: +def create_app() -> FastAPI: """ Фабрика FastAPI. """ - app = FastAPI( - title='Fastfood-API', - description=description, - version='0.0.3', - contact={ - 'name': 'Sergey Vanyushkin', - 'url': 'http://pi3c.ru', - 'email': 'pi3c@yandex.ru', - }, - license_info={ - 'name': 'MIT license', - 'url': 'https://mit-license.org/', - }, - openapi_tags=tags_metadata, - ) + app = FastAPI() app.include_router(menu_router) app.include_router(submenu_router) app.include_router(dish_router) + def custom_openapi(): + with open('openapi.json') as openapi: + return json.load(openapi) + + app.openapi = custom_openapi + return app diff --git a/fastfood/routers/dish.py b/fastfood/routers/dish.py index 7fd50a7..22b443f 100644 --- a/fastfood/routers/dish.py +++ b/fastfood/routers/dish.py @@ -14,9 +14,6 @@ router = APIRouter( @router.get( '/', response_model=list[Dish], - summary='Получить список блюд', - description='Этот метод позволяет получить список всех блюда по UUID' - ' родительских меню и подменю', ) async def get_dishes( menu_id: UUID, @@ -32,9 +29,6 @@ async def get_dishes( '/', status_code=201, response_model=Dish, - summary='Создать блюдо', - description='Этот метод позволяет создать блюдо по UUID' - 'его родительских меню и подменю', ) async def create_dish( menu_id: UUID, @@ -53,15 +47,6 @@ async def create_dish( @router.get( '/{dish_id}', response_model=Dish, - summary='Получить блюдо', - description='Этот метод позволяет получить блюдо по его UUID' - ' и UUID его родительских меню', - responses={ - 404: { - 'description': 'Dish not found', - 'content': {'application/json': {'example': {'detail': 'string'}}}, - }, - }, ) async def get_dish( menu_id: UUID, @@ -69,7 +54,7 @@ async def get_dish( dish_id: UUID, dish: DishService = Depends(), background_tasks: BackgroundTasks = BackgroundTasks(), -) -> Dish: +) -> Dish | None: result = await dish.read_dish( menu_id, submenu_id, @@ -86,15 +71,6 @@ async def get_dish( @router.patch( '/{dish_id}', response_model=Dish, - summary='Обновить блюдо', - description='Этот метод позволяет обновить блюдо по его UUID' - ' и UUID родительских меню', - responses={ - 404: { - 'description': 'Dish not found', - 'content': {'application/json': {'example': {'detail': 'string'}}}, - }, - }, ) async def update_dish( menu_id: UUID, @@ -120,9 +96,6 @@ async def update_dish( @router.delete( '/{dish_id}', - summary='Удалить блюдо', - description='Этот метод позволяет удалить блюдо по его UUID' - ' и UUID родительских меню', ) async def delete_dish( menu_id: UUID, diff --git a/fastfood/routers/menu.py b/fastfood/routers/menu.py index f42b27b..e1a82be 100644 --- a/fastfood/routers/menu.py +++ b/fastfood/routers/menu.py @@ -15,8 +15,6 @@ router = APIRouter( '/', status_code=200, response_model=list[MenuRead], - summary='Получить список меню', - description='Этот метод позволяет получить все меню.', ) async def get_menus( menu: MenuService = Depends(), @@ -29,8 +27,6 @@ async def get_menus( '/', status_code=201, response_model=MenuRead, - summary='Создать меню', - description='Этот метод позволяет создать меню', ) async def add_menu( menu: MenuBase, @@ -43,14 +39,6 @@ async def add_menu( @router.get( '/{menu_id}', response_model=MenuRead, - summary='Получить меню', - description='Этот метод позволяет получить меню по его UUID', - responses={ - 404: { - 'description': 'Menu not found', - 'content': {'application/json': {'example': {'detail': 'sting'}}}, - }, - }, ) async def get_menu( menu_id: UUID, @@ -70,14 +58,6 @@ async def get_menu( @router.patch( '/{menu_id}', response_model=MenuRead, - summary='Обновить меню', - description='Этот метод позволяет изменить меню по его UUID', - responses={ - 404: { - 'description': 'Menu not found', - 'content': {'application/json': {'example': {'detail': 'string'}}}, - }, - }, ) async def update_menu( menu_id: UUID, @@ -101,8 +81,6 @@ async def update_menu( @router.delete( '/{menu_id}', status_code=200, - summary='Удалить меню', - description='Этот метод позволяет удалить меню по его UUID', ) async def delete_menu( menu_id: UUID, diff --git a/fastfood/routers/submenu.py b/fastfood/routers/submenu.py index c30fb3f..67649dc 100644 --- a/fastfood/routers/submenu.py +++ b/fastfood/routers/submenu.py @@ -14,9 +14,6 @@ router = APIRouter( @router.get( '/', response_model=list[SubMenuRead], - summary='Получить список подменю', - description='Этот метод позволяет получить список подменю основного меню' - ' по UUID меню', ) async def get_submenus( menu_id: UUID, @@ -31,8 +28,6 @@ async def get_submenus( '/', status_code=201, response_model=SubMenuRead, - summary='Создать подменю', - description='Этот метод позволяет создать подменю по UUID родителского меню', ) async def create_submenu_item( menu_id: UUID, @@ -50,15 +45,6 @@ async def create_submenu_item( @router.get( '/{submenu_id}', response_model=SubMenuRead, - summary='Получить подменю', - description='Этот метод позволяет получить подменю по его UUID' - ' и UUID родительского меню', - responses={ - 404: { - 'description': 'Submenu not found', - 'content': {'application/json': {'example': {'detail': 'string'}}}, - }, - }, ) async def get_submenu( menu_id: UUID, @@ -81,15 +67,6 @@ async def get_submenu( @router.patch( '/{submenu_id}', response_model=SubMenuRead, - summary='Обновить подменю', - description='Этот метод позволяет обновить подменю по его UUID' - ' и UUID родительского меню', - responses={ - 404: { - 'description': 'Submenu not found', - 'content': {'application/json': {'example': {'detail': 'string'}}}, - }, - }, ) async def update_submenu( menu_id: UUID, @@ -114,8 +91,6 @@ async def update_submenu( @router.delete( '/{submenu_id}', - summary='Удалить подменю', - description='Этот метод позволяет удалить подменю по его UUID', ) async def delete_submenu( menu_id: UUID, diff --git a/manage.py b/manage.py index 3859784..f204f65 100644 --- a/manage.py +++ b/manage.py @@ -1,33 +1,11 @@ import asyncio -import json import sys import uvicorn -from fastapi.openapi.utils import get_openapi -from fastfood.app import create_app from fastfood.repository import create_db_and_tables -def create_openapi(): - app = create_app() - - with open('openapi.json', 'w') as f: - json.dump( - get_openapi( - title=app.title, - version=app.version, - openapi_version=app.openapi_version, - description=app.description, - routes=app.routes, - contact=app.contact, - license_info=app.license_info, - tags=app.openapi_tags, - ), - f, - ) - - def run_app(): """ Запуск FastAPI @@ -54,6 +32,3 @@ if __name__ == '__main__': if '--run-test-server' in sys.argv: asyncio.run(recreate()) run_app() - - if 'dump' in sys.argv: - create_openapi()