member_directory.proto 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. syntax = "proto3";
  2. package chatto.api.v1;
  3. import "buf/validate/validate.proto";
  4. import "chatto/api/v1/pagination.proto";
  5. import "chatto/api/v1/users.proto";
  6. import "google/protobuf/timestamp.proto";
  7. // Public user/member row used by user directory, room membership, and mention
  8. // surfaces.
  9. message DirectoryMember {
  10. // Public user fields.
  11. User user = 1;
  12. // Explicit roles assigned to the user. Member listings include the virtual
  13. // `everyone` role for parity with Chatto's permission model.
  14. repeated string roles = 2;
  15. // Account creation time when known.
  16. google.protobuf.Timestamp created_at = 3;
  17. }
  18. // Request for users visible to the authenticated user.
  19. message ListUsersRequest {
  20. reserved 2, 3;
  21. reserved "limit", "offset";
  22. // Optional case-insensitive search against login and display name.
  23. string search = 1 [(buf.validate.field).string.max_len = 100];
  24. // Page request. Defaults to 20 results when absent or limit is zero.
  25. PageRequest page = 4;
  26. }
  27. // User directory page.
  28. message ListUsersResponse {
  29. reserved 2, 3;
  30. reserved "total_count", "has_more";
  31. // Users in the requested page.
  32. repeated DirectoryMember users = 1;
  33. // Page metadata.
  34. PageInfo page = 4;
  35. }
  36. // Request one visible user by stable user ID or login.
  37. message GetUserRequest {
  38. oneof target {
  39. // Target stable user ID.
  40. string user_id = 1 [(buf.validate.field).string.min_len = 1];
  41. // Target login identifier.
  42. string login = 2 [(buf.validate.field).string.min_len = 1];
  43. }
  44. }
  45. // User directory response.
  46. message GetUserResponse {
  47. // Requested user.
  48. DirectoryMember user = 1;
  49. }
  50. // Request user directory rows for a set of stable user IDs.
  51. message BatchGetUsersRequest {
  52. // Required target user IDs. Unknown IDs are omitted from the response.
  53. repeated string user_ids = 1 [(buf.validate.field).repeated = {
  54. min_items: 1
  55. max_items: 100
  56. items: {
  57. string: {min_len: 1}
  58. }
  59. }];
  60. }
  61. // Batch user directory response.
  62. message BatchGetUsersResponse {
  63. // Found users. The server preserves first-seen request order and
  64. // de-duplicates repeated IDs.
  65. repeated DirectoryMember users = 1;
  66. }
  67. // Request for members of one room.
  68. message ListRoomMembersRequest {
  69. reserved 3, 4;
  70. reserved "limit", "offset";
  71. // Required. Room whose explicit members should be listed.
  72. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  73. // Optional case-insensitive search against login and display name.
  74. string search = 2 [(buf.validate.field).string.max_len = 100];
  75. // Page request. Defaults to 20 results when absent or limit is zero.
  76. PageRequest page = 5;
  77. }
  78. // Room member page.
  79. message ListRoomMembersResponse {
  80. reserved 2, 3;
  81. reserved "total_count", "has_more";
  82. // Members in the requested page.
  83. repeated DirectoryMember members = 1;
  84. // Page metadata.
  85. PageInfo page = 4;
  86. }
  87. // Request one member of one room by stable user ID.
  88. message GetRoomMemberRequest {
  89. // Required room ID.
  90. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  91. // Required target user ID.
  92. string user_id = 2 [(buf.validate.field).string.min_len = 1];
  93. }
  94. // Room member response.
  95. message GetRoomMemberResponse {
  96. // Requested room member.
  97. DirectoryMember member = 1;
  98. }
  99. // Request room member rows for a set of stable user IDs.
  100. message BatchGetRoomMembersRequest {
  101. // Required room ID.
  102. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  103. // Required target user IDs. Unknown IDs and users that are not members of the
  104. // room are omitted from the response.
  105. repeated string user_ids = 2 [(buf.validate.field).repeated = {
  106. min_items: 1
  107. max_items: 100
  108. items: {
  109. string: {min_len: 1}
  110. }
  111. }];
  112. }
  113. // Batch room member response.
  114. message BatchGetRoomMembersResponse {
  115. // Found members. The server preserves first-seen request order and
  116. // de-duplicates repeated IDs.
  117. repeated DirectoryMember members = 1;
  118. }
  119. // Reads the authenticated server-wide user directory.
  120. service UserService {
  121. // Lists users visible to the authenticated user. Admin-sensitive account
  122. // fields stay out of this public row shape.
  123. rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
  124. // Gets one visible user by user ID or login. Returns NOT_FOUND when the
  125. // target is unknown.
  126. rpc GetUser(GetUserRequest) returns (GetUserResponse);
  127. // Gets visible user rows for multiple stable user IDs. Unknown IDs are
  128. // omitted from the response.
  129. rpc BatchGetUsers(BatchGetUsersRequest) returns (BatchGetUsersResponse);
  130. }