39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from fastapi import APIRouter, Depends
|
|
|
|
from fooder.model.product import ProductModel, ProductCreateModel, ProductUpdateModel
|
|
from fooder.controller.product import ProductController
|
|
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: str | None = None,
|
|
):
|
|
return await ctx.repo.product.list(q=q, limit=limit, offset=offset)
|
|
|
|
|
|
@router.patch("/{product_id}", response_model=ProductModel)
|
|
async def update_product(
|
|
product_id: int,
|
|
data: ProductUpdateModel,
|
|
ctx: Context = Depends(AuthContextDependency()),
|
|
):
|
|
obj = await ctx.repo.product.get_by_id(product_id)
|
|
async with ctx.repo.transaction():
|
|
await ProductController(ctx, obj).update(data)
|
|
return obj
|
|
|
|
|
|
@router.post("", response_model=ProductModel, status_code=201)
|
|
async def create_product(
|
|
data: ProductCreateModel,
|
|
ctx: Context = Depends(AuthContextDependency()),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
ctrl = await ProductController.create(ctx, data)
|
|
return ctrl.obj
|