refactor(db)!: finalize pooled WNDB v2 migration
This commit is contained in:
@@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends, HTTPException, Query, Path, Body
|
||||
from typing import List
|
||||
from datetime import datetime
|
||||
from psycopg import AsyncConnection
|
||||
from pydantic import BaseModel
|
||||
|
||||
from app.infra.db.timescaledb.repositories.realtime import RealtimeRepository
|
||||
from .dependencies import get_timescale_connection
|
||||
@@ -13,9 +14,31 @@ TIME_RANGE_START_DESC = f"时间范围开始时间。{TIME_WITH_TZ_DESC}"
|
||||
TIME_RANGE_END_DESC = f"时间范围结束时间。{TIME_WITH_TZ_DESC}"
|
||||
|
||||
|
||||
class RealtimeLinkBatchItem(BaseModel):
|
||||
time: datetime
|
||||
id: str
|
||||
flow: float | None = None
|
||||
friction: float | None = None
|
||||
headloss: float | None = None
|
||||
quality: float | None = None
|
||||
reaction: float | None = None
|
||||
setting: float | None = None
|
||||
status: float | None = None
|
||||
velocity: float | None = None
|
||||
|
||||
|
||||
class RealtimeNodeBatchItem(BaseModel):
|
||||
time: datetime
|
||||
id: str
|
||||
actual_demand: float | None = None
|
||||
total_head: float | None = None
|
||||
pressure: float | None = None
|
||||
quality: float | None = None
|
||||
|
||||
|
||||
@router.post("/timeseries/realtime/links/batches", status_code=201, summary="批量插入实时管道数据")
|
||||
async def insert_realtime_links(
|
||||
data: List[dict] = Body(..., description="管道数据列表,每项包含管道ID、时间戳等信息"),
|
||||
data: List[RealtimeLinkBatchItem] = Body(..., description="同一时间点的管道快照数据"),
|
||||
conn: AsyncConnection = Depends(get_timescale_connection)
|
||||
):
|
||||
"""
|
||||
@@ -29,7 +52,9 @@ async def insert_realtime_links(
|
||||
Returns:
|
||||
插入成功的记录数
|
||||
"""
|
||||
await RealtimeRepository.insert_links_batch(conn, data)
|
||||
await RealtimeRepository.insert_links_batch(
|
||||
conn, [item.model_dump() for item in data]
|
||||
)
|
||||
return {"message": f"Inserted {len(data)} records"}
|
||||
|
||||
|
||||
@@ -119,7 +144,7 @@ async def update_realtime_link_field(
|
||||
|
||||
@router.post("/timeseries/realtime/nodes/batches", status_code=201, summary="批量插入实时节点数据")
|
||||
async def insert_realtime_nodes(
|
||||
data: List[dict] = Body(..., description="节点数据列表,每项包含节点ID、时间戳等信息"),
|
||||
data: List[RealtimeNodeBatchItem] = Body(..., description="同一时间点的节点快照数据"),
|
||||
conn: AsyncConnection = Depends(get_timescale_connection)
|
||||
):
|
||||
"""
|
||||
@@ -133,7 +158,9 @@ async def insert_realtime_nodes(
|
||||
Returns:
|
||||
插入成功的记录数
|
||||
"""
|
||||
await RealtimeRepository.insert_nodes_batch(conn, data)
|
||||
await RealtimeRepository.insert_nodes_batch(
|
||||
conn, [item.model_dump() for item in data]
|
||||
)
|
||||
return {"message": f"Inserted {len(data)} records"}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user