from __future__ import annotations from datetime import datetime from typing import Optional from pydantic import BaseModel from app.models.progress import ProgressStatus # UserProgress schemas class UserProgressBase(BaseModel): user_id: int lesson_id: int status: ProgressStatus = ProgressStatus.NOT_STARTED progress_percentage: float = 0.0 points_earned: int = 0 class UserProgressCreate(UserProgressBase): pass class UserProgressUpdate(UserProgressBase): user_id: Optional[int] = None lesson_id: Optional[int] = None status: Optional[ProgressStatus] = None progress_percentage: Optional[float] = None points_earned: Optional[int] = None completed_at: Optional[datetime] = None class UserProgressInDBBase(UserProgressBase): id: int completed_at: Optional[datetime] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class UserProgress(UserProgressInDBBase): pass # UserAnswer schemas class UserAnswerBase(BaseModel): user_id: int question_id: int answer_id: int is_correct: bool = False points_earned: int = 0 attempt_number: int = 1 time_taken_seconds: Optional[int] = None class UserAnswerCreate(UserAnswerBase): pass class UserAnswerUpdate(UserAnswerBase): user_id: Optional[int] = None question_id: Optional[int] = None answer_id: Optional[int] = None is_correct: Optional[bool] = None points_earned: Optional[int] = None attempt_number: Optional[int] = None time_taken_seconds: Optional[int] = None class UserAnswerInDBBase(UserAnswerBase): id: int created_at: datetime class Config: from_attributes = True class UserAnswer(UserAnswerInDBBase): pass