268 lines
5.9 KiB
Protocol Buffer
268 lines
5.9 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package concord.stream.v1;
|
|
|
|
option go_package = "github.com/Alexander-D-Karpov/concord/api/gen/go/stream/v1;streamv1";
|
|
|
|
import "google/protobuf/timestamp.proto";
|
|
import "common/v1/types.proto";
|
|
import "friends/v1/friends.proto";
|
|
import "membership/v1/membership.proto";
|
|
import "dm/v1/dm.proto";
|
|
import "protoc-gen-openapiv2/options/annotations.proto";
|
|
|
|
message Ack {
|
|
string event_id = 1;
|
|
}
|
|
|
|
message ClientEvent {
|
|
oneof payload {
|
|
Ack ack = 1;
|
|
}
|
|
}
|
|
|
|
message MessageCreated {
|
|
concord.common.v1.Message message = 1;
|
|
}
|
|
|
|
message MessageEdited {
|
|
concord.common.v1.Message message = 1;
|
|
}
|
|
|
|
message MessageDeleted {
|
|
string message_id = 1;
|
|
string room_id = 2;
|
|
}
|
|
|
|
message MessageReactionAdded {
|
|
string message_id = 1;
|
|
string room_id = 2;
|
|
concord.common.v1.MessageReaction reaction = 3;
|
|
}
|
|
|
|
message MessageReactionRemoved {
|
|
string message_id = 1;
|
|
string room_id = 2;
|
|
string reaction_id = 3;
|
|
string user_id = 4;
|
|
}
|
|
|
|
message MessagePinned {
|
|
string message_id = 1;
|
|
string room_id = 2;
|
|
string pinned_by = 3;
|
|
}
|
|
|
|
message MessageUnpinned {
|
|
string message_id = 1;
|
|
string room_id = 2;
|
|
}
|
|
|
|
message MemberJoined {
|
|
concord.common.v1.Member member = 1;
|
|
}
|
|
|
|
message MemberRemoved {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
}
|
|
|
|
message MemberNicknameChanged {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
string new_nickname = 3;
|
|
}
|
|
|
|
message VoiceStateChanged {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
bool muted = 3;
|
|
bool video_enabled = 4;
|
|
bool speaking = 5;
|
|
}
|
|
|
|
message RoomUpdated {
|
|
concord.common.v1.Room room = 1;
|
|
}
|
|
|
|
message RoleChanged {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
concord.common.v1.Role new_role = 3;
|
|
}
|
|
|
|
message UserStatusChanged {
|
|
string user_id = 1;
|
|
string status = 2;
|
|
}
|
|
|
|
message VoiceUserJoined {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
bool audio_only = 3;
|
|
}
|
|
|
|
message VoiceUserLeft {
|
|
string room_id = 1;
|
|
string user_id = 2;
|
|
}
|
|
|
|
message FriendRequestCreated {
|
|
concord.friends.v1.FriendRequest request = 1;
|
|
}
|
|
message FriendRequestUpdated {
|
|
concord.friends.v1.FriendRequest request = 1;
|
|
}
|
|
|
|
message RoomDeleted {
|
|
string room_id = 1;
|
|
string deleted_by = 2;
|
|
}
|
|
|
|
message FriendRemoved {
|
|
string user_id = 1;
|
|
string removed_by = 2;
|
|
}
|
|
|
|
message UserBlocked {
|
|
string blocker_id = 1;
|
|
}
|
|
|
|
message UserUnblocked {
|
|
string unblocker_id = 1;
|
|
}
|
|
|
|
message ProfileUpdated {
|
|
string user_id = 1;
|
|
string display_name = 2;
|
|
string avatar_url = 3;
|
|
string status = 4;
|
|
string bio = 5;
|
|
}
|
|
|
|
message RoomInviteReceived {
|
|
string room_id = 1;
|
|
string room_name = 2;
|
|
string invited_by = 3;
|
|
string inviter_display_name = 4;
|
|
}
|
|
|
|
message RoomInviteCreated {
|
|
membership.v1.RoomInvite invite = 1;
|
|
}
|
|
|
|
message RoomInviteUpdated {
|
|
membership.v1.RoomInvite invite = 1;
|
|
}
|
|
|
|
message DMMessageCreated {
|
|
string channel_id = 1;
|
|
concord.dm.v1.DMMessage message = 2;
|
|
}
|
|
|
|
message DMMessageEdited {
|
|
string channel_id = 1;
|
|
concord.dm.v1.DMMessage message = 2;
|
|
}
|
|
|
|
message DMMessageDeleted {
|
|
string channel_id = 1;
|
|
string message_id = 2;
|
|
}
|
|
|
|
message TypingStarted {
|
|
string room_id = 1;
|
|
string channel_id = 2;
|
|
string user_id = 3;
|
|
string user_display_name = 4;
|
|
google.protobuf.Timestamp expires_at = 5;
|
|
}
|
|
|
|
message TypingStopped {
|
|
string room_id = 1;
|
|
string channel_id = 2;
|
|
string user_id = 3;
|
|
}
|
|
|
|
message MessageRead {
|
|
string room_id = 1;
|
|
string channel_id = 2;
|
|
string user_id = 3;
|
|
string message_id = 4;
|
|
google.protobuf.Timestamp read_at = 5;
|
|
}
|
|
|
|
message UnreadCountUpdated {
|
|
string room_id = 1;
|
|
string channel_id = 2;
|
|
int32 unread_count = 3;
|
|
string last_message_id = 4;
|
|
}
|
|
|
|
// Added DM Call events
|
|
message DMCallStarted {
|
|
string channel_id = 1;
|
|
string caller_id = 2;
|
|
bool audio_only = 3;
|
|
}
|
|
|
|
message DMCallEnded {
|
|
string channel_id = 1;
|
|
string user_id = 2;
|
|
}
|
|
|
|
message ServerEvent {
|
|
string event_id = 1;
|
|
google.protobuf.Timestamp created_at = 2;
|
|
oneof payload {
|
|
MessageCreated message_created = 10;
|
|
MessageEdited message_edited = 11;
|
|
MessageDeleted message_deleted = 12;
|
|
MessageReactionAdded message_reaction_added = 13;
|
|
MessageReactionRemoved message_reaction_removed = 14;
|
|
MessagePinned message_pinned = 15;
|
|
MessageUnpinned message_unpinned = 16;
|
|
MemberJoined member_joined = 20;
|
|
MemberRemoved member_removed = 21;
|
|
MemberNicknameChanged member_nickname_changed = 22;
|
|
DMMessageCreated dm_message_created = 25;
|
|
DMMessageEdited dm_message_edited = 26;
|
|
DMMessageDeleted dm_message_deleted = 27;
|
|
VoiceStateChanged voice_state_changed = 30;
|
|
RoomUpdated room_updated = 40;
|
|
RoleChanged role_changed = 41;
|
|
RoomDeleted room_deleted = 42;
|
|
RoomInviteReceived room_invite_received = 43;
|
|
UserStatusChanged user_status_changed = 50;
|
|
ProfileUpdated profile_updated = 51;
|
|
VoiceUserJoined voice_user_joined = 60;
|
|
VoiceUserLeft voice_user_left = 61;
|
|
FriendRequestCreated friend_request_created = 70;
|
|
FriendRequestUpdated friend_request_updated = 71;
|
|
FriendRemoved friend_removed = 72;
|
|
UserBlocked user_blocked = 73;
|
|
UserUnblocked user_unblocked = 74;
|
|
RoomInviteCreated room_invite_created = 80;
|
|
RoomInviteUpdated room_invite_updated = 81;
|
|
TypingStarted typing_started = 90;
|
|
TypingStopped typing_stopped = 91;
|
|
MessageRead message_read = 92;
|
|
UnreadCountUpdated unread_count_updated = 93;
|
|
|
|
DMCallStarted dm_call_started = 94;
|
|
DMCallEnded dm_call_ended = 95;
|
|
}
|
|
}
|
|
|
|
service StreamService {
|
|
// EventStream provides real-time updates for messages, presence, and voice state.
|
|
// This is a bidirectional streaming RPC - use a gRPC client for proper streaming support.
|
|
// For HTTP clients, consider using Server-Sent Events endpoint at /v1/stream/events (if implemented).
|
|
rpc EventStream(stream ClientEvent) returns (stream ServerEvent) {
|
|
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
|
summary: "Bidirectional Event Stream";
|
|
description: "Real-time bidirectional streaming for events. Requires gRPC client. HTTP/REST clients should use polling or SSE alternatives.";
|
|
tags: "Streaming";
|
|
};
|
|
}
|
|
} |