feat: add new method for chat proto
All checks were successful
Publish / Publish Job (push) Successful in 2m24s

This commit is contained in:
Дмитрий
2026-04-18 11:09:45 +03:00
parent 67083f0ed4
commit 07744f852e
2 changed files with 62 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "@lendry-erp/contracts",
"version": "1.2.29",
"version": "1.2.30",
"description": "Protobuf definitions and generated TypeScript types",
"type": "commonjs",
"main": "./dist/index.js",

View File

@@ -5,15 +5,21 @@ 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); // вызывается либо из Gateway (для фото/аудио), либо напрямую
rpc SendMessage(SendMessageRequest) returns (MessageDto);
rpc EditMessage(EditMessageRequest) returns (MessageDto); // Новое
rpc DeleteMessage(DeleteMessageRequest) returns (DeleteMessageResponse);
// Статусы
@@ -26,30 +32,38 @@ message MessageDto {
string id = 1;
string chat_id = 2;
string sender_id = 3;
string type = 4; // TEXT, VOICE, VIDEO_NOTE, STICKER
string content = 5;
string metadata = 6; // JSON string
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; // Нужно для рендера списка чатов слева!
MessageDto last_message = 6;
bool is_muted = 7; // Полезно для рендера иконки перечеркнутого колокольчика
}
// --- ЗАПРОСЫ / ОТВЕТЫ --- //
message CreateChatRequest {
string creator_id = 1; // ID того кто создает
string type = 2; // GROUP, DIRECT, CHANNEL
string title = 3; // Имя (при type=GROUP|CHANNEL)
repeated string participant_ids = 4; // Кого сразу добавить (собеседник в личке или юзеры в группе)
string creator_id = 1;
string type = 2;
string title = 3;
repeated string participant_ids = 4;
}
message CreateChatResponse {
ChatDto chat = 1;
@@ -57,16 +71,27 @@ message CreateChatResponse {
message GetUserChatsRequest {
string user_id = 1;
int32 offset = 2; // для пагинации (бесконечный скролл в левой панели)
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; // либо join_hash
string chat_id = 2; // Передаем либо chat_id, либо вытаскиваем его из join_hash
}
message JoinChatResponse { bool success = 1; }
@@ -76,11 +101,25 @@ message LeaveChatRequest {
}
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; // курсорная пагинация, как в Telegram
string before_msg_id = 4;
}
message GetMessagesResponse {
repeated MessageDto messages = 1;
@@ -94,16 +133,22 @@ message SendMessageRequest {
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; // "Удалить для всех"
bool for_everyone = 3; // "Удалить только у себя" или "Удалить для всех"
}
message DeleteMessageResponse { bool success = 1; }
message MarkAsReadRequest {
string user_id = 1;
string chat_id = 2;
string message_id = 3;
string message_id = 3; // ID последнего видимого сообщения
}
message MarkAsReadResponse { bool success = 1; }