67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
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
|
|
] |