79 lines
1.4 KiB
Python
79 lines
1.4 KiB
Python
from fastapi import APIRouter
|
|
from events.replay import ReplayController
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
# in-memory demo store (later replace with session DB)
|
|
REPLAY_SESSIONS = {}
|
|
|
|
|
|
def get_session(journal_id):
|
|
return REPLAY_SESSIONS.get(journal_id)
|
|
|
|
|
|
# -------------------------
|
|
# START REPLAY SESSION
|
|
# -------------------------
|
|
@router.post("/replay/start")
|
|
def start_replay(journal):
|
|
|
|
session = ReplayController(journal)
|
|
|
|
session_id = str(id(session))
|
|
|
|
REPLAY_SESSIONS[session_id] = session
|
|
|
|
return {
|
|
"session_id": session_id,
|
|
"event_count": len(session.timeline)
|
|
}
|
|
|
|
|
|
# -------------------------
|
|
# STEP FORWARD
|
|
# -------------------------
|
|
@router.post("/replay/step")
|
|
def replay_step(session_id: str):
|
|
|
|
session = get_session(session_id)
|
|
|
|
event = session.step()
|
|
|
|
return {
|
|
"event": event,
|
|
"index": session.index
|
|
}
|
|
|
|
|
|
# -------------------------
|
|
# SEEK
|
|
# -------------------------
|
|
@router.post("/replay/seek")
|
|
def replay_seek(session_id: str, timestamp: float):
|
|
|
|
session = get_session(session_id)
|
|
|
|
event = session.seek(timestamp)
|
|
|
|
return {
|
|
"event": event,
|
|
"index": session.index
|
|
}
|
|
|
|
|
|
# -------------------------
|
|
# RESET
|
|
# -------------------------
|
|
@router.post("/replay/reset")
|
|
def replay_reset(session_id: str):
|
|
|
|
session = get_session(session_id)
|
|
|
|
event = session.reset()
|
|
|
|
return {
|
|
"event": event,
|
|
"index": session.index
|
|
}
|