166 lines
4.9 KiB
Protocol Buffer
166 lines
4.9 KiB
Protocol Buffer
syntax = "proto3";
|
||
|
||
package chat.v1;
|
||
|
||
option go_package = "git.lendry.ru/lendry-erp/proto.git/go;pb";
|
||
|
||
service ChatService {
|
||
// Управление чатами (левая панель)
|
||
rpc CreateChat(CreateChatRequest) returns (CreateChatResponse);
|
||
rpc GetUserChats(GetUserChatsRequest) returns (GetUserChatsResponse);
|
||
rpc GetChatDetails(GetChatDetailsRequest) returns (GetChatDetailsResponse); // Открытие инфы о группе/собеседнике
|
||
|
||
// Управление участниками группы
|
||
rpc JoinChat(JoinChatRequest) returns (JoinChatResponse);
|
||
rpc LeaveChat(LeaveChatRequest) returns (LeaveChatResponse);
|
||
rpc RemoveMember(RemoveMemberRequest) returns (RemoveMemberResponse); // Админ кикает пользователя
|
||
rpc MuteChat(MuteChatRequest) returns (MuteChatResponse); // Выключить/включить пуши для чата
|
||
|
||
// Управление сообщениями (правое окно)
|
||
rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse);
|
||
rpc SendMessage(SendMessageRequest) returns (MessageDto);
|
||
rpc EditMessage(EditMessageRequest) returns (MessageDto); // Новое
|
||
rpc DeleteMessage(DeleteMessageRequest) returns (DeleteMessageResponse);
|
||
|
||
// Статусы
|
||
rpc MarkAsRead(MarkAsReadRequest) returns (MarkAsReadResponse);
|
||
|
||
rpc CheckChatMembership(CheckChatMembershipRequest) returns (CheckChatMembershipResponse);
|
||
}
|
||
|
||
// --- СТРУКТУРЫ ДАННЫХ --- //
|
||
|
||
message MessageDto {
|
||
string id = 1;
|
||
string chat_id = 2;
|
||
string sender_id = 3;
|
||
string type = 4; // TEXT, VOICE, VIDEO_NOTE, STICKER, IMAGE
|
||
string content = 5; // Для текста - сам текст. Для медиа - URL S3!
|
||
string metadata = 6; // Ширина/высота картинки, длительность войса (JSON string)
|
||
string reply_to_id = 7;
|
||
bool is_edited = 8;
|
||
string created_at = 9;
|
||
}
|
||
|
||
message ChatMemberDto {
|
||
string account_id = 1;
|
||
string role = 2; // OWNER, ADMIN, MEMBER
|
||
bool is_muted = 3;
|
||
string joined_at = 4;
|
||
}
|
||
|
||
message ChatDto {
|
||
string id = 1;
|
||
string type = 2; // DIRECT, GROUP, CHANNEL
|
||
string title = 3;
|
||
string avatar_url = 4;
|
||
int32 unread_count = 5;
|
||
MessageDto last_message = 6;
|
||
bool is_muted = 7; // Полезно для рендера иконки перечеркнутого колокольчика
|
||
}
|
||
|
||
// --- ЗАПРОСЫ / ОТВЕТЫ --- //
|
||
|
||
message CreateChatRequest {
|
||
string creator_id = 1;
|
||
string type = 2;
|
||
string title = 3;
|
||
repeated string participant_ids = 4;
|
||
}
|
||
message CreateChatResponse {
|
||
ChatDto chat = 1;
|
||
}
|
||
|
||
message GetUserChatsRequest {
|
||
string user_id = 1;
|
||
int32 offset = 2;
|
||
int32 limit = 3;
|
||
}
|
||
message GetUserChatsResponse {
|
||
repeated ChatDto chats = 1;
|
||
}
|
||
|
||
// Получаем профили всех участников и ссылку-приглашение (join_hash)
|
||
message GetChatDetailsRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
}
|
||
message GetChatDetailsResponse {
|
||
ChatDto chat = 1;
|
||
string join_hash = 2; // Для ссылки-приглашения (t.me/join/...)
|
||
repeated ChatMemberDto members = 3;
|
||
}
|
||
|
||
message JoinChatRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2; // Передаем либо chat_id, либо вытаскиваем его из join_hash
|
||
}
|
||
message JoinChatResponse { bool success = 1; }
|
||
|
||
message LeaveChatRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
}
|
||
message LeaveChatResponse { bool success = 1; }
|
||
|
||
message RemoveMemberRequest {
|
||
string admin_id = 1; // Кто кикает (нужно проверить права)
|
||
string target_user_id = 2; // Кого кикают
|
||
string chat_id = 3;
|
||
}
|
||
message RemoveMemberResponse { bool success = 1; }
|
||
|
||
message MuteChatRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
bool is_muted = 3; // true = выключить звук, false = включить
|
||
}
|
||
message MuteChatResponse { bool success = 1; }
|
||
|
||
message GetMessagesRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
int32 limit = 3;
|
||
string before_msg_id = 4;
|
||
}
|
||
message GetMessagesResponse {
|
||
repeated MessageDto messages = 1;
|
||
}
|
||
|
||
message SendMessageRequest {
|
||
string chat_id = 1;
|
||
string sender_id = 2;
|
||
string type = 3;
|
||
string content = 4;
|
||
string reply_to_id = 5;
|
||
}
|
||
|
||
message EditMessageRequest {
|
||
string user_id = 1;
|
||
string message_id = 2;
|
||
string new_content = 3;
|
||
}
|
||
|
||
message DeleteMessageRequest {
|
||
string user_id = 1;
|
||
string message_id = 2;
|
||
bool for_everyone = 3; // "Удалить только у себя" или "Удалить для всех"
|
||
}
|
||
message DeleteMessageResponse { bool success = 1; }
|
||
|
||
message MarkAsReadRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
string message_id = 3; // ID последнего видимого сообщения
|
||
}
|
||
message MarkAsReadResponse { bool success = 1; }
|
||
|
||
|
||
message CheckChatMembershipRequest {
|
||
string user_id = 1;
|
||
string chat_id = 2;
|
||
}
|
||
|
||
message CheckChatMembershipResponse {
|
||
bool is_member = 1;
|
||
} |