from datetime import datetime from typing import Optional from pydantic import BaseModel, Field class MaterialCreate(BaseModel): filename: str = Field(..., min_length=1, max_length=255) title: str = Field(..., min_length=1, max_length=200) material_type: str = "text" subject: str = "" grade: str = "" tags: list[str] = Field(default_factory=list) summary: str = "" char_count: int = 0 size: int = 0 source: str = "upload" class MaterialUpdate(BaseModel): title: Optional[str] = None subject: Optional[str] = None grade: Optional[str] = None tags: Optional[list[str]] = None summary: Optional[str] = None status: Optional[str] = None class MaterialOut(BaseModel): id: int user_id: int filename: str title: str material_type: str = "text" subject: str = "" grade: str = "" tags: list = Field(default_factory=list) summary: str = "" char_count: int = 0 size: int = 0 source: str = "upload" created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True}