from typing import Optional from fastapi import APIRouter, Depends from fooder.repository.expression import fuzzy_match from fooder.domain import Product from fooder.model.product import ProductModel from fooder.context import Context, AuthContextDependency router = APIRouter(tags=["product"]) @router.get("/", response_model=list[ProductModel]) async def list_products( ctx: Context = Depends(AuthContextDependency()), limit: int = 10, offset: int = 0, q: Optional[str] = None, ): expressions = [] if q: expressions.append( fuzzy_match(Product.name, q) ) objs = await ctx.repo.product.list(*expressions, limit=limit, offset=offset) return [ProductModel.model_validate(obj) for obj in objs] # @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)