syntax = "proto3"; package torchat; import "user.proto"; option java_package = "org.torchat.proto"; option java_multiple_files = true; message GroupId { string value = 1; } message GroupProfile { GroupId group_id = 1; string display_name = 2; string description = 3; repeated user.UserId members = 4; user.UserId creator = 5; int64 created_at = 6; string avatar_url = 7; repeated string tags = 8; string rules = 9; } message GroupMember { user.UserId user_id = 1; bool is_admin = 2; bool is_muted = 3; int64 joined_at = 4; } message GroupMessage { GroupId group_id = 1; user.UserId sender = 2; string content = 3; int64 timestamp = 4; string message_id = 5; } message CreateGroupRequest { GroupProfile profile = 1; } message CreateGroupReply { GroupId group_id = 1; } message GetGroupRequest { GroupId group_id = 1; } message GetGroupReply { GroupProfile profile = 1; repeated GroupMember members = 2; } message SendGroupMessageRequest { GroupMessage message = 1; } message SendGroupMessageReply { bool success = 1; } message StreamGroupMessagesRequest { GroupId group_id = 1; } service GroupService { rpc CreateGroup(CreateGroupRequest) returns (CreateGroupReply); rpc GetGroup(GetGroupRequest) returns (GetGroupReply); rpc SendMessage(SendGroupMessageRequest) returns (SendGroupMessageReply); rpc StreamMessages(StreamGroupMessagesRequest) returns (stream GroupMessage); }