Commit c1f55aba authored by Steven's avatar Steven

chore: update user setting api

parent fff42ebc
...@@ -53,8 +53,8 @@ func (s *APIV2Service) UpdateInbox(ctx context.Context, request *apiv2pb.UpdateI ...@@ -53,8 +53,8 @@ func (s *APIV2Service) UpdateInbox(ctx context.Context, request *apiv2pb.UpdateI
update := &store.UpdateInbox{ update := &store.UpdateInbox{
ID: inboxID, ID: inboxID,
} }
for _, path := range request.UpdateMask.Paths { for _, field := range request.UpdateMask.Paths {
if path == "status" { if field == "status" {
if request.Inbox.Status == apiv2pb.Inbox_STATUS_UNSPECIFIED { if request.Inbox.Status == apiv2pb.Inbox_STATUS_UNSPECIFIED {
return nil, status.Errorf(codes.InvalidArgument, "status is required") return nil, status.Errorf(codes.InvalidArgument, "status is required")
} }
......
...@@ -46,8 +46,8 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up ...@@ -46,8 +46,8 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up
} }
// Update system settings. // Update system settings.
for _, path := range request.UpdateMask.Paths { for _, field := range request.UpdateMask.Paths {
if path == "allow_registration" { if field == "allow_registration" {
_, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{ _, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{
Name: "allow-signup", Name: "allow-signup",
Value: strconv.FormatBool(request.SystemInfo.AllowRegistration), Value: strconv.FormatBool(request.SystemInfo.AllowRegistration),
...@@ -55,7 +55,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up ...@@ -55,7 +55,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update allow_registration system setting: %v", err) return nil, status.Errorf(codes.Internal, "failed to update allow_registration system setting: %v", err)
} }
} else if path == "disable_password_login" { } else if field == "disable_password_login" {
_, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{ _, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{
Name: "disable-password-login", Name: "disable-password-login",
Value: strconv.FormatBool(request.SystemInfo.DisablePasswordLogin), Value: strconv.FormatBool(request.SystemInfo.DisablePasswordLogin),
...@@ -63,7 +63,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up ...@@ -63,7 +63,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update disable_password_login system setting: %v", err) return nil, status.Errorf(codes.Internal, "failed to update disable_password_login system setting: %v", err)
} }
} else if path == "additional_script" { } else if field == "additional_script" {
_, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{ _, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{
Name: "additional-script", Name: "additional-script",
Value: request.SystemInfo.AdditionalScript, Value: request.SystemInfo.AdditionalScript,
...@@ -71,7 +71,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up ...@@ -71,7 +71,7 @@ func (s *APIV2Service) UpdateSystemInfo(ctx context.Context, request *apiv2pb.Up
if err != nil { if err != nil {
return nil, status.Errorf(codes.Internal, "failed to update additional_script system setting: %v", err) return nil, status.Errorf(codes.Internal, "failed to update additional_script system setting: %v", err)
} }
} else if path == "additional_style" { } else if field == "additional_style" {
_, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{ _, err := s.Store.UpsertSystemSetting(ctx, &store.SystemSetting{
Name: "additional-style", Name: "additional-style",
Value: request.SystemInfo.AdditionalStyle, Value: request.SystemInfo.AdditionalStyle,
......
...@@ -187,6 +187,94 @@ func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUs ...@@ -187,6 +187,94 @@ func (s *APIV2Service) DeleteUser(ctx context.Context, request *apiv2pb.DeleteUs
return &apiv2pb.DeleteUserResponse{}, nil return &apiv2pb.DeleteUserResponse{}, nil
} }
func (s *APIV2Service) GetUserSettings(ctx context.Context, _ *apiv2pb.GetUserSettingsRequest) (*apiv2pb.GetUserSettingsResponse, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
}
userSettings, err := s.Store.ListUserSettingsV1(ctx, &store.FindUserSettingV1{
UserID: &user.ID,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to list user settings: %v", err)
}
userSetting := &apiv2pb.UserSetting{}
for _, setting := range userSettings {
if setting.Key == storepb.UserSettingKey_USER_SETTING_LOCALE {
userSetting.Locale = setting.GetLocale()
} else if setting.Key == storepb.UserSettingKey_USER_SETTING_APPEARANCE {
userSetting.Appearance = setting.GetAppearance()
} else if setting.Key == storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY {
userSetting.MemoVisibility = setting.GetMemoVisibility()
} else if setting.Key == storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID {
userSetting.TelegramUserId = setting.GetTelegramUserId()
}
}
return &apiv2pb.GetUserSettingsResponse{
Settings: userSetting,
}, nil
}
func (s *APIV2Service) UpdateUserSettings(ctx context.Context, request *apiv2pb.UpdateUserSettingsRequest) (*apiv2pb.UpdateUserSettingsResponse, error) {
user, err := getCurrentUser(ctx, s.Store)
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get current user: %v", err)
}
if request.UpdateMask == nil || len(request.UpdateMask.Paths) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "update mask is empty")
}
for _, field := range request.UpdateMask.Paths {
if field == "locale" {
if _, err := s.Store.UpsertUserSettingV1(ctx, &storepb.UserSetting{
UserId: user.ID,
Key: storepb.UserSettingKey_USER_SETTING_LOCALE,
Value: &storepb.UserSetting_Locale{
Locale: request.Settings.Locale,
},
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
} else if field == "appearance" {
if _, err := s.Store.UpsertUserSettingV1(ctx, &storepb.UserSetting{
UserId: user.ID,
Key: storepb.UserSettingKey_USER_SETTING_APPEARANCE,
Value: &storepb.UserSetting_Appearance{
Appearance: request.Settings.Appearance,
},
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
} else if field == "memo_visibility" {
if _, err := s.Store.UpsertUserSettingV1(ctx, &storepb.UserSetting{
UserId: user.ID,
Key: storepb.UserSettingKey_USER_SETTING_MEMO_VISIBILITY,
Value: &storepb.UserSetting_MemoVisibility{
MemoVisibility: request.Settings.MemoVisibility,
},
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
} else if field == "telegram_user_id" {
if _, err := s.Store.UpsertUserSettingV1(ctx, &storepb.UserSetting{
UserId: user.ID,
Key: storepb.UserSettingKey_USER_SETTING_TELEGRAM_USER_ID,
Value: &storepb.UserSetting_TelegramUserId{
TelegramUserId: request.Settings.TelegramUserId,
},
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
} else {
return nil, status.Errorf(codes.InvalidArgument, "invalid update path: %s", field)
}
}
return &apiv2pb.UpdateUserSettingsResponse{}, nil
}
func (s *APIV2Service) ListUserAccessTokens(ctx context.Context, request *apiv2pb.ListUserAccessTokensRequest) (*apiv2pb.ListUserAccessTokensResponse, error) { func (s *APIV2Service) ListUserAccessTokens(ctx context.Context, request *apiv2pb.ListUserAccessTokensRequest) (*apiv2pb.ListUserAccessTokensResponse, error) {
user, err := getCurrentUser(ctx, s.Store) user, err := getCurrentUser(ctx, s.Store)
if err != nil { if err != nil {
......
...@@ -76,8 +76,8 @@ func (s *APIV2Service) UpdateWebhook(ctx context.Context, request *apiv2pb.Updat ...@@ -76,8 +76,8 @@ func (s *APIV2Service) UpdateWebhook(ctx context.Context, request *apiv2pb.Updat
} }
update := &store.UpdateWebhook{} update := &store.UpdateWebhook{}
for _, path := range request.UpdateMask.Paths { for _, field := range request.UpdateMask.Paths {
switch path { switch field {
case "row_status": case "row_status":
rowStatus := storepb.RowStatus(storepb.RowStatus_value[request.Webhook.RowStatus.String()]) rowStatus := storepb.RowStatus(storepb.RowStatus_value[request.Webhook.RowStatus.String()])
update.RowStatus = &rowStatus update.RowStatus = &rowStatus
......
...@@ -38,6 +38,17 @@ service UserService { ...@@ -38,6 +38,17 @@ service UserService {
option (google.api.http) = {delete: "/api/v2/{name=users/*}"}; option (google.api.http) = {delete: "/api/v2/{name=users/*}"};
option (google.api.method_signature) = "name"; option (google.api.method_signature) = "name";
} }
rpc GetUserSettings(GetUserSettingsRequest) returns (GetUserSettingsResponse) {
option (google.api.http) = {get: "/api/v2/{name=users/*}/settings"};
option (google.api.method_signature) = "name";
}
rpc UpdateUserSettings(UpdateUserSettingsRequest) returns (UpdateUserSettingsResponse) {
option (google.api.http) = {
patch: "/api/v2/{settings.name=users/*/settings}"
body: "settings"
};
option (google.api.method_signature) = "settings,update_mask";
}
// ListUserAccessTokens returns a list of access tokens for a user. // ListUserAccessTokens returns a list of access tokens for a user.
rpc ListUserAccessTokens(ListUserAccessTokensRequest) returns (ListUserAccessTokensResponse) { rpc ListUserAccessTokens(ListUserAccessTokensRequest) returns (ListUserAccessTokensResponse) {
option (google.api.http) = {get: "/api/v2/{name=users/*}/access_tokens"}; option (google.api.http) = {get: "/api/v2/{name=users/*}/access_tokens"};
...@@ -124,6 +135,40 @@ message DeleteUserRequest { ...@@ -124,6 +135,40 @@ message DeleteUserRequest {
message DeleteUserResponse {} message DeleteUserResponse {}
message UserSetting {
// The name of the user.
// Format: users/{username}
string name = 1;
// The preferred locale of the user.
string locale = 2;
// The preferred appearance of the user.
string appearance = 3;
// The default visibility of the memo.
string memo_visibility = 4;
// The telegram user id of the user.
string telegram_user_id = 5;
}
message GetUserSettingsRequest {
// The name of the user.
// Format: users/{username}
string name = 1;
}
message GetUserSettingsResponse {
UserSetting settings = 1;
}
message UpdateUserSettingsRequest {
UserSetting settings = 1 [(google.api.field_behavior) = REQUIRED];
google.protobuf.FieldMask update_mask = 2;
}
message UpdateUserSettingsResponse {
UserSetting settings = 1;
}
message UserAccessToken { message UserAccessToken {
string access_token = 1; string access_token = 1;
string description = 2; string description = 2;
......
...@@ -27,12 +27,17 @@ ...@@ -27,12 +27,17 @@
- [DeleteUserResponse](#memos-api-v2-DeleteUserResponse) - [DeleteUserResponse](#memos-api-v2-DeleteUserResponse)
- [GetUserRequest](#memos-api-v2-GetUserRequest) - [GetUserRequest](#memos-api-v2-GetUserRequest)
- [GetUserResponse](#memos-api-v2-GetUserResponse) - [GetUserResponse](#memos-api-v2-GetUserResponse)
- [GetUserSettingsRequest](#memos-api-v2-GetUserSettingsRequest)
- [GetUserSettingsResponse](#memos-api-v2-GetUserSettingsResponse)
- [ListUserAccessTokensRequest](#memos-api-v2-ListUserAccessTokensRequest) - [ListUserAccessTokensRequest](#memos-api-v2-ListUserAccessTokensRequest)
- [ListUserAccessTokensResponse](#memos-api-v2-ListUserAccessTokensResponse) - [ListUserAccessTokensResponse](#memos-api-v2-ListUserAccessTokensResponse)
- [UpdateUserRequest](#memos-api-v2-UpdateUserRequest) - [UpdateUserRequest](#memos-api-v2-UpdateUserRequest)
- [UpdateUserResponse](#memos-api-v2-UpdateUserResponse) - [UpdateUserResponse](#memos-api-v2-UpdateUserResponse)
- [UpdateUserSettingsRequest](#memos-api-v2-UpdateUserSettingsRequest)
- [UpdateUserSettingsResponse](#memos-api-v2-UpdateUserSettingsResponse)
- [User](#memos-api-v2-User) - [User](#memos-api-v2-User)
- [UserAccessToken](#memos-api-v2-UserAccessToken) - [UserAccessToken](#memos-api-v2-UserAccessToken)
- [UserSetting](#memos-api-v2-UserSetting)
- [User.Role](#memos-api-v2-User-Role) - [User.Role](#memos-api-v2-User-Role)
...@@ -431,6 +436,36 @@ ...@@ -431,6 +436,36 @@
<a name="memos-api-v2-GetUserSettingsRequest"></a>
### GetUserSettingsRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the user. Format: users/{username} |
<a name="memos-api-v2-GetUserSettingsResponse"></a>
### GetUserSettingsResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| settings | [UserSetting](#memos-api-v2-UserSetting) | | |
<a name="memos-api-v2-ListUserAccessTokensRequest"></a> <a name="memos-api-v2-ListUserAccessTokensRequest"></a>
### ListUserAccessTokensRequest ### ListUserAccessTokensRequest
...@@ -492,6 +527,37 @@ ...@@ -492,6 +527,37 @@
<a name="memos-api-v2-UpdateUserSettingsRequest"></a>
### UpdateUserSettingsRequest
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| settings | [UserSetting](#memos-api-v2-UserSetting) | | |
| update_mask | [google.protobuf.FieldMask](#google-protobuf-FieldMask) | | |
<a name="memos-api-v2-UpdateUserSettingsResponse"></a>
### UpdateUserSettingsResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| settings | [UserSetting](#memos-api-v2-UserSetting) | | |
<a name="memos-api-v2-User"></a> <a name="memos-api-v2-User"></a>
### User ### User
...@@ -534,6 +600,25 @@ ...@@ -534,6 +600,25 @@
<a name="memos-api-v2-UserSetting"></a>
### UserSetting
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| name | [string](#string) | | The name of the user. Format: users/{username} |
| locale | [string](#string) | | The preferred locale of the user. |
| appearance | [string](#string) | | The preferred appearance of the user. |
| memo_visibility | [string](#string) | | The default visibility of the memo. |
| telegram_user_id | [string](#string) | | The telegram user id of the user. |
<a name="memos-api-v2-User-Role"></a> <a name="memos-api-v2-User-Role"></a>
...@@ -565,6 +650,8 @@ ...@@ -565,6 +650,8 @@
| CreateUser | [CreateUserRequest](#memos-api-v2-CreateUserRequest) | [CreateUserResponse](#memos-api-v2-CreateUserResponse) | CreateUser creates a new user. | | CreateUser | [CreateUserRequest](#memos-api-v2-CreateUserRequest) | [CreateUserResponse](#memos-api-v2-CreateUserResponse) | CreateUser creates a new user. |
| UpdateUser | [UpdateUserRequest](#memos-api-v2-UpdateUserRequest) | [UpdateUserResponse](#memos-api-v2-UpdateUserResponse) | UpdateUser updates a user. | | UpdateUser | [UpdateUserRequest](#memos-api-v2-UpdateUserRequest) | [UpdateUserResponse](#memos-api-v2-UpdateUserResponse) | UpdateUser updates a user. |
| DeleteUser | [DeleteUserRequest](#memos-api-v2-DeleteUserRequest) | [DeleteUserResponse](#memos-api-v2-DeleteUserResponse) | DeleteUser deletes a user. | | DeleteUser | [DeleteUserRequest](#memos-api-v2-DeleteUserRequest) | [DeleteUserResponse](#memos-api-v2-DeleteUserResponse) | DeleteUser deletes a user. |
| GetUserSettings | [GetUserSettingsRequest](#memos-api-v2-GetUserSettingsRequest) | [GetUserSettingsResponse](#memos-api-v2-GetUserSettingsResponse) | |
| UpdateUserSettings | [UpdateUserSettingsRequest](#memos-api-v2-UpdateUserSettingsRequest) | [UpdateUserSettingsResponse](#memos-api-v2-UpdateUserSettingsResponse) | |
| ListUserAccessTokens | [ListUserAccessTokensRequest](#memos-api-v2-ListUserAccessTokensRequest) | [ListUserAccessTokensResponse](#memos-api-v2-ListUserAccessTokensResponse) | ListUserAccessTokens returns a list of access tokens for a user. | | ListUserAccessTokens | [ListUserAccessTokensRequest](#memos-api-v2-ListUserAccessTokensRequest) | [ListUserAccessTokensResponse](#memos-api-v2-ListUserAccessTokensResponse) | ListUserAccessTokens returns a list of access tokens for a user. |
| CreateUserAccessToken | [CreateUserAccessTokenRequest](#memos-api-v2-CreateUserAccessTokenRequest) | [CreateUserAccessTokenResponse](#memos-api-v2-CreateUserAccessTokenResponse) | CreateUserAccessToken creates a new access token for a user. | | CreateUserAccessToken | [CreateUserAccessTokenRequest](#memos-api-v2-CreateUserAccessTokenRequest) | [CreateUserAccessTokenResponse](#memos-api-v2-CreateUserAccessTokenResponse) | CreateUserAccessToken creates a new access token for a user. |
| DeleteUserAccessToken | [DeleteUserAccessTokenRequest](#memos-api-v2-DeleteUserAccessTokenRequest) | [DeleteUserAccessTokenResponse](#memos-api-v2-DeleteUserAccessTokenResponse) | DeleteUserAccessToken deletes an access token for a user. | | DeleteUserAccessToken | [DeleteUserAccessTokenRequest](#memos-api-v2-DeleteUserAccessTokenRequest) | [DeleteUserAccessTokenResponse](#memos-api-v2-DeleteUserAccessTokenResponse) | DeleteUserAccessToken deletes an access token for a user. |
......
This diff is collapsed.
This diff is collapsed.
...@@ -23,6 +23,8 @@ const ( ...@@ -23,6 +23,8 @@ const (
UserService_CreateUser_FullMethodName = "/memos.api.v2.UserService/CreateUser" UserService_CreateUser_FullMethodName = "/memos.api.v2.UserService/CreateUser"
UserService_UpdateUser_FullMethodName = "/memos.api.v2.UserService/UpdateUser" UserService_UpdateUser_FullMethodName = "/memos.api.v2.UserService/UpdateUser"
UserService_DeleteUser_FullMethodName = "/memos.api.v2.UserService/DeleteUser" UserService_DeleteUser_FullMethodName = "/memos.api.v2.UserService/DeleteUser"
UserService_GetUserSettings_FullMethodName = "/memos.api.v2.UserService/GetUserSettings"
UserService_UpdateUserSettings_FullMethodName = "/memos.api.v2.UserService/UpdateUserSettings"
UserService_ListUserAccessTokens_FullMethodName = "/memos.api.v2.UserService/ListUserAccessTokens" UserService_ListUserAccessTokens_FullMethodName = "/memos.api.v2.UserService/ListUserAccessTokens"
UserService_CreateUserAccessToken_FullMethodName = "/memos.api.v2.UserService/CreateUserAccessToken" UserService_CreateUserAccessToken_FullMethodName = "/memos.api.v2.UserService/CreateUserAccessToken"
UserService_DeleteUserAccessToken_FullMethodName = "/memos.api.v2.UserService/DeleteUserAccessToken" UserService_DeleteUserAccessToken_FullMethodName = "/memos.api.v2.UserService/DeleteUserAccessToken"
...@@ -40,6 +42,8 @@ type UserServiceClient interface { ...@@ -40,6 +42,8 @@ type UserServiceClient interface {
UpdateUser(ctx context.Context, in *UpdateUserRequest, opts ...grpc.CallOption) (*UpdateUserResponse, error) UpdateUser(ctx context.Context, in *UpdateUserRequest, opts ...grpc.CallOption) (*UpdateUserResponse, error)
// DeleteUser deletes a user. // DeleteUser deletes a user.
DeleteUser(ctx context.Context, in *DeleteUserRequest, opts ...grpc.CallOption) (*DeleteUserResponse, error) DeleteUser(ctx context.Context, in *DeleteUserRequest, opts ...grpc.CallOption) (*DeleteUserResponse, error)
GetUserSettings(ctx context.Context, in *GetUserSettingsRequest, opts ...grpc.CallOption) (*GetUserSettingsResponse, error)
UpdateUserSettings(ctx context.Context, in *UpdateUserSettingsRequest, opts ...grpc.CallOption) (*UpdateUserSettingsResponse, error)
// ListUserAccessTokens returns a list of access tokens for a user. // ListUserAccessTokens returns a list of access tokens for a user.
ListUserAccessTokens(ctx context.Context, in *ListUserAccessTokensRequest, opts ...grpc.CallOption) (*ListUserAccessTokensResponse, error) ListUserAccessTokens(ctx context.Context, in *ListUserAccessTokensRequest, opts ...grpc.CallOption) (*ListUserAccessTokensResponse, error)
// CreateUserAccessToken creates a new access token for a user. // CreateUserAccessToken creates a new access token for a user.
...@@ -92,6 +96,24 @@ func (c *userServiceClient) DeleteUser(ctx context.Context, in *DeleteUserReques ...@@ -92,6 +96,24 @@ func (c *userServiceClient) DeleteUser(ctx context.Context, in *DeleteUserReques
return out, nil return out, nil
} }
func (c *userServiceClient) GetUserSettings(ctx context.Context, in *GetUserSettingsRequest, opts ...grpc.CallOption) (*GetUserSettingsResponse, error) {
out := new(GetUserSettingsResponse)
err := c.cc.Invoke(ctx, UserService_GetUserSettings_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *userServiceClient) UpdateUserSettings(ctx context.Context, in *UpdateUserSettingsRequest, opts ...grpc.CallOption) (*UpdateUserSettingsResponse, error) {
out := new(UpdateUserSettingsResponse)
err := c.cc.Invoke(ctx, UserService_UpdateUserSettings_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *userServiceClient) ListUserAccessTokens(ctx context.Context, in *ListUserAccessTokensRequest, opts ...grpc.CallOption) (*ListUserAccessTokensResponse, error) { func (c *userServiceClient) ListUserAccessTokens(ctx context.Context, in *ListUserAccessTokensRequest, opts ...grpc.CallOption) (*ListUserAccessTokensResponse, error) {
out := new(ListUserAccessTokensResponse) out := new(ListUserAccessTokensResponse)
err := c.cc.Invoke(ctx, UserService_ListUserAccessTokens_FullMethodName, in, out, opts...) err := c.cc.Invoke(ctx, UserService_ListUserAccessTokens_FullMethodName, in, out, opts...)
...@@ -131,6 +153,8 @@ type UserServiceServer interface { ...@@ -131,6 +153,8 @@ type UserServiceServer interface {
UpdateUser(context.Context, *UpdateUserRequest) (*UpdateUserResponse, error) UpdateUser(context.Context, *UpdateUserRequest) (*UpdateUserResponse, error)
// DeleteUser deletes a user. // DeleteUser deletes a user.
DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error) DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error)
GetUserSettings(context.Context, *GetUserSettingsRequest) (*GetUserSettingsResponse, error)
UpdateUserSettings(context.Context, *UpdateUserSettingsRequest) (*UpdateUserSettingsResponse, error)
// ListUserAccessTokens returns a list of access tokens for a user. // ListUserAccessTokens returns a list of access tokens for a user.
ListUserAccessTokens(context.Context, *ListUserAccessTokensRequest) (*ListUserAccessTokensResponse, error) ListUserAccessTokens(context.Context, *ListUserAccessTokensRequest) (*ListUserAccessTokensResponse, error)
// CreateUserAccessToken creates a new access token for a user. // CreateUserAccessToken creates a new access token for a user.
...@@ -156,6 +180,12 @@ func (UnimplementedUserServiceServer) UpdateUser(context.Context, *UpdateUserReq ...@@ -156,6 +180,12 @@ func (UnimplementedUserServiceServer) UpdateUser(context.Context, *UpdateUserReq
func (UnimplementedUserServiceServer) DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error) { func (UnimplementedUserServiceServer) DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteUser not implemented") return nil, status.Errorf(codes.Unimplemented, "method DeleteUser not implemented")
} }
func (UnimplementedUserServiceServer) GetUserSettings(context.Context, *GetUserSettingsRequest) (*GetUserSettingsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetUserSettings not implemented")
}
func (UnimplementedUserServiceServer) UpdateUserSettings(context.Context, *UpdateUserSettingsRequest) (*UpdateUserSettingsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateUserSettings not implemented")
}
func (UnimplementedUserServiceServer) ListUserAccessTokens(context.Context, *ListUserAccessTokensRequest) (*ListUserAccessTokensResponse, error) { func (UnimplementedUserServiceServer) ListUserAccessTokens(context.Context, *ListUserAccessTokensRequest) (*ListUserAccessTokensResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListUserAccessTokens not implemented") return nil, status.Errorf(codes.Unimplemented, "method ListUserAccessTokens not implemented")
} }
...@@ -250,6 +280,42 @@ func _UserService_DeleteUser_Handler(srv interface{}, ctx context.Context, dec f ...@@ -250,6 +280,42 @@ func _UserService_DeleteUser_Handler(srv interface{}, ctx context.Context, dec f
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _UserService_GetUserSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUserSettingsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UserServiceServer).GetUserSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: UserService_GetUserSettings_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UserServiceServer).GetUserSettings(ctx, req.(*GetUserSettingsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _UserService_UpdateUserSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateUserSettingsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UserServiceServer).UpdateUserSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: UserService_UpdateUserSettings_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UserServiceServer).UpdateUserSettings(ctx, req.(*UpdateUserSettingsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _UserService_ListUserAccessTokens_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _UserService_ListUserAccessTokens_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListUserAccessTokensRequest) in := new(ListUserAccessTokensRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
...@@ -327,6 +393,14 @@ var UserService_ServiceDesc = grpc.ServiceDesc{ ...@@ -327,6 +393,14 @@ var UserService_ServiceDesc = grpc.ServiceDesc{
MethodName: "DeleteUser", MethodName: "DeleteUser",
Handler: _UserService_DeleteUser_Handler, Handler: _UserService_DeleteUser_Handler,
}, },
{
MethodName: "GetUserSettings",
Handler: _UserService_GetUserSettings_Handler,
},
{
MethodName: "UpdateUserSettings",
Handler: _UserService_UpdateUserSettings_Handler,
},
{ {
MethodName: "ListUserAccessTokens", MethodName: "ListUserAccessTokens",
Handler: _UserService_ListUserAccessTokens_Handler, Handler: _UserService_ListUserAccessTokens_Handler,
......
...@@ -266,6 +266,10 @@ ...@@ -266,6 +266,10 @@
| user_id | [int32](#int32) | | | | user_id | [int32](#int32) | | |
| key | [UserSettingKey](#memos-store-UserSettingKey) | | | | key | [UserSettingKey](#memos-store-UserSettingKey) | | |
| access_tokens | [AccessTokensUserSetting](#memos-store-AccessTokensUserSetting) | | | | access_tokens | [AccessTokensUserSetting](#memos-store-AccessTokensUserSetting) | | |
| locale | [string](#string) | | |
| appearance | [string](#string) | | |
| memo_visibility | [string](#string) | | |
| telegram_user_id | [string](#string) | | |
...@@ -283,6 +287,10 @@ ...@@ -283,6 +287,10 @@
| ---- | ------ | ----------- | | ---- | ------ | ----------- |
| USER_SETTING_KEY_UNSPECIFIED | 0 | | | USER_SETTING_KEY_UNSPECIFIED | 0 | |
| USER_SETTING_ACCESS_TOKENS | 1 | Access tokens for the user. | | USER_SETTING_ACCESS_TOKENS | 1 | Access tokens for the user. |
| USER_SETTING_LOCALE | 2 | The locale of the user. |
| USER_SETTING_APPEARANCE | 3 | The appearance of the user. |
| USER_SETTING_MEMO_VISIBILITY | 4 | The visibility of the memo. |
| USER_SETTING_TELEGRAM_USER_ID | 5 | The telegram user id of the user. |
......
This diff is collapsed.
...@@ -11,6 +11,10 @@ message UserSetting { ...@@ -11,6 +11,10 @@ message UserSetting {
oneof value { oneof value {
AccessTokensUserSetting access_tokens = 3; AccessTokensUserSetting access_tokens = 3;
string locale = 4;
string appearance = 5;
string memo_visibility = 6;
string telegram_user_id = 7;
} }
} }
...@@ -19,6 +23,18 @@ enum UserSettingKey { ...@@ -19,6 +23,18 @@ enum UserSettingKey {
// Access tokens for the user. // Access tokens for the user.
USER_SETTING_ACCESS_TOKENS = 1; USER_SETTING_ACCESS_TOKENS = 1;
// The locale of the user.
USER_SETTING_LOCALE = 2;
// The appearance of the user.
USER_SETTING_APPEARANCE = 3;
// The visibility of the memo.
USER_SETTING_MEMO_VISIBILITY = 4;
// The telegram user id of the user.
USER_SETTING_TELEGRAM_USER_ID = 5;
} }
message AccessTokensUserSetting { message AccessTokensUserSetting {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment