session_service.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. # app/services/session_service.py
  2. from datetime import datetime, timedelta
  3. import uuid
  4. from sqlalchemy.orm import Session as DBSession
  5. from sqlalchemy import delete
  6. from app.models.session import VasSession
  7. from app.models.user import VasUser
  8. class SessionService:
  9. # ============================
  10. # token → user(鉴权用)
  11. # ============================
  12. @staticmethod
  13. def get_user_by_token(db: DBSession, session_id: str) -> VasUser:
  14. session_obj = db.query(VasSession).filter(VasSession.id == session_id).first()
  15. if not session_obj:
  16. return None
  17. # session 是否过期
  18. if session_obj.expire_at < datetime.utcnow():
  19. # 自动删除过期 session
  20. SessionService.delete_session(db, session_id)
  21. return None
  22. user = db.query(VasUser).filter(VasUser.id == session_obj.user_id).first()
  23. return user
  24. # ============================
  25. # 删除 session(登出)
  26. # ============================
  27. @staticmethod
  28. def delete_session(db: DBSession, session_id: str):
  29. db.query(VasSession).filter(VasSession.id == session_id).delete()
  30. db.commit()