@@ -31,8 +31,8 @@ func init() {
3131 db .RegisterModel (new (Setting ))
3232}
3333
34- // GetSettings returns specific settings from user
35- func GetSettings (uid int64 , keys []string ) (map [string ]* Setting , error ) {
34+ // GetUserSettings returns specific settings from user
35+ func GetUserSettings (uid int64 , keys []string ) (map [string ]* Setting , error ) {
3636 settings := make ([]* Setting , 0 , len (keys ))
3737 if err := db .GetEngine (db .DefaultContext ).
3838 Where ("user_id=?" , uid ).
@@ -62,21 +62,53 @@ func GetUserAllSettings(uid int64) (map[string]*Setting, error) {
6262 return settingsMap , nil
6363}
6464
65- // DeleteSetting deletes a specific setting for a user
66- func DeleteSetting (setting * Setting ) error {
67- _ , err := db .GetEngine (db .DefaultContext ).Delete (setting )
65+ func validateUserSettingKey (key string ) error {
66+ if len (key ) == 0 {
67+ return fmt .Errorf ("setting key must be set" )
68+ }
69+ if strings .ToLower (key ) != key {
70+ return fmt .Errorf ("setting key should be lowercase" )
71+ }
72+ return nil
73+ }
74+
75+ // GetUserSetting gets a specific setting for a user
76+ func GetUserSetting (userID int64 , key string , def ... string ) (string , error ) {
77+ if err := validateUserSettingKey (key ); err != nil {
78+ return "" , err
79+ }
80+ setting := & Setting {UserID : userID , SettingKey : key }
81+ has , err := db .GetEngine (db .DefaultContext ).Get (setting )
82+ if err != nil {
83+ return "" , err
84+ }
85+ if ! has {
86+ if len (def ) == 1 {
87+ return def [0 ], nil
88+ }
89+ return "" , nil
90+ }
91+ return setting .SettingValue , nil
92+ }
93+
94+ // DeleteUserSetting deletes a specific setting for a user
95+ func DeleteUserSetting (userID int64 , key string ) error {
96+ if err := validateUserSettingKey (key ); err != nil {
97+ return err
98+ }
99+ _ , err := db .GetEngine (db .DefaultContext ).Delete (& Setting {UserID : userID , SettingKey : key })
68100 return err
69101}
70102
71- // SetSetting updates a users' setting for a specific key
72- func SetSetting ( setting * Setting ) error {
73- if strings . ToLower ( setting . SettingKey ) != setting . SettingKey {
74- return fmt . Errorf ( "setting key should be lowercase" )
103+ // SetUserSetting updates a users' setting for a specific key
104+ func SetUserSetting ( userID int64 , key , value string ) error {
105+ if err := validateUserSettingKey ( key ); err != nil {
106+ return err
75107 }
76- return upsertSettingValue ( setting . UserID , setting . SettingKey , setting . SettingValue )
108+ return upsertUserSettingValue ( userID , key , value )
77109}
78110
79- func upsertSettingValue (userID int64 , key , value string ) error {
111+ func upsertUserSettingValue (userID int64 , key , value string ) error {
80112 return db .WithTx (func (ctx context.Context ) error {
81113 e := db .GetEngine (ctx )
82114
0 commit comments