exam_store.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from typing import Optional, List
  2. from datetime import datetime
  3. from sqlalchemy.orm import Session, joinedload
  4. from ..models.exam_model import ExamModel
  5. from .base_store import BaseStore
  6. class ExamStore(BaseStore[ExamModel]):
  7. """
  8. 考试存储类,继承自BaseStore
  9. 提供考试相关的特定操作
  10. """
  11. def __init__(self, db: Session):
  12. super().__init__(db, ExamModel)
  13. def get_by_name(self, name: str) -> Optional[ExamModel]:
  14. """根据考试名称获取考试"""
  15. return self.db.query(
  16. self.model).filter(self.model.name == name).first()
  17. def get_by_subject(self, subject: str) -> List[ExamModel]:
  18. """根据学科获取考试列表"""
  19. return self.db.query(
  20. self.model).filter(self.model.subject == subject).all()
  21. def get_active_exams(self) -> List[ExamModel]:
  22. """获取所有激活的考试"""
  23. return self.db.query(
  24. self.model).filter(self.model.status == 'active').all()
  25. def get_upcoming_exams(self) -> List[ExamModel]:
  26. """获取即将开始的考试"""
  27. now = datetime.now()
  28. return self.db.query(self.model)\
  29. .filter(self.model.start_time > now)\
  30. .order_by(self.model.start_time.asc())\
  31. .all()
  32. def get_exams_with_questions(self) -> List[ExamModel]:
  33. """获取包含题目信息的考试列表"""
  34. return self.db.query(self.model).options(
  35. joinedload(self.model.questions)).all()