refactor: general user setting

pull/4784/head^2
Johnny 7 days ago
parent 9b15936873
commit e6e460493c

@ -22,85 +22,75 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
) )
type UserSettingKey int32 type UserSetting_Key int32
const ( const (
UserSettingKey_USER_SETTING_KEY_UNSPECIFIED UserSettingKey = 0 UserSetting_KEY_UNSPECIFIED UserSetting_Key = 0
// General user settings.
UserSetting_GENERAL UserSetting_Key = 1
// User authentication sessions.
UserSetting_SESSIONS UserSetting_Key = 2
// Access tokens for the user. // Access tokens for the user.
UserSettingKey_ACCESS_TOKENS UserSettingKey = 1 UserSetting_ACCESS_TOKENS UserSetting_Key = 3
// The locale of the user.
UserSettingKey_LOCALE UserSettingKey = 2
// The appearance of the user.
UserSettingKey_APPEARANCE UserSettingKey = 3
// The visibility of the memo.
UserSettingKey_MEMO_VISIBILITY UserSettingKey = 4
// The shortcuts of the user. // The shortcuts of the user.
UserSettingKey_SHORTCUTS UserSettingKey = 5 UserSetting_SHORTCUTS UserSetting_Key = 4
// User authentication sessions.
UserSettingKey_SESSIONS UserSettingKey = 6
) )
// Enum value maps for UserSettingKey. // Enum value maps for UserSetting_Key.
var ( var (
UserSettingKey_name = map[int32]string{ UserSetting_Key_name = map[int32]string{
0: "USER_SETTING_KEY_UNSPECIFIED", 0: "KEY_UNSPECIFIED",
1: "ACCESS_TOKENS", 1: "GENERAL",
2: "LOCALE", 2: "SESSIONS",
3: "APPEARANCE", 3: "ACCESS_TOKENS",
4: "MEMO_VISIBILITY", 4: "SHORTCUTS",
5: "SHORTCUTS", }
6: "SESSIONS", UserSetting_Key_value = map[string]int32{
} "KEY_UNSPECIFIED": 0,
UserSettingKey_value = map[string]int32{ "GENERAL": 1,
"USER_SETTING_KEY_UNSPECIFIED": 0, "SESSIONS": 2,
"ACCESS_TOKENS": 1, "ACCESS_TOKENS": 3,
"LOCALE": 2, "SHORTCUTS": 4,
"APPEARANCE": 3,
"MEMO_VISIBILITY": 4,
"SHORTCUTS": 5,
"SESSIONS": 6,
} }
) )
func (x UserSettingKey) Enum() *UserSettingKey { func (x UserSetting_Key) Enum() *UserSetting_Key {
p := new(UserSettingKey) p := new(UserSetting_Key)
*p = x *p = x
return p return p
} }
func (x UserSettingKey) String() string { func (x UserSetting_Key) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
} }
func (UserSettingKey) Descriptor() protoreflect.EnumDescriptor { func (UserSetting_Key) Descriptor() protoreflect.EnumDescriptor {
return file_store_user_setting_proto_enumTypes[0].Descriptor() return file_store_user_setting_proto_enumTypes[0].Descriptor()
} }
func (UserSettingKey) Type() protoreflect.EnumType { func (UserSetting_Key) Type() protoreflect.EnumType {
return &file_store_user_setting_proto_enumTypes[0] return &file_store_user_setting_proto_enumTypes[0]
} }
func (x UserSettingKey) Number() protoreflect.EnumNumber { func (x UserSetting_Key) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x) return protoreflect.EnumNumber(x)
} }
// Deprecated: Use UserSettingKey.Descriptor instead. // Deprecated: Use UserSetting_Key.Descriptor instead.
func (UserSettingKey) EnumDescriptor() ([]byte, []int) { func (UserSetting_Key) EnumDescriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{0} return file_store_user_setting_proto_rawDescGZIP(), []int{0, 0}
} }
type UserSetting struct { type UserSetting struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
UserId int32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` UserId int32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
Key UserSettingKey `protobuf:"varint,2,opt,name=key,proto3,enum=memos.store.UserSettingKey" json:"key,omitempty"` Key UserSetting_Key `protobuf:"varint,2,opt,name=key,proto3,enum=memos.store.UserSetting_Key" json:"key,omitempty"`
// Types that are valid to be assigned to Value: // Types that are valid to be assigned to Value:
// //
// *UserSetting_General
// *UserSetting_Sessions
// *UserSetting_AccessTokens // *UserSetting_AccessTokens
// *UserSetting_Locale
// *UserSetting_Appearance
// *UserSetting_MemoVisibility
// *UserSetting_Shortcuts // *UserSetting_Shortcuts
// *UserSetting_Sessions
Value isUserSetting_Value `protobuf_oneof:"value"` Value isUserSetting_Value `protobuf_oneof:"value"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -143,11 +133,11 @@ func (x *UserSetting) GetUserId() int32 {
return 0 return 0
} }
func (x *UserSetting) GetKey() UserSettingKey { func (x *UserSetting) GetKey() UserSetting_Key {
if x != nil { if x != nil {
return x.Key return x.Key
} }
return UserSettingKey_USER_SETTING_KEY_UNSPECIFIED return UserSetting_KEY_UNSPECIFIED
} }
func (x *UserSetting) GetValue() isUserSetting_Value { func (x *UserSetting) GetValue() isUserSetting_Value {
@ -157,40 +147,31 @@ func (x *UserSetting) GetValue() isUserSetting_Value {
return nil return nil
} }
func (x *UserSetting) GetAccessTokens() *AccessTokensUserSetting { func (x *UserSetting) GetGeneral() *GeneralUserSetting {
if x != nil { if x != nil {
if x, ok := x.Value.(*UserSetting_AccessTokens); ok { if x, ok := x.Value.(*UserSetting_General); ok {
return x.AccessTokens return x.General
} }
} }
return nil return nil
} }
func (x *UserSetting) GetLocale() string { func (x *UserSetting) GetSessions() *SessionsUserSetting {
if x != nil {
if x, ok := x.Value.(*UserSetting_Locale); ok {
return x.Locale
}
}
return ""
}
func (x *UserSetting) GetAppearance() string {
if x != nil { if x != nil {
if x, ok := x.Value.(*UserSetting_Appearance); ok { if x, ok := x.Value.(*UserSetting_Sessions); ok {
return x.Appearance return x.Sessions
} }
} }
return "" return nil
} }
func (x *UserSetting) GetMemoVisibility() string { func (x *UserSetting) GetAccessTokens() *AccessTokensUserSetting {
if x != nil { if x != nil {
if x, ok := x.Value.(*UserSetting_MemoVisibility); ok { if x, ok := x.Value.(*UserSetting_AccessTokens); ok {
return x.MemoVisibility return x.AccessTokens
} }
} }
return "" return nil
} }
func (x *UserSetting) GetShortcuts() *ShortcutsUserSetting { func (x *UserSetting) GetShortcuts() *ShortcutsUserSetting {
@ -202,76 +183,60 @@ func (x *UserSetting) GetShortcuts() *ShortcutsUserSetting {
return nil return nil
} }
func (x *UserSetting) GetSessions() *SessionsUserSetting {
if x != nil {
if x, ok := x.Value.(*UserSetting_Sessions); ok {
return x.Sessions
}
}
return nil
}
type isUserSetting_Value interface { type isUserSetting_Value interface {
isUserSetting_Value() isUserSetting_Value()
} }
type UserSetting_AccessTokens struct { type UserSetting_General struct {
AccessTokens *AccessTokensUserSetting `protobuf:"bytes,3,opt,name=access_tokens,json=accessTokens,proto3,oneof"` General *GeneralUserSetting `protobuf:"bytes,3,opt,name=general,proto3,oneof"`
}
type UserSetting_Locale struct {
Locale string `protobuf:"bytes,4,opt,name=locale,proto3,oneof"`
} }
type UserSetting_Appearance struct { type UserSetting_Sessions struct {
Appearance string `protobuf:"bytes,5,opt,name=appearance,proto3,oneof"` Sessions *SessionsUserSetting `protobuf:"bytes,4,opt,name=sessions,proto3,oneof"`
} }
type UserSetting_MemoVisibility struct { type UserSetting_AccessTokens struct {
MemoVisibility string `protobuf:"bytes,6,opt,name=memo_visibility,json=memoVisibility,proto3,oneof"` AccessTokens *AccessTokensUserSetting `protobuf:"bytes,5,opt,name=access_tokens,json=accessTokens,proto3,oneof"`
} }
type UserSetting_Shortcuts struct { type UserSetting_Shortcuts struct {
Shortcuts *ShortcutsUserSetting `protobuf:"bytes,7,opt,name=shortcuts,proto3,oneof"` Shortcuts *ShortcutsUserSetting `protobuf:"bytes,6,opt,name=shortcuts,proto3,oneof"`
} }
type UserSetting_Sessions struct { func (*UserSetting_General) isUserSetting_Value() {}
Sessions *SessionsUserSetting `protobuf:"bytes,8,opt,name=sessions,proto3,oneof"`
}
func (*UserSetting_AccessTokens) isUserSetting_Value() {}
func (*UserSetting_Locale) isUserSetting_Value() {} func (*UserSetting_Sessions) isUserSetting_Value() {}
func (*UserSetting_Appearance) isUserSetting_Value() {}
func (*UserSetting_MemoVisibility) isUserSetting_Value() {} func (*UserSetting_AccessTokens) isUserSetting_Value() {}
func (*UserSetting_Shortcuts) isUserSetting_Value() {} func (*UserSetting_Shortcuts) isUserSetting_Value() {}
func (*UserSetting_Sessions) isUserSetting_Value() {} type GeneralUserSetting struct {
state protoimpl.MessageState `protogen:"open.v1"`
type AccessTokensUserSetting struct { // The user's locale.
state protoimpl.MessageState `protogen:"open.v1"` Locale string `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
AccessTokens []*AccessTokensUserSetting_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"` // The user's appearance setting.
unknownFields protoimpl.UnknownFields Appearance string `protobuf:"bytes,2,opt,name=appearance,proto3" json:"appearance,omitempty"`
sizeCache protoimpl.SizeCache // The user's memo visibility setting.
} MemoVisibility string `protobuf:"bytes,3,opt,name=memo_visibility,json=memoVisibility,proto3" json:"memo_visibility,omitempty"`
unknownFields protoimpl.UnknownFields
func (x *AccessTokensUserSetting) Reset() { sizeCache protoimpl.SizeCache
*x = AccessTokensUserSetting{} }
func (x *GeneralUserSetting) Reset() {
*x = GeneralUserSetting{}
mi := &file_store_user_setting_proto_msgTypes[1] mi := &file_store_user_setting_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
func (x *AccessTokensUserSetting) String() string { func (x *GeneralUserSetting) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*AccessTokensUserSetting) ProtoMessage() {} func (*GeneralUserSetting) ProtoMessage() {}
func (x *AccessTokensUserSetting) ProtoReflect() protoreflect.Message { func (x *GeneralUserSetting) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[1] mi := &file_store_user_setting_proto_msgTypes[1]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -283,60 +248,30 @@ func (x *AccessTokensUserSetting) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use AccessTokensUserSetting.ProtoReflect.Descriptor instead. // Deprecated: Use GeneralUserSetting.ProtoReflect.Descriptor instead.
func (*AccessTokensUserSetting) Descriptor() ([]byte, []int) { func (*GeneralUserSetting) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{1} return file_store_user_setting_proto_rawDescGZIP(), []int{1}
} }
func (x *AccessTokensUserSetting) GetAccessTokens() []*AccessTokensUserSetting_AccessToken { func (x *GeneralUserSetting) GetLocale() string {
if x != nil { if x != nil {
return x.AccessTokens return x.Locale
} }
return nil return ""
}
type ShortcutsUserSetting struct {
state protoimpl.MessageState `protogen:"open.v1"`
Shortcuts []*ShortcutsUserSetting_Shortcut `protobuf:"bytes,1,rep,name=shortcuts,proto3" json:"shortcuts,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ShortcutsUserSetting) Reset() {
*x = ShortcutsUserSetting{}
mi := &file_store_user_setting_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ShortcutsUserSetting) String() string {
return protoimpl.X.MessageStringOf(x)
} }
func (*ShortcutsUserSetting) ProtoMessage() {} func (x *GeneralUserSetting) GetAppearance() string {
func (x *ShortcutsUserSetting) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[2]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) return x.Appearance
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
} }
return mi.MessageOf(x) return ""
}
// Deprecated: Use ShortcutsUserSetting.ProtoReflect.Descriptor instead.
func (*ShortcutsUserSetting) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{2}
} }
func (x *ShortcutsUserSetting) GetShortcuts() []*ShortcutsUserSetting_Shortcut { func (x *GeneralUserSetting) GetMemoVisibility() string {
if x != nil { if x != nil {
return x.Shortcuts return x.MemoVisibility
} }
return nil return ""
} }
type SessionsUserSetting struct { type SessionsUserSetting struct {
@ -348,7 +283,7 @@ type SessionsUserSetting struct {
func (x *SessionsUserSetting) Reset() { func (x *SessionsUserSetting) Reset() {
*x = SessionsUserSetting{} *x = SessionsUserSetting{}
mi := &file_store_user_setting_proto_msgTypes[3] mi := &file_store_user_setting_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -360,7 +295,7 @@ func (x *SessionsUserSetting) String() string {
func (*SessionsUserSetting) ProtoMessage() {} func (*SessionsUserSetting) ProtoMessage() {}
func (x *SessionsUserSetting) ProtoReflect() protoreflect.Message { func (x *SessionsUserSetting) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[3] mi := &file_store_user_setting_proto_msgTypes[2]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -373,7 +308,7 @@ func (x *SessionsUserSetting) ProtoReflect() protoreflect.Message {
// Deprecated: Use SessionsUserSetting.ProtoReflect.Descriptor instead. // Deprecated: Use SessionsUserSetting.ProtoReflect.Descriptor instead.
func (*SessionsUserSetting) Descriptor() ([]byte, []int) { func (*SessionsUserSetting) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{3} return file_store_user_setting_proto_rawDescGZIP(), []int{2}
} }
func (x *SessionsUserSetting) GetSessions() []*SessionsUserSetting_Session { func (x *SessionsUserSetting) GetSessions() []*SessionsUserSetting_Session {
@ -383,32 +318,28 @@ func (x *SessionsUserSetting) GetSessions() []*SessionsUserSetting_Session {
return nil return nil
} }
type AccessTokensUserSetting_AccessToken struct { type AccessTokensUserSetting struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
// The access token is a JWT token. AccessTokens []*AccessTokensUserSetting_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"`
// Including expiration time, issuer, etc.
AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
// A description for the access token.
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
func (x *AccessTokensUserSetting_AccessToken) Reset() { func (x *AccessTokensUserSetting) Reset() {
*x = AccessTokensUserSetting_AccessToken{} *x = AccessTokensUserSetting{}
mi := &file_store_user_setting_proto_msgTypes[4] mi := &file_store_user_setting_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
func (x *AccessTokensUserSetting_AccessToken) String() string { func (x *AccessTokensUserSetting) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*AccessTokensUserSetting_AccessToken) ProtoMessage() {} func (*AccessTokensUserSetting) ProtoMessage() {}
func (x *AccessTokensUserSetting_AccessToken) ProtoReflect() protoreflect.Message { func (x *AccessTokensUserSetting) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[4] mi := &file_store_user_setting_proto_msgTypes[3]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -419,49 +350,40 @@ func (x *AccessTokensUserSetting_AccessToken) ProtoReflect() protoreflect.Messag
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use AccessTokensUserSetting_AccessToken.ProtoReflect.Descriptor instead. // Deprecated: Use AccessTokensUserSetting.ProtoReflect.Descriptor instead.
func (*AccessTokensUserSetting_AccessToken) Descriptor() ([]byte, []int) { func (*AccessTokensUserSetting) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{1, 0} return file_store_user_setting_proto_rawDescGZIP(), []int{3}
}
func (x *AccessTokensUserSetting_AccessToken) GetAccessToken() string {
if x != nil {
return x.AccessToken
}
return ""
} }
func (x *AccessTokensUserSetting_AccessToken) GetDescription() string { func (x *AccessTokensUserSetting) GetAccessTokens() []*AccessTokensUserSetting_AccessToken {
if x != nil { if x != nil {
return x.Description return x.AccessTokens
} }
return "" return nil
} }
type ShortcutsUserSetting_Shortcut struct { type ShortcutsUserSetting struct {
state protoimpl.MessageState `protogen:"open.v1"` state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Shortcuts []*ShortcutsUserSetting_Shortcut `protobuf:"bytes,1,rep,name=shortcuts,proto3" json:"shortcuts,omitempty"`
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"`
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
} }
func (x *ShortcutsUserSetting_Shortcut) Reset() { func (x *ShortcutsUserSetting) Reset() {
*x = ShortcutsUserSetting_Shortcut{} *x = ShortcutsUserSetting{}
mi := &file_store_user_setting_proto_msgTypes[5] mi := &file_store_user_setting_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
func (x *ShortcutsUserSetting_Shortcut) String() string { func (x *ShortcutsUserSetting) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*ShortcutsUserSetting_Shortcut) ProtoMessage() {} func (*ShortcutsUserSetting) ProtoMessage() {}
func (x *ShortcutsUserSetting_Shortcut) ProtoReflect() protoreflect.Message { func (x *ShortcutsUserSetting) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[5] mi := &file_store_user_setting_proto_msgTypes[4]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -472,30 +394,16 @@ func (x *ShortcutsUserSetting_Shortcut) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use ShortcutsUserSetting_Shortcut.ProtoReflect.Descriptor instead. // Deprecated: Use ShortcutsUserSetting.ProtoReflect.Descriptor instead.
func (*ShortcutsUserSetting_Shortcut) Descriptor() ([]byte, []int) { func (*ShortcutsUserSetting) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{2, 0} return file_store_user_setting_proto_rawDescGZIP(), []int{4}
}
func (x *ShortcutsUserSetting_Shortcut) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *ShortcutsUserSetting_Shortcut) GetTitle() string {
if x != nil {
return x.Title
}
return ""
} }
func (x *ShortcutsUserSetting_Shortcut) GetFilter() string { func (x *ShortcutsUserSetting) GetShortcuts() []*ShortcutsUserSetting_Shortcut {
if x != nil { if x != nil {
return x.Filter return x.Shortcuts
} }
return "" return nil
} }
type SessionsUserSetting_Session struct { type SessionsUserSetting_Session struct {
@ -516,7 +424,7 @@ type SessionsUserSetting_Session struct {
func (x *SessionsUserSetting_Session) Reset() { func (x *SessionsUserSetting_Session) Reset() {
*x = SessionsUserSetting_Session{} *x = SessionsUserSetting_Session{}
mi := &file_store_user_setting_proto_msgTypes[6] mi := &file_store_user_setting_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -528,7 +436,7 @@ func (x *SessionsUserSetting_Session) String() string {
func (*SessionsUserSetting_Session) ProtoMessage() {} func (*SessionsUserSetting_Session) ProtoMessage() {}
func (x *SessionsUserSetting_Session) ProtoReflect() protoreflect.Message { func (x *SessionsUserSetting_Session) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[6] mi := &file_store_user_setting_proto_msgTypes[5]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -541,7 +449,7 @@ func (x *SessionsUserSetting_Session) ProtoReflect() protoreflect.Message {
// Deprecated: Use SessionsUserSetting_Session.ProtoReflect.Descriptor instead. // Deprecated: Use SessionsUserSetting_Session.ProtoReflect.Descriptor instead.
func (*SessionsUserSetting_Session) Descriptor() ([]byte, []int) { func (*SessionsUserSetting_Session) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{3, 0} return file_store_user_setting_proto_rawDescGZIP(), []int{2, 0}
} }
func (x *SessionsUserSetting_Session) GetSessionId() string { func (x *SessionsUserSetting_Session) GetSessionId() string {
@ -597,7 +505,7 @@ type SessionsUserSetting_ClientInfo struct {
func (x *SessionsUserSetting_ClientInfo) Reset() { func (x *SessionsUserSetting_ClientInfo) Reset() {
*x = SessionsUserSetting_ClientInfo{} *x = SessionsUserSetting_ClientInfo{}
mi := &file_store_user_setting_proto_msgTypes[7] mi := &file_store_user_setting_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -609,7 +517,7 @@ func (x *SessionsUserSetting_ClientInfo) String() string {
func (*SessionsUserSetting_ClientInfo) ProtoMessage() {} func (*SessionsUserSetting_ClientInfo) ProtoMessage() {}
func (x *SessionsUserSetting_ClientInfo) ProtoReflect() protoreflect.Message { func (x *SessionsUserSetting_ClientInfo) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[7] mi := &file_store_user_setting_proto_msgTypes[6]
if x != nil { if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -622,7 +530,7 @@ func (x *SessionsUserSetting_ClientInfo) ProtoReflect() protoreflect.Message {
// Deprecated: Use SessionsUserSetting_ClientInfo.ProtoReflect.Descriptor instead. // Deprecated: Use SessionsUserSetting_ClientInfo.ProtoReflect.Descriptor instead.
func (*SessionsUserSetting_ClientInfo) Descriptor() ([]byte, []int) { func (*SessionsUserSetting_ClientInfo) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{3, 1} return file_store_user_setting_proto_rawDescGZIP(), []int{2, 1}
} }
func (x *SessionsUserSetting_ClientInfo) GetUserAgent() string { func (x *SessionsUserSetting_ClientInfo) GetUserAgent() string {
@ -660,34 +568,146 @@ func (x *SessionsUserSetting_ClientInfo) GetBrowser() string {
return "" return ""
} }
type AccessTokensUserSetting_AccessToken struct {
state protoimpl.MessageState `protogen:"open.v1"`
// The access token is a JWT token.
// Including expiration time, issuer, etc.
AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
// A description for the access token.
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *AccessTokensUserSetting_AccessToken) Reset() {
*x = AccessTokensUserSetting_AccessToken{}
mi := &file_store_user_setting_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *AccessTokensUserSetting_AccessToken) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AccessTokensUserSetting_AccessToken) ProtoMessage() {}
func (x *AccessTokensUserSetting_AccessToken) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[7]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use AccessTokensUserSetting_AccessToken.ProtoReflect.Descriptor instead.
func (*AccessTokensUserSetting_AccessToken) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{3, 0}
}
func (x *AccessTokensUserSetting_AccessToken) GetAccessToken() string {
if x != nil {
return x.AccessToken
}
return ""
}
func (x *AccessTokensUserSetting_AccessToken) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
type ShortcutsUserSetting_Shortcut struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"`
Filter string `protobuf:"bytes,3,opt,name=filter,proto3" json:"filter,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ShortcutsUserSetting_Shortcut) Reset() {
*x = ShortcutsUserSetting_Shortcut{}
mi := &file_store_user_setting_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ShortcutsUserSetting_Shortcut) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ShortcutsUserSetting_Shortcut) ProtoMessage() {}
func (x *ShortcutsUserSetting_Shortcut) ProtoReflect() protoreflect.Message {
mi := &file_store_user_setting_proto_msgTypes[8]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ShortcutsUserSetting_Shortcut.ProtoReflect.Descriptor instead.
func (*ShortcutsUserSetting_Shortcut) Descriptor() ([]byte, []int) {
return file_store_user_setting_proto_rawDescGZIP(), []int{4, 0}
}
func (x *ShortcutsUserSetting_Shortcut) GetId() string {
if x != nil {
return x.Id
}
return ""
}
func (x *ShortcutsUserSetting_Shortcut) GetTitle() string {
if x != nil {
return x.Title
}
return ""
}
func (x *ShortcutsUserSetting_Shortcut) GetFilter() string {
if x != nil {
return x.Filter
}
return ""
}
var File_store_user_setting_proto protoreflect.FileDescriptor var File_store_user_setting_proto protoreflect.FileDescriptor
const file_store_user_setting_proto_rawDesc = "" + const file_store_user_setting_proto_rawDesc = "" +
"\n" + "\n" +
"\x18store/user_setting.proto\x12\vmemos.store\x1a\x1fgoogle/protobuf/timestamp.proto\"\x95\x03\n" + "\x18store/user_setting.proto\x12\vmemos.store\x1a\x1fgoogle/protobuf/timestamp.proto\"\xc5\x03\n" +
"\vUserSetting\x12\x17\n" + "\vUserSetting\x12\x17\n" +
"\auser_id\x18\x01 \x01(\x05R\x06userId\x12-\n" + "\auser_id\x18\x01 \x01(\x05R\x06userId\x12.\n" +
"\x03key\x18\x02 \x01(\x0e2\x1b.memos.store.UserSettingKeyR\x03key\x12K\n" + "\x03key\x18\x02 \x01(\x0e2\x1c.memos.store.UserSetting.KeyR\x03key\x12;\n" +
"\raccess_tokens\x18\x03 \x01(\v2$.memos.store.AccessTokensUserSettingH\x00R\faccessTokens\x12\x18\n" + "\ageneral\x18\x03 \x01(\v2\x1f.memos.store.GeneralUserSettingH\x00R\ageneral\x12>\n" +
"\x06locale\x18\x04 \x01(\tH\x00R\x06locale\x12 \n" + "\bsessions\x18\x04 \x01(\v2 .memos.store.SessionsUserSettingH\x00R\bsessions\x12K\n" +
"\raccess_tokens\x18\x05 \x01(\v2$.memos.store.AccessTokensUserSettingH\x00R\faccessTokens\x12A\n" +
"\tshortcuts\x18\x06 \x01(\v2!.memos.store.ShortcutsUserSettingH\x00R\tshortcuts\"W\n" +
"\x03Key\x12\x13\n" +
"\x0fKEY_UNSPECIFIED\x10\x00\x12\v\n" +
"\aGENERAL\x10\x01\x12\f\n" +
"\bSESSIONS\x10\x02\x12\x11\n" +
"\rACCESS_TOKENS\x10\x03\x12\r\n" +
"\tSHORTCUTS\x10\x04B\a\n" +
"\x05value\"u\n" +
"\x12GeneralUserSetting\x12\x16\n" +
"\x06locale\x18\x01 \x01(\tR\x06locale\x12\x1e\n" +
"\n" + "\n" +
"appearance\x18\x05 \x01(\tH\x00R\n" + "appearance\x18\x02 \x01(\tR\n" +
"appearance\x12)\n" + "appearance\x12'\n" +
"\x0fmemo_visibility\x18\x06 \x01(\tH\x00R\x0ememoVisibility\x12A\n" + "\x0fmemo_visibility\x18\x03 \x01(\tR\x0ememoVisibility\"\xb0\x04\n" +
"\tshortcuts\x18\a \x01(\v2!.memos.store.ShortcutsUserSettingH\x00R\tshortcuts\x12>\n" +
"\bsessions\x18\b \x01(\v2 .memos.store.SessionsUserSettingH\x00R\bsessionsB\a\n" +
"\x05value\"\xc4\x01\n" +
"\x17AccessTokensUserSetting\x12U\n" +
"\raccess_tokens\x18\x01 \x03(\v20.memos.store.AccessTokensUserSetting.AccessTokenR\faccessTokens\x1aR\n" +
"\vAccessToken\x12!\n" +
"\faccess_token\x18\x01 \x01(\tR\vaccessToken\x12 \n" +
"\vdescription\x18\x02 \x01(\tR\vdescription\"\xaa\x01\n" +
"\x14ShortcutsUserSetting\x12H\n" +
"\tshortcuts\x18\x01 \x03(\v2*.memos.store.ShortcutsUserSetting.ShortcutR\tshortcuts\x1aH\n" +
"\bShortcut\x12\x0e\n" +
"\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n" +
"\x05title\x18\x02 \x01(\tR\x05title\x12\x16\n" +
"\x06filter\x18\x03 \x01(\tR\x06filter\"\xb0\x04\n" +
"\x13SessionsUserSetting\x12D\n" + "\x13SessionsUserSetting\x12D\n" +
"\bsessions\x18\x01 \x03(\v2(.memos.store.SessionsUserSetting.SessionR\bsessions\x1a\xba\x02\n" + "\bsessions\x18\x01 \x03(\v2(.memos.store.SessionsUserSetting.SessionR\bsessions\x1a\xba\x02\n" +
"\aSession\x12\x1d\n" + "\aSession\x12\x1d\n" +
@ -709,17 +729,18 @@ const file_store_user_setting_proto_rawDesc = "" +
"\vdevice_type\x18\x03 \x01(\tR\n" + "\vdevice_type\x18\x03 \x01(\tR\n" +
"deviceType\x12\x0e\n" + "deviceType\x12\x0e\n" +
"\x02os\x18\x04 \x01(\tR\x02os\x12\x18\n" + "\x02os\x18\x04 \x01(\tR\x02os\x12\x18\n" +
"\abrowser\x18\x05 \x01(\tR\abrowser*\x93\x01\n" + "\abrowser\x18\x05 \x01(\tR\abrowser\"\xc4\x01\n" +
"\x0eUserSettingKey\x12 \n" + "\x17AccessTokensUserSetting\x12U\n" +
"\x1cUSER_SETTING_KEY_UNSPECIFIED\x10\x00\x12\x11\n" + "\raccess_tokens\x18\x01 \x03(\v20.memos.store.AccessTokensUserSetting.AccessTokenR\faccessTokens\x1aR\n" +
"\rACCESS_TOKENS\x10\x01\x12\n" + "\vAccessToken\x12!\n" +
"\n" + "\faccess_token\x18\x01 \x01(\tR\vaccessToken\x12 \n" +
"\x06LOCALE\x10\x02\x12\x0e\n" + "\vdescription\x18\x02 \x01(\tR\vdescription\"\xaa\x01\n" +
"\n" + "\x14ShortcutsUserSetting\x12H\n" +
"APPEARANCE\x10\x03\x12\x13\n" + "\tshortcuts\x18\x01 \x03(\v2*.memos.store.ShortcutsUserSetting.ShortcutR\tshortcuts\x1aH\n" +
"\x0fMEMO_VISIBILITY\x10\x04\x12\r\n" + "\bShortcut\x12\x0e\n" +
"\tSHORTCUTS\x10\x05\x12\f\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x14\n" +
"\bSESSIONS\x10\x06B\x9b\x01\n" + "\x05title\x18\x02 \x01(\tR\x05title\x12\x16\n" +
"\x06filter\x18\x03 \x01(\tR\x06filterB\x9b\x01\n" +
"\x0fcom.memos.storeB\x10UserSettingProtoP\x01Z)github.com/usememos/memos/proto/gen/store\xa2\x02\x03MSX\xaa\x02\vMemos.Store\xca\x02\vMemos\\Store\xe2\x02\x17Memos\\Store\\GPBMetadata\xea\x02\fMemos::Storeb\x06proto3" "\x0fcom.memos.storeB\x10UserSettingProtoP\x01Z)github.com/usememos/memos/proto/gen/store\xa2\x02\x03MSX\xaa\x02\vMemos.Store\xca\x02\vMemos\\Store\xe2\x02\x17Memos\\Store\\GPBMetadata\xea\x02\fMemos::Storeb\x06proto3"
var ( var (
@ -735,36 +756,38 @@ func file_store_user_setting_proto_rawDescGZIP() []byte {
} }
var file_store_user_setting_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_store_user_setting_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_store_user_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_store_user_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_store_user_setting_proto_goTypes = []any{ var file_store_user_setting_proto_goTypes = []any{
(UserSettingKey)(0), // 0: memos.store.UserSettingKey (UserSetting_Key)(0), // 0: memos.store.UserSetting.Key
(*UserSetting)(nil), // 1: memos.store.UserSetting (*UserSetting)(nil), // 1: memos.store.UserSetting
(*AccessTokensUserSetting)(nil), // 2: memos.store.AccessTokensUserSetting (*GeneralUserSetting)(nil), // 2: memos.store.GeneralUserSetting
(*ShortcutsUserSetting)(nil), // 3: memos.store.ShortcutsUserSetting (*SessionsUserSetting)(nil), // 3: memos.store.SessionsUserSetting
(*SessionsUserSetting)(nil), // 4: memos.store.SessionsUserSetting (*AccessTokensUserSetting)(nil), // 4: memos.store.AccessTokensUserSetting
(*AccessTokensUserSetting_AccessToken)(nil), // 5: memos.store.AccessTokensUserSetting.AccessToken (*ShortcutsUserSetting)(nil), // 5: memos.store.ShortcutsUserSetting
(*ShortcutsUserSetting_Shortcut)(nil), // 6: memos.store.ShortcutsUserSetting.Shortcut (*SessionsUserSetting_Session)(nil), // 6: memos.store.SessionsUserSetting.Session
(*SessionsUserSetting_Session)(nil), // 7: memos.store.SessionsUserSetting.Session (*SessionsUserSetting_ClientInfo)(nil), // 7: memos.store.SessionsUserSetting.ClientInfo
(*SessionsUserSetting_ClientInfo)(nil), // 8: memos.store.SessionsUserSetting.ClientInfo (*AccessTokensUserSetting_AccessToken)(nil), // 8: memos.store.AccessTokensUserSetting.AccessToken
(*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp (*ShortcutsUserSetting_Shortcut)(nil), // 9: memos.store.ShortcutsUserSetting.Shortcut
(*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp
} }
var file_store_user_setting_proto_depIdxs = []int32{ var file_store_user_setting_proto_depIdxs = []int32{
0, // 0: memos.store.UserSetting.key:type_name -> memos.store.UserSettingKey 0, // 0: memos.store.UserSetting.key:type_name -> memos.store.UserSetting.Key
2, // 1: memos.store.UserSetting.access_tokens:type_name -> memos.store.AccessTokensUserSetting 2, // 1: memos.store.UserSetting.general:type_name -> memos.store.GeneralUserSetting
3, // 2: memos.store.UserSetting.shortcuts:type_name -> memos.store.ShortcutsUserSetting 3, // 2: memos.store.UserSetting.sessions:type_name -> memos.store.SessionsUserSetting
4, // 3: memos.store.UserSetting.sessions:type_name -> memos.store.SessionsUserSetting 4, // 3: memos.store.UserSetting.access_tokens:type_name -> memos.store.AccessTokensUserSetting
5, // 4: memos.store.AccessTokensUserSetting.access_tokens:type_name -> memos.store.AccessTokensUserSetting.AccessToken 5, // 4: memos.store.UserSetting.shortcuts:type_name -> memos.store.ShortcutsUserSetting
6, // 5: memos.store.ShortcutsUserSetting.shortcuts:type_name -> memos.store.ShortcutsUserSetting.Shortcut 6, // 5: memos.store.SessionsUserSetting.sessions:type_name -> memos.store.SessionsUserSetting.Session
7, // 6: memos.store.SessionsUserSetting.sessions:type_name -> memos.store.SessionsUserSetting.Session 8, // 6: memos.store.AccessTokensUserSetting.access_tokens:type_name -> memos.store.AccessTokensUserSetting.AccessToken
9, // 7: memos.store.SessionsUserSetting.Session.create_time:type_name -> google.protobuf.Timestamp 9, // 7: memos.store.ShortcutsUserSetting.shortcuts:type_name -> memos.store.ShortcutsUserSetting.Shortcut
9, // 8: memos.store.SessionsUserSetting.Session.expire_time:type_name -> google.protobuf.Timestamp 10, // 8: memos.store.SessionsUserSetting.Session.create_time:type_name -> google.protobuf.Timestamp
9, // 9: memos.store.SessionsUserSetting.Session.last_accessed_time:type_name -> google.protobuf.Timestamp 10, // 9: memos.store.SessionsUserSetting.Session.expire_time:type_name -> google.protobuf.Timestamp
8, // 10: memos.store.SessionsUserSetting.Session.client_info:type_name -> memos.store.SessionsUserSetting.ClientInfo 10, // 10: memos.store.SessionsUserSetting.Session.last_accessed_time:type_name -> google.protobuf.Timestamp
11, // [11:11] is the sub-list for method output_type 7, // 11: memos.store.SessionsUserSetting.Session.client_info:type_name -> memos.store.SessionsUserSetting.ClientInfo
11, // [11:11] is the sub-list for method input_type 12, // [12:12] is the sub-list for method output_type
11, // [11:11] is the sub-list for extension type_name 12, // [12:12] is the sub-list for method input_type
11, // [11:11] is the sub-list for extension extendee 12, // [12:12] is the sub-list for extension type_name
0, // [0:11] is the sub-list for field type_name 12, // [12:12] is the sub-list for extension extendee
0, // [0:12] is the sub-list for field type_name
} }
func init() { file_store_user_setting_proto_init() } func init() { file_store_user_setting_proto_init() }
@ -773,12 +796,10 @@ func file_store_user_setting_proto_init() {
return return
} }
file_store_user_setting_proto_msgTypes[0].OneofWrappers = []any{ file_store_user_setting_proto_msgTypes[0].OneofWrappers = []any{
(*UserSetting_General)(nil),
(*UserSetting_Sessions)(nil),
(*UserSetting_AccessTokens)(nil), (*UserSetting_AccessTokens)(nil),
(*UserSetting_Locale)(nil),
(*UserSetting_Appearance)(nil),
(*UserSetting_MemoVisibility)(nil),
(*UserSetting_Shortcuts)(nil), (*UserSetting_Shortcuts)(nil),
(*UserSetting_Sessions)(nil),
} }
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{
@ -786,7 +807,7 @@ func file_store_user_setting_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_store_user_setting_proto_rawDesc), len(file_store_user_setting_proto_rawDesc)), RawDescriptor: unsafe.Slice(unsafe.StringData(file_store_user_setting_proto_rawDesc), len(file_store_user_setting_proto_rawDesc)),
NumEnums: 1, NumEnums: 1,
NumMessages: 8, NumMessages: 9,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

@ -6,53 +6,38 @@ import "google/protobuf/timestamp.proto";
option go_package = "gen/store"; option go_package = "gen/store";
enum UserSettingKey {
USER_SETTING_KEY_UNSPECIFIED = 0;
// Access tokens for the user.
ACCESS_TOKENS = 1;
// The locale of the user.
LOCALE = 2;
// The appearance of the user.
APPEARANCE = 3;
// The visibility of the memo.
MEMO_VISIBILITY = 4;
// The shortcuts of the user.
SHORTCUTS = 5;
// User authentication sessions.
SESSIONS = 6;
}
message UserSetting { message UserSetting {
int32 user_id = 1; enum Key {
UserSettingKey key = 2; KEY_UNSPECIFIED = 0;
oneof value { // General user settings.
AccessTokensUserSetting access_tokens = 3; GENERAL = 1;
string locale = 4; // User authentication sessions.
string appearance = 5; SESSIONS = 2;
string memo_visibility = 6; // Access tokens for the user.
ShortcutsUserSetting shortcuts = 7; ACCESS_TOKENS = 3;
SessionsUserSetting sessions = 8; // The shortcuts of the user.
SHORTCUTS = 4;
} }
}
message AccessTokensUserSetting { int32 user_id = 1;
message AccessToken {
// The access token is a JWT token. Key key = 2;
// Including expiration time, issuer, etc.
string access_token = 1; oneof value {
// A description for the access token. GeneralUserSetting general = 3;
string description = 2; SessionsUserSetting sessions = 4;
AccessTokensUserSetting access_tokens = 5;
ShortcutsUserSetting shortcuts = 6;
} }
repeated AccessToken access_tokens = 1;
} }
message ShortcutsUserSetting { message GeneralUserSetting {
message Shortcut { // The user's locale.
string id = 1; string locale = 1;
string title = 2; // The user's appearance setting.
string filter = 3; string appearance = 2;
} // The user's memo visibility setting.
repeated Shortcut shortcuts = 1; string memo_visibility = 3;
} }
message SessionsUserSetting { message SessionsUserSetting {
@ -84,3 +69,23 @@ message SessionsUserSetting {
repeated Session sessions = 1; repeated Session sessions = 1;
} }
message AccessTokensUserSetting {
message AccessToken {
// The access token is a JWT token.
// Including expiration time, issuer, etc.
string access_token = 1;
// A description for the access token.
string description = 2;
}
repeated AccessToken access_tokens = 1;
}
message ShortcutsUserSetting {
message Shortcut {
string id = 1;
string title = 2;
string filter = 3;
}
repeated Shortcut shortcuts = 1;
}

@ -59,7 +59,7 @@ func (s *APIV1Service) ListShortcuts(ctx context.Context, request *v1pb.ListShor
userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{ userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -101,7 +101,7 @@ func (s *APIV1Service) GetShortcut(ctx context.Context, request *v1pb.GetShortcu
userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{ userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -159,7 +159,7 @@ func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateS
userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{ userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -167,7 +167,7 @@ func (s *APIV1Service) CreateShortcut(ctx context.Context, request *v1pb.CreateS
if userSetting == nil { if userSetting == nil {
userSetting = &storepb.UserSetting{ userSetting = &storepb.UserSetting{
UserId: userID, UserId: userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
Value: &storepb.UserSetting_Shortcuts{ Value: &storepb.UserSetting_Shortcuts{
Shortcuts: &storepb.ShortcutsUserSetting{ Shortcuts: &storepb.ShortcutsUserSetting{
Shortcuts: []*storepb.ShortcutsUserSetting_Shortcut{}, Shortcuts: []*storepb.ShortcutsUserSetting_Shortcut{},
@ -215,7 +215,7 @@ func (s *APIV1Service) UpdateShortcut(ctx context.Context, request *v1pb.UpdateS
userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{ userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -284,7 +284,7 @@ func (s *APIV1Service) DeleteShortcut(ctx context.Context, request *v1pb.DeleteS
userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{ userSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SHORTCUTS, Key: storepb.UserSetting_SHORTCUTS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err

@ -364,12 +364,13 @@ func (s *APIV1Service) GetUserSetting(ctx context.Context, request *v1pb.GetUser
userSettingMessage.Name = fmt.Sprintf("users/%d", userID) userSettingMessage.Name = fmt.Sprintf("users/%d", userID)
for _, setting := range userSettings { for _, setting := range userSettings {
if setting.Key == storepb.UserSettingKey_LOCALE { if setting.Key == storepb.UserSetting_GENERAL {
userSettingMessage.Locale = setting.GetLocale() general := setting.GetGeneral()
} else if setting.Key == storepb.UserSettingKey_APPEARANCE { if general != nil {
userSettingMessage.Appearance = setting.GetAppearance() userSettingMessage.Locale = general.Locale
} else if setting.Key == storepb.UserSettingKey_MEMO_VISIBILITY { userSettingMessage.Appearance = general.Appearance
userSettingMessage.MemoVisibility = setting.GetMemoVisibility() userSettingMessage.MemoVisibility = general.MemoVisibility
}
} }
} }
return userSettingMessage, nil return userSettingMessage, nil
@ -396,42 +397,55 @@ func (s *APIV1Service) UpdateUserSetting(ctx context.Context, request *v1pb.Upda
return nil, status.Errorf(codes.InvalidArgument, "update mask is empty") return nil, status.Errorf(codes.InvalidArgument, "update mask is empty")
} }
// Get the current general setting
existingGeneralSetting, err := s.Store.GetUserSetting(ctx, &store.FindUserSetting{
UserID: &userID,
Key: storepb.UserSetting_GENERAL,
})
if err != nil {
return nil, status.Errorf(codes.Internal, "failed to get existing general setting: %v", err)
}
// Create or update the general setting
generalSetting := &storepb.GeneralUserSetting{
Locale: "en",
Appearance: "system",
MemoVisibility: "PRIVATE",
}
// If there's an existing setting, use its values as defaults
if existingGeneralSetting != nil && existingGeneralSetting.GetGeneral() != nil {
existing := existingGeneralSetting.GetGeneral()
generalSetting.Locale = existing.Locale
generalSetting.Appearance = existing.Appearance
generalSetting.MemoVisibility = existing.MemoVisibility
}
// Apply updates based on the update mask
for _, field := range request.UpdateMask.Paths { for _, field := range request.UpdateMask.Paths {
if field == "locale" { switch field {
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ case "locale":
UserId: userID, generalSetting.Locale = request.Setting.Locale
Key: storepb.UserSettingKey_LOCALE, case "appearance":
Value: &storepb.UserSetting_Locale{ generalSetting.Appearance = request.Setting.Appearance
Locale: request.Setting.Locale, case "memo_visibility":
}, generalSetting.MemoVisibility = request.Setting.MemoVisibility
}); err != nil { default:
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
} else if field == "appearance" {
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID,
Key: storepb.UserSettingKey_APPEARANCE,
Value: &storepb.UserSetting_Appearance{
Appearance: request.Setting.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.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID,
Key: storepb.UserSettingKey_MEMO_VISIBILITY,
Value: &storepb.UserSetting_MemoVisibility{
MemoVisibility: request.Setting.MemoVisibility,
},
}); 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 nil, status.Errorf(codes.InvalidArgument, "invalid update path: %s", field)
} }
} }
// Upsert the general setting
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID,
Key: storepb.UserSetting_GENERAL,
Value: &storepb.UserSetting_General{
General: generalSetting,
},
}); err != nil {
return nil, status.Errorf(codes.Internal, "failed to upsert user setting: %v", err)
}
return s.GetUserSetting(ctx, &v1pb.GetUserSettingRequest{Name: request.Setting.Name}) return s.GetUserSetting(ctx, &v1pb.GetUserSettingRequest{Name: request.Setting.Name})
} }
@ -595,7 +609,7 @@ func (s *APIV1Service) DeleteUserAccessToken(ctx context.Context, request *v1pb.
} }
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: currentUser.ID, UserId: currentUser.ID,
Key: storepb.UserSettingKey_ACCESS_TOKENS, Key: storepb.UserSetting_ACCESS_TOKENS,
Value: &storepb.UserSetting_AccessTokens{ Value: &storepb.UserSetting_AccessTokens{
AccessTokens: &storepb.AccessTokensUserSetting{ AccessTokens: &storepb.AccessTokensUserSetting{
AccessTokens: updatedUserAccessTokens, AccessTokens: updatedUserAccessTokens,
@ -722,7 +736,7 @@ func (s *APIV1Service) UpsertAccessTokenToStore(ctx context.Context, user *store
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: user.ID, UserId: user.ID,
Key: storepb.UserSettingKey_ACCESS_TOKENS, Key: storepb.UserSetting_ACCESS_TOKENS,
Value: &storepb.UserSetting_AccessTokens{ Value: &storepb.UserSetting_AccessTokens{
AccessTokens: &storepb.AccessTokensUserSetting{ AccessTokens: &storepb.AccessTokensUserSetting{
AccessTokens: userAccessTokens, AccessTokens: userAccessTokens,

@ -19,7 +19,7 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *store.UserSetting) (
func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) { func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) {
where, args := []string{"1 = 1"}, []any{} where, args := []string{"1 = 1"}, []any{}
if v := find.Key; v != storepb.UserSettingKey_USER_SETTING_KEY_UNSPECIFIED { if v := find.Key; v != storepb.UserSetting_KEY_UNSPECIFIED {
where, args = append(where, "`key` = ?"), append(args, v.String()) where, args = append(where, "`key` = ?"), append(args, v.String())
} }
if v := find.UserID; v != nil { if v := find.UserID; v != nil {
@ -44,7 +44,7 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
); err != nil { ); err != nil {
return nil, err return nil, err
} }
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString]) userSetting.Key = storepb.UserSetting_Key(storepb.UserSetting_Key_value[keyString])
userSettingList = append(userSettingList, userSetting) userSettingList = append(userSettingList, userSetting)
} }

@ -26,7 +26,7 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *store.UserSetting) (
func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) { func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) {
where, args := []string{"1 = 1"}, []any{} where, args := []string{"1 = 1"}, []any{}
if v := find.Key; v != storepb.UserSettingKey_USER_SETTING_KEY_UNSPECIFIED { if v := find.Key; v != storepb.UserSetting_KEY_UNSPECIFIED {
where, args = append(where, "key = "+placeholder(len(args)+1)), append(args, v.String()) where, args = append(where, "key = "+placeholder(len(args)+1)), append(args, v.String())
} }
if v := find.UserID; v != nil { if v := find.UserID; v != nil {
@ -57,7 +57,7 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
); err != nil { ); err != nil {
return nil, err return nil, err
} }
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString]) userSetting.Key = storepb.UserSetting_Key(storepb.UserSetting_Key_value[keyString])
userSettingList = append(userSettingList, userSetting) userSettingList = append(userSettingList, userSetting)
} }

@ -26,7 +26,7 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *store.UserSetting) (
func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) { func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting) ([]*store.UserSetting, error) {
where, args := []string{"1 = 1"}, []any{} where, args := []string{"1 = 1"}, []any{}
if v := find.Key; v != storepb.UserSettingKey_USER_SETTING_KEY_UNSPECIFIED { if v := find.Key; v != storepb.UserSetting_KEY_UNSPECIFIED {
where, args = append(where, "key = ?"), append(args, v.String()) where, args = append(where, "key = ?"), append(args, v.String())
} }
if v := find.UserID; v != nil { if v := find.UserID; v != nil {
@ -57,7 +57,7 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
); err != nil { ); err != nil {
return nil, err return nil, err
} }
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString]) userSetting.Key = storepb.UserSetting_Key(storepb.UserSetting_Key_value[keyString])
userSettingList = append(userSettingList, userSetting) userSettingList = append(userSettingList, userSetting)
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {

@ -17,8 +17,8 @@ func TestUserSettingStore(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
_, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{ _, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: user.ID, UserId: user.ID,
Key: storepb.UserSettingKey_LOCALE, Key: storepb.UserSetting_GENERAL,
Value: &storepb.UserSetting_Locale{Locale: "en"}, Value: &storepb.UserSetting_General{General: &storepb.GeneralUserSetting{Locale: "en"}},
}) })
require.NoError(t, err) require.NoError(t, err)
list, err := ts.ListUserSettings(ctx, &store.FindUserSetting{}) list, err := ts.ListUserSettings(ctx, &store.FindUserSetting{})

@ -12,13 +12,13 @@ import (
type UserSetting struct { type UserSetting struct {
UserID int32 UserID int32
Key storepb.UserSettingKey Key storepb.UserSetting_Key
Value string Value string
} }
type FindUserSetting struct { type FindUserSetting struct {
UserID *int32 UserID *int32
Key storepb.UserSettingKey Key storepb.UserSetting_Key
} }
func (s *Store) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting) (*storepb.UserSetting, error) { func (s *Store) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting) (*storepb.UserSetting, error) {
@ -93,7 +93,7 @@ func (s *Store) GetUserSetting(ctx context.Context, find *FindUserSetting) (*sto
func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.AccessTokensUserSetting_AccessToken, error) { func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.AccessTokensUserSetting_AccessToken, error) {
userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{ userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_ACCESS_TOKENS, Key: storepb.UserSetting_ACCESS_TOKENS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -122,7 +122,7 @@ func (s *Store) RemoveUserAccessToken(ctx context.Context, userID int32, token s
_, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{ _, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID, UserId: userID,
Key: storepb.UserSettingKey_ACCESS_TOKENS, Key: storepb.UserSetting_ACCESS_TOKENS,
Value: &storepb.UserSetting_AccessTokens{ Value: &storepb.UserSetting_AccessTokens{
AccessTokens: &storepb.AccessTokensUserSetting{ AccessTokens: &storepb.AccessTokensUserSetting{
AccessTokens: newAccessTokens, AccessTokens: newAccessTokens,
@ -137,7 +137,7 @@ func (s *Store) RemoveUserAccessToken(ctx context.Context, userID int32, token s
func (s *Store) GetUserSessions(ctx context.Context, userID int32) ([]*storepb.SessionsUserSetting_Session, error) { func (s *Store) GetUserSessions(ctx context.Context, userID int32) ([]*storepb.SessionsUserSetting_Session, error) {
userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{ userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{
UserID: &userID, UserID: &userID,
Key: storepb.UserSettingKey_SESSIONS, Key: storepb.UserSetting_SESSIONS,
}) })
if err != nil { if err != nil {
return nil, err return nil, err
@ -166,7 +166,7 @@ func (s *Store) RemoveUserSession(ctx context.Context, userID int32, sessionID s
_, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{ _, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID, UserId: userID,
Key: storepb.UserSettingKey_SESSIONS, Key: storepb.UserSetting_SESSIONS,
Value: &storepb.UserSetting_Sessions{ Value: &storepb.UserSetting_Sessions{
Sessions: &storepb.SessionsUserSetting{ Sessions: &storepb.SessionsUserSetting{
Sessions: newSessions, Sessions: newSessions,
@ -203,7 +203,7 @@ func (s *Store) AddUserSession(ctx context.Context, userID int32, session *store
_, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{ _, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID, UserId: userID,
Key: storepb.UserSettingKey_SESSIONS, Key: storepb.UserSetting_SESSIONS,
Value: &storepb.UserSetting_Sessions{ Value: &storepb.UserSetting_Sessions{
Sessions: &storepb.SessionsUserSetting{ Sessions: &storepb.SessionsUserSetting{
Sessions: updatedSessions, Sessions: updatedSessions,
@ -230,7 +230,7 @@ func (s *Store) UpdateUserSessionLastAccessed(ctx context.Context, userID int32,
_, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{ _, err = s.UpsertUserSetting(ctx, &storepb.UserSetting{
UserId: userID, UserId: userID,
Key: storepb.UserSettingKey_SESSIONS, Key: storepb.UserSetting_SESSIONS,
Value: &storepb.UserSetting_Sessions{ Value: &storepb.UserSetting_Sessions{
Sessions: &storepb.SessionsUserSetting{ Sessions: &storepb.SessionsUserSetting{
Sessions: sessions, Sessions: sessions,
@ -248,30 +248,30 @@ func convertUserSettingFromRaw(raw *UserSetting) (*storepb.UserSetting, error) {
} }
switch raw.Key { switch raw.Key {
case storepb.UserSettingKey_ACCESS_TOKENS: case storepb.UserSetting_ACCESS_TOKENS:
accessTokensUserSetting := &storepb.AccessTokensUserSetting{} accessTokensUserSetting := &storepb.AccessTokensUserSetting{}
if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), accessTokensUserSetting); err != nil { if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), accessTokensUserSetting); err != nil {
return nil, err return nil, err
} }
userSetting.Value = &storepb.UserSetting_AccessTokens{AccessTokens: accessTokensUserSetting} userSetting.Value = &storepb.UserSetting_AccessTokens{AccessTokens: accessTokensUserSetting}
case storepb.UserSettingKey_SESSIONS: case storepb.UserSetting_SESSIONS:
sessionsUserSetting := &storepb.SessionsUserSetting{} sessionsUserSetting := &storepb.SessionsUserSetting{}
if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), sessionsUserSetting); err != nil { if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), sessionsUserSetting); err != nil {
return nil, err return nil, err
} }
userSetting.Value = &storepb.UserSetting_Sessions{Sessions: sessionsUserSetting} userSetting.Value = &storepb.UserSetting_Sessions{Sessions: sessionsUserSetting}
case storepb.UserSettingKey_SHORTCUTS: case storepb.UserSetting_SHORTCUTS:
shortcutsUserSetting := &storepb.ShortcutsUserSetting{} shortcutsUserSetting := &storepb.ShortcutsUserSetting{}
if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), shortcutsUserSetting); err != nil { if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), shortcutsUserSetting); err != nil {
return nil, err return nil, err
} }
userSetting.Value = &storepb.UserSetting_Shortcuts{Shortcuts: shortcutsUserSetting} userSetting.Value = &storepb.UserSetting_Shortcuts{Shortcuts: shortcutsUserSetting}
case storepb.UserSettingKey_LOCALE: case storepb.UserSetting_GENERAL:
userSetting.Value = &storepb.UserSetting_Locale{Locale: raw.Value} generalUserSetting := &storepb.GeneralUserSetting{}
case storepb.UserSettingKey_APPEARANCE: if err := protojsonUnmarshaler.Unmarshal([]byte(raw.Value), generalUserSetting); err != nil {
userSetting.Value = &storepb.UserSetting_Appearance{Appearance: raw.Value} return nil, err
case storepb.UserSettingKey_MEMO_VISIBILITY: }
userSetting.Value = &storepb.UserSetting_MemoVisibility{MemoVisibility: raw.Value} userSetting.Value = &storepb.UserSetting_General{General: generalUserSetting}
default: default:
return nil, nil return nil, nil
} }
@ -285,33 +285,34 @@ func convertUserSettingToRaw(userSetting *storepb.UserSetting) (*UserSetting, er
} }
switch userSetting.Key { switch userSetting.Key {
case storepb.UserSettingKey_ACCESS_TOKENS: case storepb.UserSetting_ACCESS_TOKENS:
accessTokensUserSetting := userSetting.GetAccessTokens() accessTokensUserSetting := userSetting.GetAccessTokens()
value, err := protojson.Marshal(accessTokensUserSetting) value, err := protojson.Marshal(accessTokensUserSetting)
if err != nil { if err != nil {
return nil, err return nil, err
} }
raw.Value = string(value) raw.Value = string(value)
case storepb.UserSettingKey_SESSIONS: case storepb.UserSetting_SESSIONS:
sessionsUserSetting := userSetting.GetSessions() sessionsUserSetting := userSetting.GetSessions()
value, err := protojson.Marshal(sessionsUserSetting) value, err := protojson.Marshal(sessionsUserSetting)
if err != nil { if err != nil {
return nil, err return nil, err
} }
raw.Value = string(value) raw.Value = string(value)
case storepb.UserSettingKey_SHORTCUTS: case storepb.UserSetting_SHORTCUTS:
shortcutsUserSetting := userSetting.GetShortcuts() shortcutsUserSetting := userSetting.GetShortcuts()
value, err := protojson.Marshal(shortcutsUserSetting) value, err := protojson.Marshal(shortcutsUserSetting)
if err != nil { if err != nil {
return nil, err return nil, err
} }
raw.Value = string(value) raw.Value = string(value)
case storepb.UserSettingKey_LOCALE: case storepb.UserSetting_GENERAL:
raw.Value = userSetting.GetLocale() generalUserSetting := userSetting.GetGeneral()
case storepb.UserSettingKey_APPEARANCE: value, err := protojson.Marshal(generalUserSetting)
raw.Value = userSetting.GetAppearance() if err != nil {
case storepb.UserSettingKey_MEMO_VISIBILITY: return nil, err
raw.Value = userSetting.GetMemoVisibility() }
raw.Value = string(value)
default: default:
return nil, errors.Errorf("unsupported user setting key: %v", userSetting.Key) return nil, errors.Errorf("unsupported user setting key: %v", userSetting.Key)
} }

Loading…
Cancel
Save