concord/api/proto/chat/v1/chat.proto

279 lines
6.1 KiB
Protocol Buffer

syntax = "proto3";
package concord.chat.v1;
option go_package = "github.com/Alexander-D-Karpov/concord/api/gen/go/chat/v1;chatv1";
import "google/api/annotations.proto";
import "google/protobuf/timestamp.proto";
import "common/v1/types.proto";
message UploadAttachment {
string filename = 1;
string content_type = 2;
bytes data = 3;
int32 width = 4;
int32 height = 5;
}
message SendMessageRequest {
string room_id = 1;
string content = 2;
string reply_to_id = 3;
repeated string mention_user_ids = 4;
repeated UploadAttachment attachments = 5;
}
message SendMessageResponse {
concord.common.v1.Message message = 1;
}
message EditMessageRequest {
string room_id = 1;
string message_id = 2;
string content = 3;
}
message EditMessageResponse {
concord.common.v1.Message message = 1;
}
message DeleteMessageRequest {
string room_id = 1;
string message_id = 2;
}
message ListMessagesRequest {
string room_id = 1;
string before = 2;
string after = 3;
int32 limit = 4;
}
message ListMessagesResponse {
repeated concord.common.v1.Message messages = 1;
bool has_more = 2;
string last_read_message_id = 3;
}
message GetMessageRequest {
string room_id = 1;
string message_id = 2;
}
message GetMessageResponse {
concord.common.v1.Message message = 1;
}
message AddReactionRequest {
string room_id = 1;
string message_id = 2;
string emoji = 3;
}
message AddReactionResponse {
concord.common.v1.MessageReaction reaction = 1;
}
message RemoveReactionRequest {
string room_id = 1;
string message_id = 2;
string emoji = 3;
}
message PinMessageRequest {
string room_id = 1;
string message_id = 2;
}
message UnpinMessageRequest {
string room_id = 1;
string message_id = 2;
}
message ListPinnedMessagesRequest {
string room_id = 1;
}
message ListPinnedMessagesResponse {
repeated concord.common.v1.Message messages = 1;
}
message GetThreadRequest {
string room_id = 1;
string message_id = 2;
string before = 3;
int32 limit = 4;
}
message GetThreadResponse {
concord.common.v1.Message parent = 1;
repeated concord.common.v1.Message replies = 2;
bool has_more = 3;
}
message SearchMessagesRequest {
string room_id = 1;
string query = 2;
string before = 3;
int32 limit = 4;
}
message SearchMessagesResponse {
repeated concord.common.v1.Message messages = 1;
bool has_more = 2;
}
message ListMessagesSinceRequest {
string room_id = 1;
string after_message_id = 2;
int32 limit = 3;
}
message ListMessagesSinceResponse {
repeated concord.common.v1.Message messages = 1;
bool has_more = 2;
}
message MarkAsReadRequest {
string room_id = 1;
string message_id = 2;
}
message MarkAsReadResponse {
string last_read_message_id = 1;
int32 unread_count = 2;
}
message GetUnreadCountsRequest {}
message RoomUnreadInfo {
string room_id = 1;
int32 unread_count = 2;
string last_read_message_id = 3;
string latest_message_id = 4;
google.protobuf.Timestamp latest_message_at = 5;
}
message GetUnreadCountsResponse {
repeated RoomUnreadInfo rooms = 1;
int32 total_unread = 2;
}
message StartTypingRequest {
string room_id = 1;
}
message StopTypingRequest {
string room_id = 1;
}
message EmptyResponse {}
service ChatService {
rpc SendMessage(SendMessageRequest) returns (SendMessageResponse) {
option (google.api.http) = {
post: "/v1/rooms/{room_id}/messages"
body: "*"
};
}
rpc EditMessage(EditMessageRequest) returns (EditMessageResponse) {
option (google.api.http) = {
patch: "/v1/rooms/{room_id}/messages/{message_id}"
body: "*"
};
}
rpc DeleteMessage(DeleteMessageRequest) returns (EmptyResponse) {
option (google.api.http) = {
delete: "/v1/rooms/{room_id}/messages/{message_id}"
};
}
rpc ListMessages(ListMessagesRequest) returns (ListMessagesResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/messages"
};
}
rpc GetMessage(GetMessageRequest) returns (GetMessageResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/messages/{message_id}"
};
}
rpc AddReaction(AddReactionRequest) returns (AddReactionResponse) {
option (google.api.http) = {
post: "/v1/rooms/{room_id}/messages/{message_id}/reactions"
body: "*"
};
}
rpc RemoveReaction(RemoveReactionRequest) returns (EmptyResponse) {
option (google.api.http) = {
delete: "/v1/rooms/{room_id}/messages/{message_id}/reactions/{emoji}"
};
}
rpc PinMessage(PinMessageRequest) returns (EmptyResponse) {
option (google.api.http) = {
post: "/v1/rooms/{room_id}/messages/{message_id}/pin"
};
}
rpc UnpinMessage(UnpinMessageRequest) returns (EmptyResponse) {
option (google.api.http) = {
delete: "/v1/rooms/{room_id}/messages/{message_id}/pin"
};
}
rpc ListPinnedMessages(ListPinnedMessagesRequest) returns (ListPinnedMessagesResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/pinned"
};
}
rpc GetThread(GetThreadRequest) returns (GetThreadResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/messages/{message_id}/thread"
};
}
rpc SearchMessages(SearchMessagesRequest) returns (SearchMessagesResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/messages/search"
};
}
rpc ListMessagesSince(ListMessagesSinceRequest) returns (ListMessagesSinceResponse) {
option (google.api.http) = {
get: "/v1/rooms/{room_id}/messages/since/{after_message_id}"
};
}
rpc MarkAsRead(MarkAsReadRequest) returns (MarkAsReadResponse) {
option (google.api.http) = {
post: "/v1/rooms/{room_id}/read"
body: "*"
};
}
rpc GetUnreadCounts(GetUnreadCountsRequest) returns (GetUnreadCountsResponse) {
option (google.api.http) = {
get: "/v1/unread"
};
}
rpc StartTyping(StartTypingRequest) returns (EmptyResponse) {
option (google.api.http) = {
post: "/v1/rooms/{room_id}/typing"
};
}
rpc StopTyping(StopTypingRequest) returns (EmptyResponse) {
option (google.api.http) = {
delete: "/v1/rooms/{room_id}/typing"
};
}
}