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

42 lines
1.4 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.menu import MenuCreate, MenuRead, MenuUpdate
from app.services import menu_service
router = APIRouter(prefix="/menus", tags=["menu"])
@router.get("", dependencies=[Depends(require_perm("auth:menu:view"))])
async def list_menus(db: DbDep) -> dict:
items = await menu_service.list_all(db)
return ok([MenuRead.model_validate(m).model_dump() for m in items])
@router.get("/tree", dependencies=[Depends(require_perm("auth:menu:view"))])
async def menu_tree(db: DbDep) -> dict:
items = await menu_service.list_all(db)
tree = menu_service.build_tree(items)
return ok([t.model_dump() for t in tree])
@router.post("", dependencies=[Depends(require_perm("auth:menu:create"))])
async def create_menu(data: MenuCreate, db: DbDep) -> dict:
m = await menu_service.create(db, data)
return ok(MenuRead.model_validate(m).model_dump())
@router.patch("/{mid}", dependencies=[Depends(require_perm("auth:menu:update"))])
async def update_menu(mid: int, data: MenuUpdate, db: DbDep) -> dict:
m = await menu_service.update(db, mid, data)
return ok(MenuRead.model_validate(m).model_dump())
@router.delete("/{mid}", dependencies=[Depends(require_perm("auth:menu:delete"))])
async def delete_menu(mid: int, db: DbDep) -> dict:
await menu_service.delete(db, mid)
return ok()