29 lines
1.3 KiB
Python
29 lines
1.3 KiB
Python
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()
|