ADD get menu by id
parent
32091d6e85
commit
1afb88d746
|
@ -18,3 +18,8 @@ class UpdateMenuDTO:
|
|||
@dataclass(frozen=True)
|
||||
class DeleteMenuDTO:
|
||||
id: UUID
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class GetMenuByIdDTO:
|
||||
id: UUID
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
from fastfood_two.application.abstractions.interactor import Interactor
|
||||
from fastfood_two.application.contracts.requests import GetMenuByIdDTO
|
||||
from fastfood_two.application.contracts.responses import MenuDTO
|
||||
from fastfood_two.domain.menu.error import MenuNotFoundError
|
||||
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||
from fastfood_two.domain.menu.menu_entity import MenuId
|
||||
|
||||
|
||||
class GetMenuById(Interactor[GetMenuByIdDTO, MenuDTO]):
|
||||
def __init__(self, gateway: MenuGateway) -> None:
|
||||
self._menu_gateway = gateway
|
||||
|
||||
async def __call__(self, request: GetMenuByIdDTO) -> MenuDTO:
|
||||
|
||||
menu = await self._menu_gateway.get_menu_by_id(
|
||||
id=MenuId(request.id),
|
||||
)
|
||||
|
||||
if not menu:
|
||||
raise MenuNotFoundError(message="Menu not found")
|
||||
|
||||
return MenuDTO(
|
||||
id=menu.id.value,
|
||||
title=menu.title.value,
|
||||
description=menu.description.value,
|
||||
)
|
|
@ -16,7 +16,11 @@ class MenuGatewayImpl:
|
|||
menus = await self._session.execute(query)
|
||||
return [db_entity_to_domain(menu.tuple()) for menu in menus]
|
||||
|
||||
async def get_menu_by_id(self, id: MenuId) -> Menu | None: ...
|
||||
async def get_menu_by_id(self, id: MenuId) -> Menu | None:
|
||||
query = text("SELECT * FROM menu WHERE id = :id;")
|
||||
menu = (await self._session.execute(query, {"id": id.value})).tuples().first()
|
||||
|
||||
return db_entity_to_domain(menu) if menu else None
|
||||
|
||||
async def insert_menu(self, menu: Menu) -> Menu:
|
||||
query = text("INSERT INTO menu (id, title, description) VALUES (:id, :title, :description);")
|
||||
|
|
|
@ -8,6 +8,7 @@ from fastfood_two.application.config import Config
|
|||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
||||
from fastfood_two.application.usecases.menu.delete_menu import DeleteMenu
|
||||
from fastfood_two.application.usecases.menu.get_all_menus import GetAllMenus
|
||||
from fastfood_two.application.usecases.menu.get_menu_by_id import GetMenuById
|
||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
||||
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||
from fastfood_two.presentation.fastapi_backend.depends.config import get_settings
|
||||
|
@ -21,6 +22,7 @@ from fastfood_two.presentation.fastapi_backend.depends.usecases import (
|
|||
add_menu_usecase,
|
||||
delete_menu_usecase,
|
||||
get_all_menus_usecase,
|
||||
get_menu_by_id_usecase,
|
||||
update_menu_usecase,
|
||||
)
|
||||
|
||||
|
@ -47,5 +49,6 @@ def init_dependencies(app: FastAPI) -> None:
|
|||
app.dependency_overrides[AddMenu] = add_menu_usecase
|
||||
app.dependency_overrides[UpdateMenu] = update_menu_usecase
|
||||
app.dependency_overrides[DeleteMenu] = delete_menu_usecase
|
||||
app.dependency_overrides[GetMenuById] = get_menu_by_id_usecase
|
||||
|
||||
logger.info("Dependencies initialized")
|
||||
|
|
|
@ -5,6 +5,7 @@ from fastapi import Depends
|
|||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
||||
from fastfood_two.application.usecases.menu.delete_menu import DeleteMenu
|
||||
from fastfood_two.application.usecases.menu.get_all_menus import GetAllMenus
|
||||
from fastfood_two.application.usecases.menu.get_menu_by_id import GetMenuById
|
||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
||||
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||
from fastfood_two.presentation.fastapi_backend.depends.stub import Stub
|
||||
|
@ -24,3 +25,7 @@ def update_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway
|
|||
|
||||
def delete_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]) -> DeleteMenu:
|
||||
return DeleteMenu(gateway=gateway)
|
||||
|
||||
|
||||
def get_menu_by_id_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]) -> GetMenuById:
|
||||
return GetMenuById(gateway=gateway)
|
||||
|
|
|
@ -6,12 +6,14 @@ from fastapi import APIRouter, Depends
|
|||
from fastfood_two.application.contracts.requests import (
|
||||
AddMenuDTO,
|
||||
DeleteMenuDTO,
|
||||
GetMenuByIdDTO,
|
||||
UpdateMenuDTO,
|
||||
)
|
||||
from fastfood_two.application.contracts.responses import MenuDTO
|
||||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
||||
from fastfood_two.application.usecases.menu.delete_menu import DeleteMenu
|
||||
from fastfood_two.application.usecases.menu.get_all_menus import GetAllMenus
|
||||
from fastfood_two.application.usecases.menu.get_menu_by_id import GetMenuById
|
||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
||||
from fastfood_two.presentation.fastapi_backend.depends.stub import Stub
|
||||
from fastfood_two.presentation.fastapi_backend.pdmodels.menu import (
|
||||
|
@ -129,3 +131,30 @@ async def delete_menu(
|
|||
)
|
||||
)
|
||||
return
|
||||
|
||||
|
||||
@router.get("/{menu_id}", response_model=MenuDTO)
|
||||
async def get_menu_by_id(
|
||||
menu_id: UUID,
|
||||
usecase: Annotated[GetMenuById, Depends(Stub(GetMenuById))],
|
||||
) -> MenuDTO:
|
||||
"""Get menus by id.
|
||||
|
||||
Endpoint allows to get food menu item by id
|
||||
|
||||
Parameters
|
||||
----------
|
||||
menu_id: UUID
|
||||
requaired id of the menu item
|
||||
|
||||
Returns
|
||||
-------
|
||||
MenuDTO
|
||||
menu item
|
||||
"""
|
||||
menu = await usecase(
|
||||
request=GetMenuByIdDTO(
|
||||
id=menu_id,
|
||||
)
|
||||
)
|
||||
return menu
|
||||
|
|
Loading…
Reference in New Issue