from datetime import datetime from pydantic import BaseModel, ConfigDict, Field from app.chats.models import ChatMemberRole, ChatType class ChatRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: int type: ChatType title: str | None = None display_title: str | None = None handle: str | None = None description: str | None = None is_public: bool = False is_saved: bool = False unread_count: int = 0 pinned_message_id: int | None = None members_count: int | None = None online_count: int | None = None subscribers_count: int | None = None counterpart_user_id: int | None = None counterpart_name: str | None = None counterpart_username: str | None = None counterpart_is_online: bool | None = None counterpart_last_seen_at: datetime | None = None my_role: ChatMemberRole | None = None created_at: datetime class ChatMemberRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: int user_id: int role: ChatMemberRole joined_at: datetime class ChatDetailRead(ChatRead): members: list[ChatMemberRead] class ChatCreateRequest(BaseModel): type: ChatType title: str | None = Field(default=None, max_length=255) handle: str | None = Field(default=None, max_length=64) description: str | None = Field(default=None, max_length=512) is_public: bool = False member_ids: list[int] = Field(default_factory=list) class ChatMemberAddRequest(BaseModel): user_id: int class ChatMemberRoleUpdateRequest(BaseModel): role: ChatMemberRole class ChatTitleUpdateRequest(BaseModel): title: str = Field(min_length=1, max_length=255) class ChatPinMessageRequest(BaseModel): message_id: int | None = None class ChatDeleteRequest(BaseModel): for_all: bool = False class ChatDiscoverRead(ChatRead): is_member: bool