feat(topology): add snapshot query logic, API route, and Flask app entry
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 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/<base_code>/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"],
|
||||
})
|
||||
Reference in New Issue
Block a user