Reorganize WNDB by responsibility and remove legacy scheme endpoints.\n\nRoute analysis and time-series access through project pools, preserve transactional realtime replacement, and refresh GIS materialized views after writes.\n\nAdd database architecture documentation, live pooling coverage, API contract updates, and executable container verification.\n\nBREAKING CHANGE: legacy scheme APIs and flat app.native.wndb module imports are removed.
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
from uuid import UUID
|
|
|
|
from psycopg import AsyncConnection
|
|
|
|
|
|
class AnalysisRepository:
|
|
@staticmethod
|
|
async def list_runs(conn: AsyncConnection) -> list[dict]:
|
|
async with conn.cursor() as cur:
|
|
await cur.execute(
|
|
"""
|
|
SELECT run_id, name, run_type, created_by, created_at,
|
|
started_at, status, parameters
|
|
FROM analysis.runs
|
|
ORDER BY created_at DESC, run_id
|
|
"""
|
|
)
|
|
return await cur.fetchall()
|
|
|
|
@staticmethod
|
|
async def get_run(conn: AsyncConnection, run_id: UUID) -> dict | None:
|
|
async with conn.cursor() as cur:
|
|
await cur.execute(
|
|
"""
|
|
SELECT run_id, name, run_type, created_by, created_at,
|
|
started_at, status, parameters
|
|
FROM analysis.runs
|
|
WHERE run_id = %s
|
|
""",
|
|
(run_id,),
|
|
)
|
|
return await cur.fetchone()
|
|
|
|
@staticmethod
|
|
async def list_results(
|
|
conn: AsyncConnection, run_id: UUID, result_type: str | None = None
|
|
) -> list[dict]:
|
|
query = """
|
|
SELECT result_id, run_id, result_type, node_id, link_id,
|
|
payload, created_at
|
|
FROM analysis.results
|
|
WHERE run_id = %s
|
|
"""
|
|
params: tuple[UUID] | tuple[UUID, str] = (run_id,)
|
|
if result_type is not None:
|
|
query += " AND result_type = %s"
|
|
params = (run_id, result_type)
|
|
query += " ORDER BY created_at, result_id"
|
|
|
|
async with conn.cursor() as cur:
|
|
await cur.execute(query, params)
|
|
return await cur.fetchall()
|