from typing import Optional, List from pydantic import BaseModel from datetime import datetime from app.models.chat import ChatType from app.models.chat_member import MemberRole from app.schemas.user import UserPublic class ChatBase(BaseModel): name: Optional[str] = None description: Optional[str] = None chat_type: ChatType avatar_url: Optional[str] = None class ChatCreate(ChatBase): member_ids: List[int] = [] # For group chats class DirectChatCreate(BaseModel): other_user_id: int class ChatUpdate(BaseModel): name: Optional[str] = None description: Optional[str] = None avatar_url: Optional[str] = None class ChatMemberBase(BaseModel): user_id: int role: MemberRole = MemberRole.MEMBER nickname: Optional[str] = None class ChatMemberCreate(ChatMemberBase): pass class ChatMemberUpdate(BaseModel): role: Optional[MemberRole] = None nickname: Optional[str] = None is_muted: Optional[bool] = None class ChatMember(ChatMemberBase): id: int chat_id: int is_muted: bool = False is_banned: bool = False joined_at: datetime last_read_message_id: Optional[int] = None user: UserPublic class Config: from_attributes = True class ChatInDBBase(ChatBase): id: int is_active: bool = True created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True class Chat(ChatInDBBase): members: List[ChatMember] = [] last_message: Optional[dict] = None unread_count: int = 0 class ChatList(BaseModel): id: int name: Optional[str] = None chat_type: ChatType avatar_url: Optional[str] = None last_message: Optional[dict] = None last_activity: Optional[datetime] = None unread_count: int = 0 is_online: bool = False # For direct chats class Config: from_attributes = True