from typing import Optional, List from sqlalchemy.orm import Session from sqlalchemy import select, update from app.models.UserSessionModel import UserSession from app.repositories.base_repository import BaseRepository class SessionRepository(BaseRepository[UserSession]): def __init__(self): super().__init__(UserSession) def get_by_refresh_token(self, db: Session, token: str) -> Optional[UserSession]: stmt = select(UserSession).where(UserSession.refresh_token == token, UserSession.is_active.is_(True)) return db.execute(stmt).scalar_one_or_none() def get_active_sessions_by_user(self, db: Session, user_id: str) -> List[UserSession]: stmt = select(UserSession).where(UserSession.user_id == user_id, UserSession.is_active.is_(True)) return list(db.execute(stmt).scalars().all()) def deactivate_all_sessions_for_user(self, db: Session, user_id: str) -> None: stmt = update(UserSession).where(UserSession.user_id == user_id, UserSession.is_active.is_(True)).values(is_active=False) db.execute(stmt) db.commit() def deactivate_session_by_id(self, db: Session, session_id: str) -> None: stmt = update(UserSession).where(UserSession.session_id == session_id).values(is_active=False) db.execute(stmt) db.commit() session_repository = SessionRepository()