fooder-api/fooder/view/product.py

45 lines
1.2 KiB
Python

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)