from typing import Optional, List, TYPE_CHECKING from datetime import datetime from pydantic import BaseModel if TYPE_CHECKING: from app.schemas.question import Question from app.schemas.user import User # Shared properties class ExamBase(BaseModel): title: str description: Optional[str] = None course_id: int duration_minutes: int = 60 passing_score: float = 50.0 is_active: bool = True is_randomized: bool = False start_time: Optional[datetime] = None end_time: Optional[datetime] = None created_by: Optional[int] = None # Properties to receive via API on creation class ExamCreate(ExamBase): pass # Properties to receive via API on update class ExamUpdate(ExamBase): title: Optional[str] = None course_id: Optional[int] = None duration_minutes: Optional[int] = None passing_score: Optional[float] = None is_active: Optional[bool] = None is_randomized: Optional[bool] = None class ExamInDBBase(ExamBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Additional properties to return via API class Exam(ExamInDBBase): pass # Exam with questions class ExamWithQuestions(Exam): questions: List['Question'] = [] # Exam with creator info class ExamWithCreator(Exam): creator: Optional['User'] = None # Update forward references from app.schemas.question import Question # noqa: E402 from app.schemas.user import User # noqa: E402 ExamWithQuestions.model_rebuild() ExamWithCreator.model_rebuild()