from typing import Optional from fastapi import APIRouter, Depends, Request from ..controller.product import CreateProduct, GetProductByBarCode, ListProduct from ..model.product import CreateProductPayload, ListProductPayload, Product router = APIRouter(tags=["product"]) @router.get("", response_model=ListProductPayload) async def list_product( request: Request, controller: ListProduct = Depends(ListProduct), limit: int = 10, offset: int = 0, q: Optional[str] = None, ): return ListProductPayload( products=[p async for p in controller.call(limit=limit, offset=offset, q=q)] ) @router.post("", response_model=Product) async def create_product( request: Request, data: CreateProductPayload, contoller: CreateProduct = Depends(CreateProduct), ): return await contoller.call(data) @router.get("/by_barcode", response_model=Product) async def get_by_bar_code( request: Request, barcode: str, contoller: GetProductByBarCode = Depends(GetProductByBarCode), ): return await contoller.call(barcode)