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

44 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.role import RoleCreate, RoleRead, RoleUpdate
from app.services import role_service
router = APIRouter(prefix="/roles", tags=["role"])
@router.get("", dependencies=[Depends(require_perm("auth:role:view"))])
async def list_roles(db: DbDep) -> dict:
items = await role_service.list_all(db)
return ok([RoleRead.model_validate(r).model_dump() for r in items])
@router.get("/{rid}", dependencies=[Depends(require_perm("auth:role:view"))])
async def get_role(rid: int, db: DbDep) -> dict:
role = await role_service.get_with_menus(db, rid)
detail = await role_service.to_detail(db, role)
return ok(detail.model_dump())
@router.post("", dependencies=[Depends(require_perm("auth:role:create"))])
async def create_role(data: RoleCreate, db: DbDep) -> dict:
role = await role_service.create(db, data)
detail = await role_service.to_detail(db, role)
return ok(detail.model_dump())
@router.patch("/{rid}", dependencies=[Depends(require_perm("auth:role:update"))])
async def update_role(rid: int, data: RoleUpdate, db: DbDep) -> dict:
role = await role_service.update(db, rid, data)
detail = await role_service.to_detail(db, role)
return ok(detail.model_dump())
@router.delete("/{rid}", dependencies=[Depends(require_perm("auth:role:delete"))])
async def delete_role(rid: int, db: DbDep) -> dict:
await role_service.delete(db, rid)
return ok()