from pydantic import BaseModel, Field from app.schemas.evaluation import EvaluationResponse class TeachingVideo(BaseModel): """教学视频:题目解析关联的视频资源。""" title: str = "" url: str = "" class TeachingOption(BaseModel): """教学选项:单选题或多选题的选项结构。""" key: str text: str class TeachingQuestion(BaseModel): """教学题目:从 teaching_case 解析出的互动题目。""" question_id: str question_type: str = "single_choice" stem: str options: list[TeachingOption] = Field(default_factory=list) answer: str | list[str] analysis: str = "" video: TeachingVideo | None = None knowledge_points: list[str] = Field(default_factory=list) class TeachingCaseSummary(BaseModel): """教学病例摘要:教学互动页面展示的病例基础信息。""" case_id: int title: str department_id: int | None = None difficulty: str chief_complaint: str description: str patient_age: int | None = None patient_gender: str | None = None knowledge_points: list[str] = Field(default_factory=list) class TeachingItemsResponse(BaseModel): """教学列表响应:病例、教学目标、题目、答案、解析文本和视频。""" case: TeachingCaseSummary teaching_goal: str teacher_guide: str scoring_focus: str questions: list[TeachingQuestion] class TeachingAnswer(BaseModel): """教学作答:前端提交的单题选择结果。""" question_id: str = Field(min_length=1, max_length=64) selected_answer: str | list[str] class CreateTeachingEvaluationRequest(BaseModel): """教学评价入参:提交教学互动题目作答并生成评价。""" case_id: int answers: list[TeachingAnswer] = Field(min_length=1) score_type: str = Field(default="percentage", pattern="^(percentage|five_point)$") class TeachingEvaluationResponse(EvaluationResponse): """教学评价响应:复用训练评价结构,并返回教学会话 ID。""" session_id: int