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; }