from typing import Optional, List, TYPE_CHECKING from datetime import datetime from pydantic import BaseModel if TYPE_CHECKING: from app.schemas.student_answer import StudentAnswer # Shared properties class ExamResultBase(BaseModel): exam_id: int student_id: int is_completed: bool = False remarks: Optional[str] = None # Properties to receive via API on creation class ExamResultCreate(ExamResultBase): pass # Properties to receive via API on update class ExamResultUpdate(BaseModel): score: Optional[float] = None max_score: Optional[float] = None completed_at: Optional[datetime] = None is_completed: Optional[bool] = None remarks: Optional[str] = None class ExamResultInDBBase(ExamResultBase): id: int score: Optional[float] = None max_score: Optional[float] = None started_at: datetime completed_at: Optional[datetime] = None class Config: from_attributes = True # Additional properties to return via API class ExamResult(ExamResultInDBBase): pass # Exam result with student answers class ExamResultWithAnswers(ExamResult): answers: List['StudentAnswer'] = [] # Update forward references from app.schemas.student_answer import StudentAnswer # noqa: E402 ExamResultWithAnswers.model_rebuild()