from pydantic import BaseModel, Field from datetime import datetime from typing import Optional, Any class ExerciseAIGenerate(BaseModel): prompt: str = Field(..., min_length=1, description="练习生成描述") exercise_type: str = Field(default="choice") subject: str = "" knowledge_points: list[str] = [] count: int = Field(default=5, ge=1, le=50) class ExerciseCreate(BaseModel): title: str = Field(..., min_length=1, max_length=200) exercise_type: str = "choice" subject: str = "" knowledge_points: list[str] = [] questions: list[dict[str, Any]] = [] settings: dict[str, Any] = {} class ExerciseUpdate(BaseModel): title: Optional[str] = None exercise_type: Optional[str] = None subject: Optional[str] = None knowledge_points: Optional[list[str]] = None questions: Optional[list[dict[str, Any]]] = None settings: Optional[dict[str, Any]] = None class ExerciseAttemptCreate(BaseModel): student_name: str = "" answers: list[Any] = [] score: int = 0 total: int = 0 duration: int = 0 class ExerciseAttemptOut(BaseModel): id: int exercise_id: int student_name: str = "" answers: list[Any] = [] score: int = 0 total: int = 0 duration: int = 0 created_at: datetime | None = None model_config = {"from_attributes": True} class ExerciseOut(BaseModel): id: int user_id: int title: str exercise_type: str = "choice" subject: str = "" knowledge_points: list = [] questions: list = [] settings: dict = {} created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True}