fooder-api/fooder/view/product.py

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