from sqlalchemy.orm import Session from datetime import datetime import json from typing import Optional from models.debate import DebateSession from storage.database import DebateSessionDB, debate_session_from_db, debate_session_to_db class SessionManager: """ Manages debate sessions in storage """ def __init__(self): pass async def save_session(self, db: Session, session: DebateSession): """ Save a debate session to the database """ db_session = debate_session_to_db(session) db.add(db_session) db.commit() db.refresh(db_session) async def get_session(self, db: Session, session_id: str) -> Optional[DebateSession]: """ Retrieve a debate session from the database """ db_session = db.query(DebateSessionDB).filter(DebateSessionDB.session_id == session_id).first() if not db_session: return None return debate_session_from_db(db_session) async def update_session(self, db: Session, session: DebateSession): """ Update an existing debate session in the database """ db_session = db.query(DebateSessionDB).filter(DebateSessionDB.session_id == session.session_id).first() if db_session: db_session.topic = session.topic db_session.participants = json.dumps([p.dict() for p in session.participants]) db_session.constraints = json.dumps(session.constraints.dict()) db_session.rounds = json.dumps([r.dict() for r in session.rounds], default=str) db_session.status = session.status db_session.completed_at = session.completed_at db_session.summary = session.summary db_session.evidence_library = json.dumps([e.dict() for e in session.evidence_library], default=str) if session.evidence_library else None db.commit() db.refresh(db_session) async def list_sessions(self, db: Session): """ List all debate sessions """ db_sessions = db.query(DebateSessionDB).all() return [ { "session_id": db_session.session_id, "topic": db_session.topic, "status": db_session.status, "created_at": db_session.created_at.isoformat() if db_session.created_at else None } for db_session in db_sessions ]