fix(topology): validate time and list missions
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user