import { db } from '../db/index.js'; /** Reports from before the latest lifecycle submission describe the old process. */ export function latestGameSubmission(server: string): string | null { return ( db() .prepare( `SELECT MAX(at) AS at FROM ( SELECT MAX(submitted_at) AS at FROM server_deployments WHERE server=? AND server_deleted_at IS NULL AND action IN ('create','start','restart','rebuild') UNION ALL SELECT requested_at AS at FROM restart_rollout WHERE server=? UNION ALL SELECT generation_reconciled_at AS at FROM native_instances WHERE server=? AND retired_at IS NULL)` ) .get(server, server, server) as { at: string | null } ).at; } /** Look up each registered server through the covering submission index. */ export function latestGameSubmissions(): Map { const rows = db() .prepare( `SELECT server, MAX(at) AS at FROM ( SELECT s.name AS server, (SELECT MAX(submitted_at) FROM server_deployments WHERE server=s.name AND server_deleted_at IS NULL AND action IN ('create','start','restart','rebuild')) AS at FROM servers s UNION ALL SELECT server, requested_at AS at FROM restart_rollout UNION ALL SELECT server, generation_reconciled_at AS at FROM native_instances WHERE retired_at IS NULL) GROUP BY server` ) .all() as { server: string; at: string | null }[]; return new Map(rows.map((row) => [row.server, row.at])); }