feat: add new method for chat proto
All checks were successful
Publish / Publish Job (push) Successful in 2m24s
All checks were successful
Publish / Publish Job (push) Successful in 2m24s
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@lendry-erp/contracts",
|
"name": "@lendry-erp/contracts",
|
||||||
"version": "1.2.29",
|
"version": "1.2.30",
|
||||||
"description": "Protobuf definitions and generated TypeScript types",
|
"description": "Protobuf definitions and generated TypeScript types",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
|
|||||||
@@ -5,15 +5,21 @@ package chat.v1;
|
|||||||
option go_package = "git.lendry.ru/lendry-erp/proto.git/go;pb";
|
option go_package = "git.lendry.ru/lendry-erp/proto.git/go;pb";
|
||||||
|
|
||||||
service ChatService {
|
service ChatService {
|
||||||
// Управление чатами
|
// Управление чатами (левая панель)
|
||||||
rpc CreateChat(CreateChatRequest) returns (CreateChatResponse);
|
rpc CreateChat(CreateChatRequest) returns (CreateChatResponse);
|
||||||
rpc GetUserChats(GetUserChatsRequest) returns (GetUserChatsResponse);
|
rpc GetUserChats(GetUserChatsRequest) returns (GetUserChatsResponse);
|
||||||
|
rpc GetChatDetails(GetChatDetailsRequest) returns (GetChatDetailsResponse); // Открытие инфы о группе/собеседнике
|
||||||
|
|
||||||
|
// Управление участниками группы
|
||||||
rpc JoinChat(JoinChatRequest) returns (JoinChatResponse);
|
rpc JoinChat(JoinChatRequest) returns (JoinChatResponse);
|
||||||
rpc LeaveChat(LeaveChatRequest) returns (LeaveChatResponse);
|
rpc LeaveChat(LeaveChatRequest) returns (LeaveChatResponse);
|
||||||
|
rpc RemoveMember(RemoveMemberRequest) returns (RemoveMemberResponse); // Админ кикает пользователя
|
||||||
|
rpc MuteChat(MuteChatRequest) returns (MuteChatResponse); // Выключить/включить пуши для чата
|
||||||
|
|
||||||
// Управление сообщениями (история)
|
// Управление сообщениями (правое окно)
|
||||||
rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse);
|
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);
|
rpc DeleteMessage(DeleteMessageRequest) returns (DeleteMessageResponse);
|
||||||
|
|
||||||
// Статусы
|
// Статусы
|
||||||
@@ -26,30 +32,38 @@ message MessageDto {
|
|||||||
string id = 1;
|
string id = 1;
|
||||||
string chat_id = 2;
|
string chat_id = 2;
|
||||||
string sender_id = 3;
|
string sender_id = 3;
|
||||||
string type = 4; // TEXT, VOICE, VIDEO_NOTE, STICKER
|
string type = 4; // TEXT, VOICE, VIDEO_NOTE, STICKER, IMAGE
|
||||||
string content = 5;
|
string content = 5; // Для текста - сам текст. Для медиа - URL S3!
|
||||||
string metadata = 6; // JSON string
|
string metadata = 6; // Ширина/высота картинки, длительность войса (JSON string)
|
||||||
string reply_to_id = 7;
|
string reply_to_id = 7;
|
||||||
bool is_edited = 8;
|
bool is_edited = 8;
|
||||||
string created_at = 9;
|
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 {
|
message ChatDto {
|
||||||
string id = 1;
|
string id = 1;
|
||||||
string type = 2; // DIRECT, GROUP, CHANNEL
|
string type = 2; // DIRECT, GROUP, CHANNEL
|
||||||
string title = 3;
|
string title = 3;
|
||||||
string avatar_url = 4;
|
string avatar_url = 4;
|
||||||
int32 unread_count = 5;
|
int32 unread_count = 5;
|
||||||
MessageDto last_message = 6; // Нужно для рендера списка чатов слева!
|
MessageDto last_message = 6;
|
||||||
|
bool is_muted = 7; // Полезно для рендера иконки перечеркнутого колокольчика
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- ЗАПРОСЫ / ОТВЕТЫ --- //
|
// --- ЗАПРОСЫ / ОТВЕТЫ --- //
|
||||||
|
|
||||||
message CreateChatRequest {
|
message CreateChatRequest {
|
||||||
string creator_id = 1; // ID того кто создает
|
string creator_id = 1;
|
||||||
string type = 2; // GROUP, DIRECT, CHANNEL
|
string type = 2;
|
||||||
string title = 3; // Имя (при type=GROUP|CHANNEL)
|
string title = 3;
|
||||||
repeated string participant_ids = 4; // Кого сразу добавить (собеседник в личке или юзеры в группе)
|
repeated string participant_ids = 4;
|
||||||
}
|
}
|
||||||
message CreateChatResponse {
|
message CreateChatResponse {
|
||||||
ChatDto chat = 1;
|
ChatDto chat = 1;
|
||||||
@@ -57,16 +71,27 @@ message CreateChatResponse {
|
|||||||
|
|
||||||
message GetUserChatsRequest {
|
message GetUserChatsRequest {
|
||||||
string user_id = 1;
|
string user_id = 1;
|
||||||
int32 offset = 2; // для пагинации (бесконечный скролл в левой панели)
|
int32 offset = 2;
|
||||||
int32 limit = 3;
|
int32 limit = 3;
|
||||||
}
|
}
|
||||||
message GetUserChatsResponse {
|
message GetUserChatsResponse {
|
||||||
repeated ChatDto chats = 1;
|
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 {
|
message JoinChatRequest {
|
||||||
string user_id = 1;
|
string user_id = 1;
|
||||||
string chat_id = 2; // либо join_hash
|
string chat_id = 2; // Передаем либо chat_id, либо вытаскиваем его из join_hash
|
||||||
}
|
}
|
||||||
message JoinChatResponse { bool success = 1; }
|
message JoinChatResponse { bool success = 1; }
|
||||||
|
|
||||||
@@ -76,11 +101,25 @@ message LeaveChatRequest {
|
|||||||
}
|
}
|
||||||
message LeaveChatResponse { bool success = 1; }
|
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 {
|
message GetMessagesRequest {
|
||||||
string user_id = 1;
|
string user_id = 1;
|
||||||
string chat_id = 2;
|
string chat_id = 2;
|
||||||
int32 limit = 3;
|
int32 limit = 3;
|
||||||
string before_msg_id = 4; // курсорная пагинация, как в Telegram
|
string before_msg_id = 4;
|
||||||
}
|
}
|
||||||
message GetMessagesResponse {
|
message GetMessagesResponse {
|
||||||
repeated MessageDto messages = 1;
|
repeated MessageDto messages = 1;
|
||||||
@@ -94,16 +133,22 @@ message SendMessageRequest {
|
|||||||
string reply_to_id = 5;
|
string reply_to_id = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message EditMessageRequest {
|
||||||
|
string user_id = 1;
|
||||||
|
string message_id = 2;
|
||||||
|
string new_content = 3;
|
||||||
|
}
|
||||||
|
|
||||||
message DeleteMessageRequest {
|
message DeleteMessageRequest {
|
||||||
string user_id = 1;
|
string user_id = 1;
|
||||||
string message_id = 2;
|
string message_id = 2;
|
||||||
bool for_everyone = 3; // "Удалить для всех"
|
bool for_everyone = 3; // "Удалить только у себя" или "Удалить для всех"
|
||||||
}
|
}
|
||||||
message DeleteMessageResponse { bool success = 1; }
|
message DeleteMessageResponse { bool success = 1; }
|
||||||
|
|
||||||
message MarkAsReadRequest {
|
message MarkAsReadRequest {
|
||||||
string user_id = 1;
|
string user_id = 1;
|
||||||
string chat_id = 2;
|
string chat_id = 2;
|
||||||
string message_id = 3;
|
string message_id = 3; // ID последнего видимого сообщения
|
||||||
}
|
}
|
||||||
message MarkAsReadResponse { bool success = 1; }
|
message MarkAsReadResponse { bool success = 1; }
|
||||||
|
|||||||
Reference in New Issue
Block a user