45 lines
1.2 KiB
Python
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)
|