from typing import Any from fastapi import APIRouter, Query, Request from app.services.tjnetwork import ( ChangeSet, add_region, delete_region, get_nodes_in_region, get_region, get_region_schema, get_regions, set_region, ) router = APIRouter() @router.get("/network-schemas/region", summary="获取区域属性架构") async def get_region_schema_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), ) -> dict[str, dict[str, Any]]: return get_region_schema(network) @router.get("/regions", summary="获取区域列表") async def get_regions_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), ) -> list[dict[str, Any]]: return [get_region(network, region_id) for region_id in get_regions(network)] @router.get("/regions/detail", summary="获取区域信息") async def get_region_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), id: str = Query(..., description="区域 ID"), ) -> dict[str, Any]: return get_region(network, id) @router.get("/regions/nodes", summary="获取区域节点") async def get_region_nodes_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), id: str = Query(..., description="区域 ID"), ) -> list[str]: return get_nodes_in_region(network, id) @router.patch("/regions", summary="修改区域", response_model=None) async def set_region_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), request: Request = None, ) -> ChangeSet: return set_region(network, ChangeSet(await request.json())) @router.post("/regions", summary="添加区域", response_model=None) async def add_region_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), request: Request = None, ) -> ChangeSet: payload = await request.json() payload["boundary"] = [tuple(point[:2]) for point in payload.get("boundary", [])] return add_region(network, ChangeSet(payload)) @router.delete("/regions", summary="删除区域", response_model=None) async def delete_region_endpoint( network: str = Query(..., description="管网名称(或数据库名称)"), request: Request = None, ) -> ChangeSet: return delete_region(network, ChangeSet(await request.json()))