40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from app.core.deps import DbDep, require_perm
|
|
from app.core.exceptions import ok
|
|
from app.schemas.platform import PlatformCreate, PlatformRead, PlatformUpdate
|
|
from app.services import platform_service
|
|
|
|
router = APIRouter(prefix="/platforms", tags=["platform"])
|
|
|
|
|
|
@router.get("", dependencies=[Depends(require_perm("product:suite:view"))])
|
|
async def list_platforms(db: DbDep) -> dict:
|
|
return ok([p.model_dump() for p in await platform_service.list_all(db)])
|
|
|
|
|
|
@router.post("", dependencies=[Depends(require_perm("product:suite:create"))])
|
|
async def create_platform(data: PlatformCreate, db: DbDep) -> dict:
|
|
p = await platform_service.create(db, data)
|
|
return ok(PlatformRead(
|
|
id=p.id, code=p.code, name=p.name, url=p.url, description=p.description,
|
|
status=p.status, product_count=0,
|
|
).model_dump())
|
|
|
|
|
|
@router.patch("/{pid}", dependencies=[Depends(require_perm("product:suite:update"))])
|
|
async def update_platform(pid: int, data: PlatformUpdate, db: DbDep) -> dict:
|
|
p = await platform_service.update(db, pid, data)
|
|
return ok(PlatformRead(
|
|
id=p.id, code=p.code, name=p.name, url=p.url, description=p.description,
|
|
status=p.status, product_count=0,
|
|
).model_dump())
|
|
|
|
|
|
@router.delete("/{pid}", dependencies=[Depends(require_perm("product:suite:delete"))])
|
|
async def delete_platform(pid: int, db: DbDep) -> dict:
|
|
await platform_service.delete(db, pid)
|
|
return ok()
|