member_directory.proto 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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 effective members should be listed. Existing members
  72. // and room.manage holders may list a channel room; other nonmembers need both
  73. // room.list and room.join.
  74. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  75. // Optional case-insensitive search against login and display name.
  76. string search = 2 [(buf.validate.field).string.max_len = 100];
  77. // Page request. Defaults to 250 results when absent or limit is zero.
  78. PageRequest page = 5;
  79. }
  80. // Room member page.
  81. message ListRoomMembersResponse {
  82. reserved 2, 3;
  83. reserved "total_count", "has_more";
  84. // Members in the requested page.
  85. repeated DirectoryMember members = 1;
  86. // Page metadata.
  87. PageInfo page = 4;
  88. }
  89. // Request one member of one room by stable user ID.
  90. message GetRoomMemberRequest {
  91. // Required room ID.
  92. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  93. // Required target user ID.
  94. string user_id = 2 [(buf.validate.field).string.min_len = 1];
  95. }
  96. // Room member response.
  97. message GetRoomMemberResponse {
  98. // Requested room member.
  99. DirectoryMember member = 1;
  100. }
  101. // Request room member rows for a set of stable user IDs.
  102. message BatchGetRoomMembersRequest {
  103. // Required room ID.
  104. string room_id = 1 [(buf.validate.field).string.min_len = 1];
  105. // Required target user IDs. Unknown IDs and users that are not members of the
  106. // room are omitted from the response.
  107. repeated string user_ids = 2 [(buf.validate.field).repeated = {
  108. min_items: 1
  109. max_items: 100
  110. items: {
  111. string: {min_len: 1}
  112. }
  113. }];
  114. }
  115. // Batch room member response.
  116. message BatchGetRoomMembersResponse {
  117. // Found members. The server preserves first-seen request order and
  118. // de-duplicates repeated IDs.
  119. repeated DirectoryMember members = 1;
  120. }
  121. // Reads the authenticated server-wide user directory.
  122. service UserService {
  123. // Lists users visible to the authenticated user. Admin-sensitive account
  124. // fields stay out of this public row shape.
  125. rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
  126. // Gets one visible user by user ID or login. Returns NOT_FOUND when the
  127. // target is unknown.
  128. rpc GetUser(GetUserRequest) returns (GetUserResponse);
  129. // Gets visible user rows for multiple stable user IDs. Unknown IDs are
  130. // omitted from the response.
  131. rpc BatchGetUsers(BatchGetUsersRequest) returns (BatchGetUsersResponse);
  132. }