from pydantic import BaseModel from datetime import datetime from typing import Optional, List from app.models.message import MessageType class MessageBase(BaseModel): content: str message_type: MessageType = MessageType.TEXT file_url: Optional[str] = None class MessageCreate(MessageBase): receiver_id: int class MessageResponse(MessageBase): id: int conversation_id: int sender_id: int receiver_id: int is_read: bool read_at: Optional[datetime] = None created_at: datetime sender_name: Optional[str] = None class Config: from_attributes = True class ConversationResponse(BaseModel): id: int participant_1_id: int participant_2_id: int created_at: datetime updated_at: datetime other_participant_name: Optional[str] = None other_participant_id: Optional[int] = None last_message: Optional[str] = None unread_count: int = 0 class Config: from_attributes = True class GroupChatBase(BaseModel): name: str description: Optional[str] = None class GroupChatCreate(GroupChatBase): member_ids: List[int] = [] class GroupChatResponse(GroupChatBase): id: int created_by: int is_active: bool created_at: datetime creator_name: Optional[str] = None member_count: int = 0 last_message: Optional[str] = None class Config: from_attributes = True class GroupChatMemberResponse(BaseModel): id: int group_chat_id: int user_id: int is_admin: bool joined_at: datetime user_name: Optional[str] = None class Config: from_attributes = True class GroupMessageBase(BaseModel): content: str message_type: MessageType = MessageType.TEXT file_url: Optional[str] = None class GroupMessageCreate(GroupMessageBase): pass class GroupMessageResponse(GroupMessageBase): id: int group_chat_id: int sender_id: int created_at: datetime sender_name: Optional[str] = None class Config: from_attributes = True