ADD delete menu item functional
parent
36627d409c
commit
32091d6e85
|
@ -13,3 +13,8 @@ class UpdateMenuDTO:
|
||||||
id: UUID
|
id: UUID
|
||||||
title: str | None
|
title: str | None
|
||||||
description: str | None
|
description: str | None
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class DeleteMenuDTO:
|
||||||
|
id: UUID
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
from fastfood_two.application.abstractions.interactor import Interactor
|
||||||
|
from fastfood_two.application.contracts.requests import DeleteMenuDTO
|
||||||
|
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||||
|
from fastfood_two.domain.menu.menu_entity import MenuId
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteMenu(Interactor[DeleteMenuDTO, None]):
|
||||||
|
def __init__(self, gateway: MenuGateway) -> None:
|
||||||
|
self._menu_gateway = gateway
|
||||||
|
|
||||||
|
async def __call__(self, request: DeleteMenuDTO) -> None:
|
||||||
|
|
||||||
|
await self._menu_gateway.delete_menu(
|
||||||
|
id=MenuId(request.id),
|
||||||
|
)
|
|
@ -1,11 +1,10 @@
|
||||||
from typing import Protocol
|
from typing import Protocol
|
||||||
from uuid import UUID
|
|
||||||
|
|
||||||
from fastfood_two.domain.menu.menu_entity import Description, Menu, MenuId, Title
|
from fastfood_two.domain.menu.menu_entity import Description, Menu, MenuId, Title
|
||||||
|
|
||||||
|
|
||||||
class MenuGateway(Protocol):
|
class MenuGateway(Protocol):
|
||||||
async def get_menu_by_id(self, id: UUID) -> Menu | None:
|
async def get_menu_by_id(self, id: MenuId) -> Menu | None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
async def insert_menu(self, menu: Menu) -> Menu:
|
async def insert_menu(self, menu: Menu) -> Menu:
|
||||||
|
@ -22,5 +21,5 @@ class MenuGateway(Protocol):
|
||||||
) -> Menu:
|
) -> Menu:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
async def delete_menu(self, id: UUID) -> None:
|
async def delete_menu(self, id: MenuId) -> None:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
from uuid import UUID
|
|
||||||
|
|
||||||
from sqlalchemy import text
|
from sqlalchemy import text
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
@ -18,7 +16,7 @@ class MenuGatewayImpl:
|
||||||
menus = await self._session.execute(query)
|
menus = await self._session.execute(query)
|
||||||
return [db_entity_to_domain(menu.tuple()) for menu in menus]
|
return [db_entity_to_domain(menu.tuple()) for menu in menus]
|
||||||
|
|
||||||
async def get_menu_by_id(self, id: UUID) -> Menu | None: ...
|
async def get_menu_by_id(self, id: MenuId) -> Menu | None: ...
|
||||||
|
|
||||||
async def insert_menu(self, menu: Menu) -> Menu:
|
async def insert_menu(self, menu: Menu) -> Menu:
|
||||||
query = text("INSERT INTO menu (id, title, description) VALUES (:id, :title, :description);")
|
query = text("INSERT INTO menu (id, title, description) VALUES (:id, :title, :description);")
|
||||||
|
@ -52,4 +50,7 @@ class MenuGatewayImpl:
|
||||||
await self._session.commit()
|
await self._session.commit()
|
||||||
return db_entity_to_domain(menu.one().tuple())
|
return db_entity_to_domain(menu.one().tuple())
|
||||||
|
|
||||||
async def delete_menu(self, id: UUID) -> None: ...
|
async def delete_menu(self, id: MenuId) -> None:
|
||||||
|
query = text("DELETE FROM menu WHERE id = :id;")
|
||||||
|
await self._session.execute(query, {"id": id.value})
|
||||||
|
await self._session.commit()
|
||||||
|
|
|
@ -6,6 +6,7 @@ from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
|
||||||
from fastfood_two.application.common.logger import configure_logger
|
from fastfood_two.application.common.logger import configure_logger
|
||||||
from fastfood_two.application.config import Config
|
from fastfood_two.application.config import Config
|
||||||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
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_all_menus import GetAllMenus
|
||||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
||||||
from fastfood_two.domain.menu.gateway import MenuGateway
|
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||||
|
@ -18,6 +19,7 @@ from fastfood_two.presentation.fastapi_backend.depends.session import (
|
||||||
)
|
)
|
||||||
from fastfood_two.presentation.fastapi_backend.depends.usecases import (
|
from fastfood_two.presentation.fastapi_backend.depends.usecases import (
|
||||||
add_menu_usecase,
|
add_menu_usecase,
|
||||||
|
delete_menu_usecase,
|
||||||
get_all_menus_usecase,
|
get_all_menus_usecase,
|
||||||
update_menu_usecase,
|
update_menu_usecase,
|
||||||
)
|
)
|
||||||
|
@ -44,5 +46,6 @@ def init_dependencies(app: FastAPI) -> None:
|
||||||
app.dependency_overrides[GetAllMenus] = get_all_menus_usecase
|
app.dependency_overrides[GetAllMenus] = get_all_menus_usecase
|
||||||
app.dependency_overrides[AddMenu] = add_menu_usecase
|
app.dependency_overrides[AddMenu] = add_menu_usecase
|
||||||
app.dependency_overrides[UpdateMenu] = update_menu_usecase
|
app.dependency_overrides[UpdateMenu] = update_menu_usecase
|
||||||
|
app.dependency_overrides[DeleteMenu] = delete_menu_usecase
|
||||||
|
|
||||||
logger.info("Dependencies initialized")
|
logger.info("Dependencies initialized")
|
||||||
|
|
|
@ -3,6 +3,7 @@ from typing import Annotated
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
|
||||||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
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_all_menus import GetAllMenus
|
||||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
||||||
from fastfood_two.domain.menu.gateway import MenuGateway
|
from fastfood_two.domain.menu.gateway import MenuGateway
|
||||||
|
@ -19,3 +20,7 @@ def add_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]
|
||||||
|
|
||||||
def update_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]) -> UpdateMenu:
|
def update_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]) -> UpdateMenu:
|
||||||
return UpdateMenu(gateway=gateway)
|
return UpdateMenu(gateway=gateway)
|
||||||
|
|
||||||
|
|
||||||
|
def delete_menu_usecase(gateway: Annotated[MenuGateway, Depends(Stub(MenuGateway))]) -> DeleteMenu:
|
||||||
|
return DeleteMenu(gateway=gateway)
|
||||||
|
|
|
@ -3,9 +3,14 @@ from uuid import UUID
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
|
|
||||||
from fastfood_two.application.contracts.requests import AddMenuDTO, UpdateMenuDTO
|
from fastfood_two.application.contracts.requests import (
|
||||||
|
AddMenuDTO,
|
||||||
|
DeleteMenuDTO,
|
||||||
|
UpdateMenuDTO,
|
||||||
|
)
|
||||||
from fastfood_two.application.contracts.responses import MenuDTO
|
from fastfood_two.application.contracts.responses import MenuDTO
|
||||||
from fastfood_two.application.usecases.menu.add_menu import AddMenu
|
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_all_menus import GetAllMenus
|
||||||
from fastfood_two.application.usecases.menu.update_menu import UpdateMenu
|
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.depends.stub import Stub
|
||||||
|
@ -75,6 +80,9 @@ async def update_menu(
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
menu_id: UUID
|
||||||
|
requaired id of the menu to update
|
||||||
|
|
||||||
title: str | None
|
title: str | None
|
||||||
new title of the menu or None if you don't want to update it
|
new title of the menu or None if you don't want to update it
|
||||||
description: str | None
|
description: str | None
|
||||||
|
@ -93,3 +101,31 @@ async def update_menu(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return menus
|
return menus
|
||||||
|
|
||||||
|
|
||||||
|
@router.delete("/{menu_id}", status_code=204)
|
||||||
|
async def delete_menu(
|
||||||
|
menu_id: UUID,
|
||||||
|
usecase: Annotated[DeleteMenu, Depends(Stub(DeleteMenu))],
|
||||||
|
) -> None:
|
||||||
|
"""Delete menus.
|
||||||
|
|
||||||
|
Endpoint allows to delete food menu item
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
menu_id: UUID
|
||||||
|
requaired id of the menu item
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
None
|
||||||
|
returns only 204 status code
|
||||||
|
|
||||||
|
"""
|
||||||
|
await usecase(
|
||||||
|
request=DeleteMenuDTO(
|
||||||
|
id=menu_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
Loading…
Reference in New Issue