54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
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() |