# topology_api/routes/snapshot.py from flask import Blueprint, request, jsonify from topology_api.queries.snapshot_queries import resolve_snapshot_time, fetch_snapshot snapshot_bp = Blueprint("snapshot", __name__) @snapshot_bp.route("/api/v1/bases//snapshot") def get_snapshot(base_code): if base_code != "guanghan": return jsonify({ "error": "base_not_found", "message": f"Base '{base_code}' not found. Only 'guanghan' is available.", }), 404 requested_mission = request.args.get("mission") requested_at = request.args.get("at") snapshot_at, anchor_source = resolve_snapshot_time( requested_mission=requested_mission, requested_at=requested_at, ) if anchor_source == "mission_not_found": return jsonify({ "error": "mission_not_found", "message": f"Mission '{requested_mission}' not found.", }), 404 if anchor_source == "mission_has_no_timed_event": return jsonify({ "error": "mission_has_no_timed_event", "message": f"Mission '{requested_mission}' has no timed events.", }), 409 if anchor_source == "no_events": return jsonify({ "base": {"code": "guanghan", "name": "广寒基地"}, "query": { "requestedAt": requested_at, "requestedMission": requested_mission, "snapshotAt": None, "anchorSource": "no_events", }, "components": [], "connections": [], }) data = fetch_snapshot(snapshot_at) return jsonify({ "base": data["base"], "query": { "requestedAt": requested_at, "requestedMission": requested_mission, "snapshotAt": snapshot_at, "anchorSource": anchor_source, }, "components": data["components"], "connections": data["connections"], })