fix(topology): validate time and list missions

This commit is contained in:
2026-07-09 21:47:29 +08:00
parent 270956c348
commit 808276e225
3 changed files with 101 additions and 2 deletions
+31
View File
@@ -3,6 +3,37 @@
from topology_api.db import read_cursor
def fetch_missions(base_code):
"""Return missions for a base with their latest recorded event."""
with read_cursor() as cur:
cur.execute("""
SELECT
m.code,
m.title,
m.occurrence_status,
MAX(me.effective_at) AS last_event_at
FROM missions m
JOIN bases b ON b.id = m.base_id
LEFT JOIN mission_events me ON me.mission_id = m.id
WHERE b.code = %(base_code)s
GROUP BY m.id, m.code, m.title, m.occurrence_status
ORDER BY MIN(me.effective_at) NULLS LAST, m.code
""", {"base_code": base_code})
return [
{
"code": row["code"],
"title": row["title"],
"occurrenceStatus": row["occurrence_status"],
"lastEventAt": (
row["last_event_at"].isoformat()
if row["last_event_at"] is not None
else None
),
}
for row in cur.fetchall()
]
def resolve_snapshot_time(requested_mission=None, requested_at=None):
"""Determine the snapshot timestamp per spec.