from pydantic import BaseModel, Field from datetime import datetime from typing import Optional, Any class ResourceAuthorOut(BaseModel): id: int name: str = "" avatar: str = "" subject: str = "" school: str = "" model_config = {"from_attributes": True} class ResourceCreate(BaseModel): resource_type: str = "other" title: str = Field(..., min_length=1, max_length=200) description: str = "" content_ref: str = "" file_url: str = "" tags: list[str] = Field(default_factory=list) subject: str = "" grade: str = "" is_public: int = 1 class ResourceUpdate(BaseModel): resource_type: Optional[str] = None title: Optional[str] = None description: Optional[str] = None content_ref: Optional[str] = None file_url: Optional[str] = None cover_image: Optional[str] = None tags: Optional[list[str]] = None subject: Optional[str] = None grade: Optional[str] = None is_public: Optional[int] = None status: Optional[str] = None class ResourceOut(BaseModel): id: int user_id: int resource_type: str title: str description: str = "" content_ref: str = "" file_url: str = "" cover_image: str = "" tags: list = Field(default_factory=list) subject: str = "" grade: str = "" downloads: int = 0 likes: int = 0 views: int = 0 is_public: int = 1 is_favorited: bool = False author: ResourceAuthorOut | None = None created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True}