42 lines
1.4 KiB
Python
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.organization import OrgCreate, OrgRead, OrgUpdate
|
|
from app.services import org_service
|
|
|
|
router = APIRouter(prefix="/organizations", tags=["organization"])
|
|
|
|
|
|
@router.get("", dependencies=[Depends(require_perm("auth:org:view"))])
|
|
async def list_orgs(db: DbDep) -> dict:
|
|
items = await org_service.list_all(db)
|
|
return ok([OrgRead.model_validate(o).model_dump() for o in items])
|
|
|
|
|
|
@router.get("/tree", dependencies=[Depends(require_perm("auth:org:view"))])
|
|
async def org_tree(db: DbDep) -> dict:
|
|
items = await org_service.list_all(db)
|
|
tree = org_service.build_tree(items)
|
|
return ok([t.model_dump() for t in tree])
|
|
|
|
|
|
@router.post("", dependencies=[Depends(require_perm("auth:org:create"))])
|
|
async def create_org(data: OrgCreate, db: DbDep) -> dict:
|
|
o = await org_service.create(db, data)
|
|
return ok(OrgRead.model_validate(o).model_dump())
|
|
|
|
|
|
@router.patch("/{oid}", dependencies=[Depends(require_perm("auth:org:update"))])
|
|
async def update_org(oid: int, data: OrgUpdate, db: DbDep) -> dict:
|
|
o = await org_service.update(db, oid, data)
|
|
return ok(OrgRead.model_validate(o).model_dump())
|
|
|
|
|
|
@router.delete("/{oid}", dependencies=[Depends(require_perm("auth:org:delete"))])
|
|
async def delete_org(oid: int, db: DbDep) -> dict:
|
|
await org_service.delete(db, oid)
|
|
return ok()
|