from pydantic import BaseModel, Field from datetime import datetime from typing import Optional, Any class CoursewareCreate(BaseModel): title: str = Field(..., min_length=1, max_length=200) subject: str = Field(default="", max_length=50) grade: str = Field(default="", max_length=50) description: str = "" content: list[Any] = [] tags: list[str] = [] status: str = "draft" class CoursewareAIGenerate(BaseModel): prompt: str = Field(..., min_length=1, description="教学想法/描述") subject: str = Field(default="", max_length=50) grade: str = Field(default="", max_length=50) page_count: int = Field(default=8, ge=3, le=30) aspect_ratio: str = Field(default="16:9", description="画面比例: 16:9, 4:3, 1:1") class CoursewareUpdate(BaseModel): title: Optional[str] = None subject: Optional[str] = None grade: Optional[str] = None description: Optional[str] = None content: Optional[list[Any]] = None cover_image: Optional[str] = None status: Optional[str] = None tags: Optional[list[str]] = None class CoursewareOut(BaseModel): id: int user_id: int title: str subject: str = "" grade: str = "" description: str = "" content: list = [] cover_image: str = "" status: str = "draft" version: int = 1 tags: list = [] created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True} class CoursewareShareOut(BaseModel): id: int courseware_id: int token: str title: str subject: str = "" grade: str = "" description: str = "" content: list = [] tags: list = [] views: int = 0 status: str = "active" share_url: str = "" created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True}