user_service.proto 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. syntax = "proto3";
  2. package memos.api.v1;
  3. import "api/v1/common.proto";
  4. import "google/api/annotations.proto";
  5. import "google/api/client.proto";
  6. import "google/api/field_behavior.proto";
  7. import "google/api/httpbody.proto";
  8. import "google/protobuf/empty.proto";
  9. import "google/protobuf/field_mask.proto";
  10. import "google/protobuf/timestamp.proto";
  11. option go_package = "gen/api/v1";
  12. service UserService {
  13. // ListUsers returns a list of users.
  14. rpc ListUsers(ListUsersRequest) returns (ListUsersResponse) {
  15. option (google.api.http) = {get: "/api/v1/users"};
  16. }
  17. // SearchUsers searches users by filter.
  18. rpc SearchUsers(SearchUsersRequest) returns (SearchUsersResponse) {
  19. option (google.api.http) = {get: "/api/v1/users:search"};
  20. }
  21. // GetUser gets a user by name.
  22. rpc GetUser(GetUserRequest) returns (User) {
  23. option (google.api.http) = {get: "/api/v1/{name=users/*}"};
  24. option (google.api.method_signature) = "name";
  25. }
  26. // GetUserAvatarBinary gets the avatar of a user.
  27. rpc GetUserAvatarBinary(GetUserAvatarBinaryRequest) returns (google.api.HttpBody) {
  28. option (google.api.http) = {get: "/file/{name=users/*}/avatar"};
  29. option (google.api.method_signature) = "name";
  30. }
  31. // CreateUser creates a new user.
  32. rpc CreateUser(CreateUserRequest) returns (User) {
  33. option (google.api.http) = {
  34. post: "/api/v1/users"
  35. body: "user"
  36. };
  37. option (google.api.method_signature) = "user";
  38. }
  39. // UpdateUser updates a user.
  40. rpc UpdateUser(UpdateUserRequest) returns (User) {
  41. option (google.api.http) = {
  42. patch: "/api/v1/{user.name=users/*}"
  43. body: "user"
  44. };
  45. option (google.api.method_signature) = "user,update_mask";
  46. }
  47. // DeleteUser deletes a user.
  48. rpc DeleteUser(DeleteUserRequest) returns (google.protobuf.Empty) {
  49. option (google.api.http) = {delete: "/api/v1/{name=users/*}"};
  50. option (google.api.method_signature) = "name";
  51. }
  52. // ListAllUserStats returns all user stats.
  53. rpc ListAllUserStats(ListAllUserStatsRequest) returns (ListAllUserStatsResponse) {
  54. option (google.api.http) = {post: "/api/v1/users/-/stats"};
  55. }
  56. // GetUserStats returns the stats of a user.
  57. rpc GetUserStats(GetUserStatsRequest) returns (UserStats) {
  58. option (google.api.http) = {get: "/api/v1/{name=users/*}/stats"};
  59. option (google.api.method_signature) = "name";
  60. }
  61. // GetUserSetting gets the setting of a user.
  62. rpc GetUserSetting(GetUserSettingRequest) returns (UserSetting) {
  63. option (google.api.http) = {get: "/api/v1/{name=users/*}/setting"};
  64. option (google.api.method_signature) = "name";
  65. }
  66. // UpdateUserSetting updates the setting of a user.
  67. rpc UpdateUserSetting(UpdateUserSettingRequest) returns (UserSetting) {
  68. option (google.api.http) = {
  69. patch: "/api/v1/{setting.name=users/*/setting}"
  70. body: "setting"
  71. };
  72. option (google.api.method_signature) = "setting,update_mask";
  73. }
  74. // ListUserAccessTokens returns a list of access tokens for a user.
  75. rpc ListUserAccessTokens(ListUserAccessTokensRequest) returns (ListUserAccessTokensResponse) {
  76. option (google.api.http) = {get: "/api/v1/{name=users/*}/access_tokens"};
  77. option (google.api.method_signature) = "name";
  78. }
  79. // CreateUserAccessToken creates a new access token for a user.
  80. rpc CreateUserAccessToken(CreateUserAccessTokenRequest) returns (UserAccessToken) {
  81. option (google.api.http) = {
  82. post: "/api/v1/{name=users/*}/access_tokens"
  83. body: "*"
  84. };
  85. option (google.api.method_signature) = "name";
  86. }
  87. // DeleteUserAccessToken deletes an access token for a user.
  88. rpc DeleteUserAccessToken(DeleteUserAccessTokenRequest) returns (google.protobuf.Empty) {
  89. option (google.api.http) = {delete: "/api/v1/{name=users/*}/access_tokens/{access_token}"};
  90. option (google.api.method_signature) = "name,access_token";
  91. }
  92. }
  93. message User {
  94. // The name of the user.
  95. // Format: users/{user}. {user} is a system-generated auto-increment id.
  96. string name = 1;
  97. enum Role {
  98. ROLE_UNSPECIFIED = 0;
  99. HOST = 1;
  100. ADMIN = 2;
  101. USER = 3;
  102. }
  103. Role role = 3;
  104. string username = 4;
  105. string email = 5;
  106. string nickname = 6;
  107. string avatar_url = 7;
  108. string description = 8;
  109. string password = 9 [(google.api.field_behavior) = INPUT_ONLY];
  110. State state = 10;
  111. google.protobuf.Timestamp create_time = 11;
  112. google.protobuf.Timestamp update_time = 12;
  113. }
  114. message ListUsersRequest {}
  115. message ListUsersResponse {
  116. repeated User users = 1;
  117. }
  118. message SearchUsersRequest {
  119. // Filter is used to filter users returned in the list.
  120. // Format: "username == 'frank'"
  121. string filter = 1;
  122. }
  123. message SearchUsersResponse {
  124. repeated User users = 1;
  125. }
  126. message GetUserRequest {
  127. // The name of the user.
  128. // Format: users/{user}
  129. string name = 1;
  130. }
  131. message GetUserAvatarBinaryRequest {
  132. // The name of the user.
  133. // Format: users/{user}
  134. string name = 1;
  135. // The raw HTTP body is bound to this field.
  136. google.api.HttpBody http_body = 2;
  137. }
  138. message CreateUserRequest {
  139. User user = 1;
  140. }
  141. message UpdateUserRequest {
  142. User user = 1 [(google.api.field_behavior) = REQUIRED];
  143. google.protobuf.FieldMask update_mask = 2;
  144. }
  145. message DeleteUserRequest {
  146. // The name of the user.
  147. // Format: users/{user}
  148. string name = 1;
  149. }
  150. message UserStats {
  151. // The name of the user.
  152. // Format: users/{user}
  153. string name = 1;
  154. // The timestamps when the memos were displayed.
  155. // We should return raw data to the client, and let the client format the data with the user's timezone.
  156. repeated google.protobuf.Timestamp memo_display_timestamps = 2;
  157. // The stats of memo types.
  158. MemoTypeStats memo_type_stats = 3;
  159. // The count of tags.
  160. // Format: "tag1": 1, "tag2": 2
  161. map<string, int32> tag_count = 4;
  162. message MemoTypeStats {
  163. int32 link_count = 1;
  164. int32 code_count = 2;
  165. int32 todo_count = 3;
  166. int32 undo_count = 4;
  167. }
  168. }
  169. message ListAllUserStatsRequest {}
  170. message ListAllUserStatsResponse {
  171. repeated UserStats user_stats = 1;
  172. }
  173. message GetUserStatsRequest {
  174. // The name of the user.
  175. // Format: users/{user}.
  176. string name = 1;
  177. }
  178. message UserSetting {
  179. // The name of the user.
  180. // Format: users/{user}
  181. string name = 1;
  182. // The preferred locale of the user.
  183. string locale = 2;
  184. // The preferred appearance of the user.
  185. string appearance = 3;
  186. // The default visibility of the memo.
  187. string memo_visibility = 4;
  188. }
  189. message GetUserSettingRequest {
  190. // The name of the user.
  191. // Format: users/{user}
  192. string name = 1;
  193. }
  194. message UpdateUserSettingRequest {
  195. UserSetting setting = 1 [(google.api.field_behavior) = REQUIRED];
  196. google.protobuf.FieldMask update_mask = 2;
  197. }
  198. message UserAccessToken {
  199. string access_token = 1;
  200. string description = 2;
  201. google.protobuf.Timestamp issued_at = 3;
  202. google.protobuf.Timestamp expires_at = 4;
  203. }
  204. message ListUserAccessTokensRequest {
  205. // The name of the user.
  206. // Format: users/{user}
  207. string name = 1;
  208. }
  209. message ListUserAccessTokensResponse {
  210. repeated UserAccessToken access_tokens = 1;
  211. }
  212. message CreateUserAccessTokenRequest {
  213. // The name of the user.
  214. // Format: users/{user}
  215. string name = 1;
  216. string description = 2;
  217. optional google.protobuf.Timestamp expires_at = 3;
  218. }
  219. message DeleteUserAccessTokenRequest {
  220. // The name of the user.
  221. // Format: users/{user}
  222. string name = 1;
  223. // access_token is the access token to delete.
  224. string access_token = 2;
  225. }