优化API文档,添加参数描述和示例

This commit is contained in:
2026-03-13 15:17:06 +08:00
parent 9a8d851275
commit b513d05611
38 changed files with 5846 additions and 1224 deletions
+435 -66
View File
@@ -1,4 +1,4 @@
from fastapi import APIRouter, Request
from fastapi import APIRouter, Request, Query, Path, Body
from typing import Any, List, Dict, Union
from app.services.tjnetwork import (
Any,
@@ -13,23 +13,50 @@ from app.services.tjnetwork import (
router = APIRouter()
@router.get("/gettankschema")
async def fast_get_tank_schema(network: str) -> dict[str, dict[str, Any]]:
@router.get("/gettankschema", summary="获取水箱模式", description="获取指定网络的水箱数据结构模式定义")
async def fast_get_tank_schema(network: str = Query(..., description="管网名称(或数据库名称)")) -> dict[str, dict[str, Any]]:
"""
获取水箱的数据结构模式。
Args:
network: 管网名称(或数据库名称)
Returns:
包含水箱属性的模式定义字典
"""
return get_tank_schema(network)
@router.post("/addtank/", response_model=None)
@router.post("/addtank/", summary="新增水箱", description="向指定网络中新增一个水箱", response_model=None)
async def fastapi_add_tank(
network: str,
tank: str,
x: float,
y: float,
elevation: float,
init_level: float = 0,
min_level: float = 0,
max_level: float = 0,
diameter: float = 0,
min_vol: float = 0,
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
x: float = Query(..., description="X坐标"),
y: float = Query(..., description="Y坐标"),
elevation: float = Query(..., description="标高"),
init_level: float = Query(0, description="初始水位"),
min_level: float = Query(0, description="最小水位"),
max_level: float = Query(0, description="最大水位"),
diameter: float = Query(0, description="直径"),
min_vol: float = Query(0, description="最小体积"),
) -> ChangeSet:
"""
创建新水箱。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
x: X坐标
y: Y坐标
elevation: 水箱标高
init_level: 初始水位,默认为0
min_level: 最小水位,默认为0
max_level: 最大水位,默认为0
diameter: 水箱直径,默认为0
min_vol: 最小体积,默认为0
Returns:
包含变更信息的ChangeSet对象
"""
ps = {
"id": tank,
"x": x,
@@ -43,155 +70,497 @@ async def fastapi_add_tank(
}
return add_tank(network, ChangeSet(ps))
@router.post("/deletetank/", response_model=None)
async def fastapi_delete_tank(network: str, tank: str) -> ChangeSet:
@router.post("/deletetank/", summary="删除水箱", description="删除指定网络中的水箱", response_model=None)
async def fastapi_delete_tank(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> ChangeSet:
"""
删除指定的水箱。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank}
return delete_tank(network, ChangeSet(ps))
@router.get("/gettankelevation/")
async def fastapi_get_tank_elevation(network: str, tank: str) -> float | None:
@router.get("/gettankelevation/", summary="获取水箱标高", description="获取指定水箱的标高值")
async def fastapi_get_tank_elevation(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的标高。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱标高值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["elevation"]
@router.get("/gettankinitlevel/")
async def fastapi_get_tank_init_level(network: str, tank: str) -> float | None:
@router.get("/gettankinitlevel/", summary="获取水箱初始水位", description="获取指定水箱的初始水位值")
async def fastapi_get_tank_init_level(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的初始水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱初始水位值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["init_level"]
@router.get("/gettankminlevel/")
async def fastapi_get_tank_min_level(network: str, tank: str) -> float | None:
@router.get("/gettankminlevel/", summary="获取水箱最小水位", description="获取指定水箱的最小水位值")
async def fastapi_get_tank_min_level(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的最小水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱最小水位值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["min_level"]
@router.get("/gettankmaxlevel/")
async def fastapi_get_tank_max_level(network: str, tank: str) -> float | None:
@router.get("/gettankmaxlevel/", summary="获取水箱最大水位", description="获取指定水箱的最大水位值")
async def fastapi_get_tank_max_level(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的最大水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱最大水位值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["max_level"]
@router.get("/gettankdiameter/")
async def fastapi_get_tank_diameter(network: str, tank: str) -> float | None:
@router.get("/gettankdiameter/", summary="获取水箱直径", description="获取指定水箱的直径值")
async def fastapi_get_tank_diameter(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的直径。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱直径值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["diameter"]
@router.get("/gettankminvol/")
async def fastapi_get_tank_min_vol(network: str, tank: str) -> float | None:
@router.get("/gettankminvol/", summary="获取水箱最小体积", description="获取指定水箱的最小体积值")
async def fastapi_get_tank_min_vol(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float | None:
"""
获取水箱的最小体积。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱最小体积值,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["min_vol"]
@router.get("/gettankvolcurve/")
async def fastapi_get_tank_vol_curve(network: str, tank: str) -> str | None:
@router.get("/gettankvolcurve/", summary="获取水箱容积曲线", description="获取指定水箱的容积曲线标识")
async def fastapi_get_tank_vol_curve(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> str | None:
"""
获取水箱的容积曲线。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱容积曲线标识,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["vol_curve"]
@router.get("/gettankoverflow/")
async def fastapi_get_tank_overflow(network: str, tank: str) -> str | None:
@router.get("/gettankoverflow/", summary="获取水箱溢流口", description="获取指定水箱的溢流口配置")
async def fastapi_get_tank_overflow(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> str | None:
"""
获取水箱的溢流口配置。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱溢流口配置,如果不存在则返回None
"""
ps = get_tank(network, tank)
return ps["overflow"]
@router.get("/gettankx/")
async def fastapi_get_tank_x(network: str, tank: str) -> float:
@router.get("/gettankx/", summary="获取水箱X坐标", description="获取指定水箱的X坐标值")
async def fastapi_get_tank_x(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float:
"""
获取水箱的X坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱X坐标值
"""
ps = get_tank(network, tank)
return ps["x"]
@router.get("/gettanky/")
async def fastapi_get_tank_y(network: str, tank: str) -> float:
@router.get("/gettanky/", summary="获取水箱Y坐标", description="获取指定水箱的Y坐标值")
async def fastapi_get_tank_y(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> float:
"""
获取水箱的Y坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
水箱Y坐标值
"""
ps = get_tank(network, tank)
return ps["y"]
@router.get("/gettankcoord/")
async def fastapi_get_tank_coord(network: str, tank: str) -> dict[str, float]:
@router.get("/gettankcoord/", summary="获取水箱坐标", description="获取指定水箱的X和Y坐标")
async def fastapi_get_tank_coord(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> dict[str, float]:
"""
获取水箱的坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
包含x和y坐标的字典
"""
ps = get_tank(network, tank)
coord = {"x": ps["x"], "y": ps["y"]}
return coord
@router.post("/settankelevation/", response_model=None)
@router.post("/settankelevation/", summary="设置水箱标高", description="设置指定水箱的标高值", response_model=None)
async def fastapi_set_tank_elevation(
network: str, tank: str, elevation: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
elevation: float = Query(..., description="新的标高值")
) -> ChangeSet:
"""
设置水箱的标高。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
elevation: 新的标高值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "elevation": elevation}
return set_tank(network, ChangeSet(ps))
@router.post("/settankinitlevel/", response_model=None)
@router.post("/settankinitlevel/", summary="设置水箱初始水位", description="设置指定水箱的初始水位值", response_model=None)
async def fastapi_set_tank_init_level(
network: str, tank: str, init_level: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
init_level: float = Query(..., description="新的初始水位值")
) -> ChangeSet:
"""
设置水箱的初始水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
init_level: 新的初始水位值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "init_level": init_level}
return set_tank(network, ChangeSet(ps))
@router.post("/settankminlevel/", response_model=None)
@router.post("/settankminlevel/", summary="设置水箱最小水位", description="设置指定水箱的最小水位值", response_model=None)
async def fastapi_set_tank_min_level(
network: str, tank: str, min_level: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
min_level: float = Query(..., description="新的最小水位值")
) -> ChangeSet:
"""
设置水箱的最小水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
min_level: 新的最小水位值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "min_level": min_level}
return set_tank(network, ChangeSet(ps))
@router.post("/settankmaxlevel/", response_model=None)
@router.post("/settankmaxlevel/", summary="设置水箱最大水位", description="设置指定水箱的最大水位值", response_model=None)
async def fastapi_set_tank_max_level(
network: str, tank: str, max_level: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
max_level: float = Query(..., description="新的最大水位值")
) -> ChangeSet:
"""
设置水箱的最大水位。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
max_level: 新的最大水位值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "max_level": max_level}
return set_tank(network, ChangeSet(ps))
@router.post("settankdiameter//", response_model=None)
@router.post("/settankdiameter/", summary="设置水箱直径", description="设置指定水箱的直径值", response_model=None)
async def fastapi_set_tank_diameter(
network: str, tank: str, diameter: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
diameter: float = Query(..., description="新的直径值")
) -> ChangeSet:
"""
设置水箱的直径。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
diameter: 新的直径值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "diameter": diameter}
return set_tank(network, ChangeSet(ps))
@router.post("/settankminvol/", response_model=None)
@router.post("/settankminvol/", summary="设置水箱最小体积", description="设置指定水箱的最小体积值", response_model=None)
async def fastapi_set_tank_min_vol(
network: str, tank: str, min_vol: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
min_vol: float = Query(..., description="新的最小体积值")
) -> ChangeSet:
"""
设置水箱的最小体积。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
min_vol: 新的最小体积值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "min_vol": min_vol}
return set_tank(network, ChangeSet(ps))
@router.post("/settankvolcurve/", response_model=None)
@router.post("/settankvolcurve/", summary="设置水箱容积曲线", description="设置指定水箱的容积曲线标识", response_model=None)
async def fastapi_set_tank_vol_curve(
network: str, tank: str, vol_curve: str
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
vol_curve: str = Query(..., description="新的容积曲线标识")
) -> ChangeSet:
"""
设置水箱的容积曲线。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
vol_curve: 新的容积曲线标识
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "vol_curve": vol_curve}
return set_tank(network, ChangeSet(ps))
@router.post("/settankoverflow/", response_model=None)
@router.post("/settankoverflow/", summary="设置水箱溢流口", description="设置指定水箱的溢流口配置", response_model=None)
async def fastapi_set_tank_overflow(
network: str, tank: str, overflow: str
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
overflow: str = Query(..., description="新的溢流口配置")
) -> ChangeSet:
"""
设置水箱的溢流口配置。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
overflow: 新的溢流口配置
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "overflow": overflow}
return set_tank(network, ChangeSet(ps))
@router.post("/settankx/", response_model=None)
async def fastapi_set_tank_x(network: str, tank: str, x: float) -> ChangeSet:
@router.post("/settankx/", summary="设置水箱X坐标", description="设置指定水箱的X坐标值", response_model=None)
async def fastapi_set_tank_x(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
x: float = Query(..., description="新的X坐标值")
) -> ChangeSet:
"""
设置水箱的X坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
x: 新的X坐标值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "x": x}
return set_tank(network, ChangeSet(ps))
@router.post("/settanky/", response_model=None)
async def fastapi_set_tank_y(network: str, tank: str, y: float) -> ChangeSet:
@router.post("/settanky/", summary="设置水箱Y坐标", description="设置指定水箱的Y坐标值", response_model=None)
async def fastapi_set_tank_y(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
y: float = Query(..., description="新的Y坐标值")
) -> ChangeSet:
"""
设置水箱的Y坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
y: 新的Y坐标值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "y": y}
return set_tank(network, ChangeSet(ps))
@router.post("/settankcoord/", response_model=None)
@router.post("/settankcoord/", summary="设置水箱坐标", description="设置指定水箱的X和Y坐标", response_model=None)
async def fastapi_set_tank_coord(
network: str, tank: str, x: float, y: float
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
x: float = Query(..., description="新的X坐标值"),
y: float = Query(..., description="新的Y坐标值")
) -> ChangeSet:
"""
设置水箱的坐标。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
x: 新的X坐标值
y: 新的Y坐标值
Returns:
包含变更信息的ChangeSet对象
"""
ps = {"id": tank, "x": x, "y": y}
return set_tank(network, ChangeSet(ps))
@router.get("/gettankproperties/")
async def fastapi_get_tank_properties(network: str, tank: str) -> dict[str, Any]:
@router.get("/gettankproperties/", summary="获取水箱属性", description="获取指定水箱的所有属性")
async def fastapi_get_tank_properties(
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID")
) -> dict[str, Any]:
"""
获取水箱的所有属性。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
Returns:
包含水箱所有属性的字典
"""
return get_tank(network, tank)
@router.get("/getalltankproperties/")
async def fastapi_get_all_tank_properties(network: str) -> list[dict[str, Any]]:
@router.get("/getalltankproperties/", summary="获取所有水箱属性", description="获取指定网络中所有水箱的属性")
async def fastapi_get_all_tank_properties(
network: str = Query(..., description="管网名称(或数据库名称)")
) -> list[dict[str, Any]]:
"""
获取网络中所有水箱的属性。
Args:
network: 管网名称(或数据库名称)
Returns:
包含所有水箱属性的字典列表
"""
# 缓存查询结果提高性能
# global redis_client
results = get_all_tanks(network)
return results
@router.post("/settankproperties/", response_model=None)
@router.post("/settankproperties/", summary="设置水箱属性", description="批量设置指定水箱的多个属性", response_model=None)
async def fastapi_set_tank_properties(
network: str, tank: str, req: Request
network: str = Query(..., description="管网名称(或数据库名称)"),
tank: str = Query(..., description="水箱ID"),
req: Request = Body(..., description="包含要设置的属性的请求体")
) -> ChangeSet:
"""
批量设置水箱的属性。
Args:
network: 管网名称(或数据库名称)
tank: 水箱ID
req: 包含水箱属性的请求体(JSON格式)
Returns:
包含变更信息的ChangeSet对象
"""
props = await req.json()
ps = {"id": tank} | props
return set_tank(network, ChangeSet(ps))