refactor(db): isolate hydraulic playback data access
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
"""Stream exact playback samples without materializing full-network JSON results."""
|
||||
|
||||
from collections.abc import AsyncIterator
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
from psycopg import AsyncConnection
|
||||
|
||||
|
||||
class HydraulicPlaybackRepository:
|
||||
@staticmethod
|
||||
async def iter_node_pressures(conn: AsyncConnection, times: list[datetime]) -> AsyncIterator[dict[str, Any]]:
|
||||
async with conn.cursor() as cursor:
|
||||
await cursor.execute("""
|
||||
SELECT time, node_id, pressure FROM realtime.node_results
|
||||
WHERE time = ANY(%s) ORDER BY time, node_id
|
||||
""", (times,))
|
||||
async for row in cursor:
|
||||
yield row
|
||||
|
||||
@staticmethod
|
||||
async def iter_pipe_metrics(conn: AsyncConnection, times: list[datetime]) -> AsyncIterator[dict[str, Any]]:
|
||||
async with conn.cursor() as cursor:
|
||||
await cursor.execute("""
|
||||
SELECT time, link_id, flow, velocity FROM realtime.link_results
|
||||
WHERE time = ANY(%s) ORDER BY time, link_id
|
||||
""", (times,))
|
||||
async for row in cursor:
|
||||
yield row
|
||||
Reference in New Issue
Block a user