Files
Messenger/app/realtime/schemas.py
benya ac82e25d16
Some checks are pending
CI / test (push) Has started running
feat(realtime): add voice/video recording activity events
2026-03-08 19:53:48 +03:00

73 lines
1.6 KiB
Python

from datetime import datetime
from typing import Any, Literal
from pydantic import BaseModel, ConfigDict, Field
from app.messages.models import MessageType
RealtimeEventName = Literal[
"connect",
"disconnect",
"send_message",
"receive_message",
"message_updated",
"message_deleted",
"typing_start",
"typing_stop",
"recording_voice_start",
"recording_voice_stop",
"recording_video_start",
"recording_video_stop",
"message_read",
"message_delivered",
"user_online",
"user_offline",
"chat_updated",
"chat_deleted",
"pong",
"error",
]
class SendMessagePayload(BaseModel):
chat_id: int
type: MessageType = MessageType.TEXT
text: str | None = Field(default=None, max_length=4096)
temp_id: str | None = None
client_message_id: str | None = Field(default=None, min_length=8, max_length=64)
reply_to_message_id: int | None = None
class ChatEventPayload(BaseModel):
chat_id: int
class MessageStatusPayload(BaseModel):
chat_id: int
message_id: int
class IncomingRealtimeEvent(BaseModel):
event: Literal[
"send_message",
"typing_start",
"typing_stop",
"recording_voice_start",
"recording_voice_stop",
"recording_video_start",
"recording_video_stop",
"message_read",
"message_delivered",
"ping",
]
payload: dict[str, Any]
class OutgoingRealtimeEvent(BaseModel):
model_config = ConfigDict(from_attributes=True)
event: RealtimeEventName
payload: dict[str, Any]
timestamp: datetime