concord/api/proto/stream/v1/stream.proto

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