from typing import Optional, List from datetime import datetime from sqlalchemy.orm import Session, joinedload from ..models.exam_model import ExamModel from .base_store import BaseStore class ExamStore(BaseStore[ExamModel]): """ 考试存储类,继承自BaseStore 提供考试相关的特定操作 """ def __init__(self, db: Session): super().__init__(db, ExamModel) def get_by_name(self, name: str) -> Optional[ExamModel]: """根据考试名称获取考试""" return self.db.query( self.model).filter(self.model.name == name).first() def get_by_subject(self, subject: str) -> List[ExamModel]: """根据学科获取考试列表""" return self.db.query( self.model).filter(self.model.subject == subject).all() def get_active_exams(self) -> List[ExamModel]: """获取所有激活的考试""" return self.db.query( self.model).filter(self.model.status == 'active').all() def get_upcoming_exams(self) -> List[ExamModel]: """获取即将开始的考试""" now = datetime.now() return self.db.query(self.model)\ .filter(self.model.start_time > now)\ .order_by(self.model.start_time.asc())\ .all() def get_exams_with_questions(self) -> List[ExamModel]: """获取包含题目信息的考试列表""" return self.db.query(self.model).options( joinedload(self.model.questions)).all()