from pydantic import BaseModel, Field from datetime import datetime from typing import Any, Optional class CommunityAuthorOut(BaseModel): id: int name: str = "" avatar: str = "" subject: str = "" school: str = "" model_config = {"from_attributes": True} class PostCreate(BaseModel): title: str = Field(..., min_length=1, max_length=200) content: str = Field(..., min_length=1) post_type: str = "discussion" tags: list[str] = Field(default_factory=list) attachments: list[dict[str, Any]] = Field(default_factory=list) class PostUpdate(BaseModel): title: Optional[str] = Field(None, min_length=1, max_length=200) content: Optional[str] = Field(None, min_length=1) post_type: Optional[str] = None tags: Optional[list[str]] = None attachments: Optional[list[dict[str, Any]]] = None class PostOut(BaseModel): id: int user_id: int title: str content: str = "" post_type: str = "discussion" tags: list = Field(default_factory=list) attachments: list = Field(default_factory=list) views: int = 0 likes: int = 0 comments_count: int = 0 is_pinned: int = 0 is_favorited: bool = False author: CommunityAuthorOut | None = None created_at: datetime | None = None updated_at: datetime | None = None model_config = {"from_attributes": True} class CommentCreate(BaseModel): content: str = Field(..., min_length=1) parent_id: Optional[int] = None class CommentOut(BaseModel): id: int post_id: int user_id: int content: str parent_id: Optional[int] = None likes: int = 0 author: CommunityAuthorOut | None = None created_at: datetime | None = None model_config = {"from_attributes": True}