from typing import Optional, List from pydantic import BaseModel from datetime import datetime from app.models.message import MessageType, MessageStatus class MessageBase(BaseModel): content: Optional[str] = None content_type: MessageType = MessageType.TEXT reply_to_id: Optional[int] = None class MessageCreate(MessageBase): chat_id: int class MessageUpdate(BaseModel): content: Optional[str] = None class MediaFile(BaseModel): id: int filename: str original_filename: str file_size: int mime_type: str media_type: str width: Optional[int] = None height: Optional[int] = None duration: Optional[int] = None thumbnail_url: Optional[str] = None class Config: from_attributes = True class MessageMention(BaseModel): id: int username: str full_name: Optional[str] = None class MessageInDBBase(MessageBase): id: int chat_id: int sender_id: int status: MessageStatus is_edited: bool = False is_deleted: bool = False edited_at: Optional[datetime] = None created_at: datetime class Config: from_attributes = True class Message(MessageInDBBase): sender_username: str sender_avatar: Optional[str] = None media_files: List[MediaFile] = [] mentions: List[MessageMention] = [] reply_to: Optional['Message'] = None class MessageList(BaseModel): messages: List[Message] total: int page: int has_more: bool # Enable forward references Message.model_rebuild()