mirror of
				https://github.com/usememos/memos.git
				synced 2025-10-31 08:46:39 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			158 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package api
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| )
 | |
| 
 | |
| type UserSettingKey string
 | |
| 
 | |
| const (
 | |
| 	// UserSettingLocaleKey is the key type for user locale.
 | |
| 	UserSettingLocaleKey UserSettingKey = "locale"
 | |
| 	// UserSettingMemoVisibilityKey is the key type for user preference memo default visibility.
 | |
| 	UserSettingMemoVisibilityKey UserSettingKey = "memoVisibility"
 | |
| 	// UserSettingEditorFontStyleKey is the key type for editor font style.
 | |
| 	UserSettingEditorFontStyleKey UserSettingKey = "editorFontStyle"
 | |
| 	// UserSettingEditorFontStyleKey is the key type for mobile editor style.
 | |
| 	UserSettingMobileEditorStyleKey UserSettingKey = "mobileEditorStyle"
 | |
| 	// UserSettingMemoDisplayTsOptionKey is the key type for memo display ts option.
 | |
| 	UserSettingMemoDisplayTsOptionKey UserSettingKey = "memoDisplayTsOption"
 | |
| )
 | |
| 
 | |
| // String returns the string format of UserSettingKey type.
 | |
| func (key UserSettingKey) String() string {
 | |
| 	switch key {
 | |
| 	case UserSettingLocaleKey:
 | |
| 		return "locale"
 | |
| 	case UserSettingMemoVisibilityKey:
 | |
| 		return "memoVisibility"
 | |
| 	case UserSettingEditorFontStyleKey:
 | |
| 		return "editorFontFamily"
 | |
| 	case UserSettingMobileEditorStyleKey:
 | |
| 		return "mobileEditorStyle"
 | |
| 	case UserSettingMemoDisplayTsOptionKey:
 | |
| 		return "memoDisplayTsOption"
 | |
| 	}
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| var (
 | |
| 	UserSettingLocaleValue                 = []string{"en", "zh", "vi"}
 | |
| 	UserSettingMemoVisibilityValue         = []Visibility{Privite, Protected, Public}
 | |
| 	UserSettingEditorFontStyleValue        = []string{"normal", "mono"}
 | |
| 	UserSettingMobileEditorStyleValue      = []string{"normal", "float"}
 | |
| 	UserSettingMemoDisplayTsOptionKeyValue = []string{"created_ts", "updated_ts"}
 | |
| )
 | |
| 
 | |
| type UserSetting struct {
 | |
| 	UserID int
 | |
| 	Key    UserSettingKey `json:"key"`
 | |
| 	// Value is a JSON string with basic value
 | |
| 	Value string `json:"value"`
 | |
| }
 | |
| 
 | |
| type UserSettingUpsert struct {
 | |
| 	UserID int
 | |
| 	Key    UserSettingKey `json:"key"`
 | |
| 	Value  string         `json:"value"`
 | |
| }
 | |
| 
 | |
| func (upsert UserSettingUpsert) Validate() error {
 | |
| 	if upsert.Key == UserSettingLocaleKey {
 | |
| 		localeValue := "en"
 | |
| 		err := json.Unmarshal([]byte(upsert.Value), &localeValue)
 | |
| 		if err != nil {
 | |
| 			return fmt.Errorf("failed to unmarshal user setting locale value")
 | |
| 		}
 | |
| 
 | |
| 		invalid := true
 | |
| 		for _, value := range UserSettingLocaleValue {
 | |
| 			if localeValue == value {
 | |
| 				invalid = false
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 		if invalid {
 | |
| 			return fmt.Errorf("invalid user setting locale value")
 | |
| 		}
 | |
| 	} else if upsert.Key == UserSettingMemoVisibilityKey {
 | |
| 		memoVisibilityValue := Privite
 | |
| 		err := json.Unmarshal([]byte(upsert.Value), &memoVisibilityValue)
 | |
| 		if err != nil {
 | |
| 			return fmt.Errorf("failed to unmarshal user setting memo visibility value")
 | |
| 		}
 | |
| 
 | |
| 		invalid := true
 | |
| 		for _, value := range UserSettingMemoVisibilityValue {
 | |
| 			if memoVisibilityValue == value {
 | |
| 				invalid = false
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 		if invalid {
 | |
| 			return fmt.Errorf("invalid user setting memo visibility value")
 | |
| 		}
 | |
| 	} else if upsert.Key == UserSettingEditorFontStyleKey {
 | |
| 		editorFontStyleValue := "normal"
 | |
| 		err := json.Unmarshal([]byte(upsert.Value), &editorFontStyleValue)
 | |
| 		if err != nil {
 | |
| 			return fmt.Errorf("failed to unmarshal user setting editor font style")
 | |
| 		}
 | |
| 
 | |
| 		invalid := true
 | |
| 		for _, value := range UserSettingEditorFontStyleValue {
 | |
| 			if editorFontStyleValue == value {
 | |
| 				invalid = false
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 		if invalid {
 | |
| 			return fmt.Errorf("invalid user setting editor font style value")
 | |
| 		}
 | |
| 	} else if upsert.Key == UserSettingMobileEditorStyleKey {
 | |
| 		mobileEditorStyleValue := "normal"
 | |
| 		err := json.Unmarshal([]byte(upsert.Value), &mobileEditorStyleValue)
 | |
| 		if err != nil {
 | |
| 			return fmt.Errorf("failed to unmarshal user setting mobile editor style")
 | |
| 		}
 | |
| 
 | |
| 		invalid := true
 | |
| 		for _, value := range UserSettingMobileEditorStyleValue {
 | |
| 			if mobileEditorStyleValue == value {
 | |
| 				invalid = false
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 		if invalid {
 | |
| 			return fmt.Errorf("invalid user setting mobile editor style value")
 | |
| 		}
 | |
| 	} else if upsert.Key == UserSettingMemoDisplayTsOptionKey {
 | |
| 		memoDisplayTsOption := "created_ts"
 | |
| 		err := json.Unmarshal([]byte(upsert.Value), &memoDisplayTsOption)
 | |
| 		if err != nil {
 | |
| 			return fmt.Errorf("failed to unmarshal user setting memo display ts option")
 | |
| 		}
 | |
| 
 | |
| 		invalid := true
 | |
| 		for _, value := range UserSettingMemoDisplayTsOptionKeyValue {
 | |
| 			if memoDisplayTsOption == value {
 | |
| 				invalid = false
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 		if invalid {
 | |
| 			return fmt.Errorf("invalid user setting memo display ts option value")
 | |
| 		}
 | |
| 	} else {
 | |
| 		return fmt.Errorf("invalid user setting key")
 | |
| 	}
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| type UserSettingFind struct {
 | |
| 	UserID int
 | |
| 
 | |
| 	Key *UserSettingKey `json:"key"`
 | |
| }
 |