from fastapi import APIRouter, Request, Query, Path, Body from typing import Any, List, Dict, Union from app.services.tjnetwork import ( Any, ChangeSet, add_curve, delete_curve, get_curve, get_curve_schema, get_curves, is_curve, set_curve, ) router = APIRouter() @router.get("/getcurveschema", summary="获取曲线架构", description="获取网络中曲线对象的架构定义") async def fastapi_get_curve_schema(network: str = Query(..., description="管网名称(或数据库名称)")) -> dict[str, dict[str, Any]]: """获取曲线架构。 返回指定网络中曲线对象的属性架构定义。 """ return get_curve_schema(network) @router.post("/addcurve/", response_model=None, summary="添加曲线", description="在网络中添加一条新的曲线") async def fastapi_add_curve( network: str = Query(..., description="管网名称(或数据库名称)"), curve: str = Query(..., description="曲线ID"), req: Request = None ) -> ChangeSet: """添加曲线。 在指定网络中创建一条新的曲线,并设置其初始属性。 """ props = await req.json() ps = { "id": curve, } | props return add_curve(network, ChangeSet(ps)) @router.post("/deletecurve/", response_model=None, summary="删除曲线", description="从网络中删除指定的曲线") async def fastapi_delete_curve( network: str = Query(..., description="管网名称(或数据库名称)"), curve: str = Query(..., description="曲线ID") ) -> ChangeSet: """删除曲线。 从指定网络中删除指定的曲线及其相关数据。 """ ps = {"id": curve} return delete_curve(network, ChangeSet(ps)) @router.get("/getcurveproperties/", summary="获取曲线属性", description="获取指定曲线的属性信息") async def fastapi_get_curve_properties( network: str = Query(..., description="管网名称(或数据库名称)"), curve: str = Query(..., description="曲线ID") ) -> dict[str, Any]: """获取曲线属性。 返回指定曲线的所有属性信息。 """ return get_curve(network, curve) @router.post("/setcurveproperties/", response_model=None, summary="设置曲线属性", description="更新指定曲线的属性") async def fastapi_set_curve_properties( network: str = Query(..., description="管网名称(或数据库名称)"), curve: str = Query(..., description="曲线ID"), req: Request = None ) -> ChangeSet: """设置曲线属性。 更新指定曲线的属性值。 """ props = await req.json() ps = {"id": curve} | props return set_curve(network, ChangeSet(ps)) @router.get("/getcurves/", summary="获取所有曲线", description="获取网络中的所有曲线列表") async def fastapi_get_curves(network: str = Query(..., description="管网名称(或数据库名称)")) -> list[str]: """获取所有曲线。 返回指定网络中的所有曲线ID列表。 """ return get_curves(network) @router.get("/iscurve/", summary="检查曲线存在性", description="检查指定的曲线是否存在") async def fastapi_is_curve( network: str = Query(..., description="管网名称(或数据库名称)"), curve: str = Query(..., description="曲线ID") ) -> bool: """检查曲线是否存在。 判断指定的曲线是否在网络中存在。 """ return is_curve(network, curve)