Files
loom/backend/app/api/v1/products.py
T
2026-04-24 17:46:03 +08:00

53 lines
1.8 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, Query
from app.core.deps import DbDep, require_perm
from app.core.exceptions import ok
from app.schemas.product import ProductCreate, ProductUpdate
from app.services import product_service
router = APIRouter(prefix="/products", tags=["product"])
@router.get("", dependencies=[Depends(require_perm("product:view"))])
async def list_products(
db: DbDep,
page: int = Query(1, ge=1),
size: int = Query(20, ge=1, le=200),
keyword: str | None = None,
platform_id: int | None = None,
dept_id: int | None = None,
) -> dict:
rows, total = await product_service.paginate(db, page, size, keyword, platform_id, dept_id)
return ok({
"list": [(await product_service.to_read(db, p)).model_dump() for p in rows],
"total": total,
"page": page,
"size": size,
})
@router.get("/{pid}", dependencies=[Depends(require_perm("product:view"))])
async def get_product(pid: int, db: DbDep) -> dict:
p = await product_service.get(db, pid)
return ok((await product_service.to_read(db, p)).model_dump())
@router.post("", dependencies=[Depends(require_perm("product:create"))])
async def create_product(data: ProductCreate, db: DbDep) -> dict:
p = await product_service.create(db, data)
return ok((await product_service.to_read(db, p)).model_dump())
@router.patch("/{pid}", dependencies=[Depends(require_perm("product:update"))])
async def update_product(pid: int, data: ProductUpdate, db: DbDep) -> dict:
p = await product_service.update(db, pid, data)
return ok((await product_service.to_read(db, p)).model_dump())
@router.delete("/{pid}", dependencies=[Depends(require_perm("product:delete"))])
async def delete_product(pid: int, db: DbDep) -> dict:
await product_service.delete(db, pid)
return ok()