Files
contracts/proto/chat/chat.proto
Дмитрий 07744f852e
All checks were successful
Publish / Publish Job (push) Successful in 2m24s
feat: add new method for chat proto
2026-04-18 11:09:45 +03:00

155 lines
4.6 KiB
Protocol Buffer
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
// --- СТРУКТУРЫ ДАННЫХ --- //
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; }