from __future__ import annotations from datetime import datetime from typing import List, Optional from pydantic import BaseModel from app.models.content import DifficultyLevel # Subject schemas class SubjectBase(BaseModel): name: str description: Optional[str] = None image_url: Optional[str] = None order: Optional[int] = 0 is_active: bool = True class SubjectCreate(SubjectBase): pass class SubjectUpdate(SubjectBase): name: Optional[str] = None class SubjectInDBBase(SubjectBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Subject(SubjectInDBBase): pass # Lesson schemas class LessonBase(BaseModel): subject_id: int title: str description: Optional[str] = None content: str image_url: Optional[str] = None order: Optional[int] = 0 difficulty: DifficultyLevel = DifficultyLevel.EASY points: int = 10 duration_minutes: int = 15 is_active: bool = True class LessonCreate(LessonBase): pass class LessonUpdate(LessonBase): subject_id: Optional[int] = None title: Optional[str] = None content: Optional[str] = None class LessonInDBBase(LessonBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Lesson(LessonInDBBase): pass # Quiz schemas class QuizBase(BaseModel): lesson_id: int title: str description: Optional[str] = None time_limit_minutes: int = 10 pass_percentage: int = 70 points: int = 20 is_active: bool = True class QuizCreate(QuizBase): pass class QuizUpdate(QuizBase): lesson_id: Optional[int] = None title: Optional[str] = None class QuizInDBBase(QuizBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Quiz(QuizInDBBase): pass # Answer schemas class AnswerBase(BaseModel): text: str is_correct: bool explanation: Optional[str] = None order: int = 0 class AnswerCreate(AnswerBase): pass class AnswerUpdate(AnswerBase): text: Optional[str] = None is_correct: Optional[bool] = None class AnswerInDBBase(AnswerBase): id: int question_id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Answer(AnswerInDBBase): pass # Question schemas class QuestionBase(BaseModel): quiz_id: int text: str image_url: Optional[str] = None explanation: Optional[str] = None points: int = 5 order: int = 0 is_active: bool = True class QuestionCreate(QuestionBase): answers: List[AnswerCreate] class QuestionUpdate(QuestionBase): quiz_id: Optional[int] = None text: Optional[str] = None answers: Optional[List[AnswerUpdate]] = None class QuestionInDBBase(QuestionBase): id: int created_at: datetime updated_at: datetime class Config: from_attributes = True class Question(QuestionInDBBase): answers: List[Answer] = []