| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -16,6 +16,8 @@ const (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingAppearanceKey UserSettingKey = "appearance"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					// UserSettingMemoVisibilityKey is the key type for user preference memo default visibility.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingMemoVisibilityKey UserSettingKey = "memoVisibility"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					// UserSettingResourceVisibilityKey is the key type for user preference resource default visibility.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingResourceVisibilityKey UserSettingKey = "resourceVisibility"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				// String returns the string format of UserSettingKey type.
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -27,14 +29,17 @@ func (key UserSettingKey) String() string {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return "appearance"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					case UserSettingMemoVisibilityKey:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return "memoVisibility"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					case UserSettingResourceVisibilityKey:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return "resourceVisibility"
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					return ""
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				var (
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingLocaleValue         = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk", "ru", "it", "hant", "ko"}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingAppearanceValue     = []string{"system", "light", "dark"}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingMemoVisibilityValue = []Visibility{Private, Protected, Public}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingLocaleValue             = []string{"en", "zh", "vi", "fr", "nl", "sv", "de", "es", "uk", "ru", "it", "hant", "ko"}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingAppearanceValue         = []string{"system", "light", "dark"}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingMemoVisibilityValue     = []Visibility{Private, Protected, Public}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserSettingResourceVisibilityValue = []Visibility{Private, Protected, Public}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				type UserSetting struct {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -78,6 +83,15 @@ func (upsert UserSettingUpsert) Validate() error {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if !slices.Contains(UserSettingMemoVisibilityValue, memoVisibilityValue) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return fmt.Errorf("invalid user setting memo visibility value")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					} else if upsert.Key == UserSettingResourceVisibilityKey {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						resourceVisibilityValue := Private
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						err := json.Unmarshal([]byte(upsert.Value), &resourceVisibilityValue)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if err != nil {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return fmt.Errorf("failed to unmarshal user setting resource visibility value")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						if !slices.Contains(UserSettingResourceVisibilityValue, resourceVisibilityValue) {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
							return fmt.Errorf("invalid user setting resource visibility value")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					} else {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
						return fmt.Errorf("invalid user setting key")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					}
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -88,7 +102,7 @@ func (upsert UserSettingUpsert) Validate() error {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				type UserSettingFind struct {
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					UserID int
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					Key *UserSettingKey `json:"key"`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
					Key UserSettingKey `json:"key"`
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				type UserSettingDelete struct {
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |