forked from tanitall/memo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
user_settings.go
118 lines (105 loc) · 2.58 KB
/
user_settings.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package db
import (
"fmt"
"github.com/jchavannes/jgo/jerr"
"time"
)
const (
SettingIntegrationsAll = "all"
SettingIntegrationsHide = "hide"
SettingIntegrationsNone = "none"
SettingThemeDefault = "default"
SettingThemeDark = "dark"
MaxDefaultTip = 1e9
)
type UserSettings struct {
Id uint `gorm:"primary_key"`
UserId uint `gorm:"unique"`
DefaultTip uint
Integrations string `gorm:"size:25"`
Theme string `gorm:"size:25"`
CreatedAt time.Time
UpdatedAt time.Time
}
func (u *UserSettings) Save() error {
result := save(u)
if result.Error != nil {
return jerr.Get("error saving user settings", result.Error)
}
return nil
}
func (u UserSettings) GetDefaultTipString() string {
if u.DefaultTip == 0 {
return ""
}
return fmt.Sprintf("%d", u.DefaultTip)
}
func SaveSettingsForUser(userId uint, defaultTip uint, integrations string, theme string) (*UserSettings, error) {
var userSettings = UserSettings{
UserId: userId,
}
err := find(&userSettings, userSettings)
if err != nil && ! IsRecordNotFoundError(err) {
return nil, jerr.Get("error finding existing settings", err)
}
userSettings.DefaultTip = defaultTip
userSettings.Integrations = integrations
userSettings.Theme = theme
err = userSettings.Save()
if err != nil {
return nil, jerr.Get("error saving settings", err)
}
return &userSettings, nil
}
func GetSettingsForUser(userId uint) (*UserSettings, error) {
var userSettings = UserSettings{
UserId: userId,
}
err := find(&userSettings, userSettings)
if err == nil {
return &userSettings, nil
}
if ! IsRecordNotFoundError(err) {
return nil, jerr.Get("error finding settings for user", err)
}
// Defaults
userSettings = GetDefaultUserSettings()
userSettings.UserId = userId
err = userSettings.Save()
if err != nil {
return nil, jerr.Get("error saving default settings", err)
}
return &userSettings, nil
}
func GetDefaultUserSettings() UserSettings {
return UserSettings{
Integrations: SettingIntegrationsAll,
Theme: SettingThemeDefault,
}
}
func IsValidDefaultTip(defaultTip uint) bool {
return defaultTip == 0 || (defaultTip >= 546 && defaultTip <= MaxDefaultTip)
}
func IsValidIntegrationsSetting(integrations string) bool {
for _, validValue := range []string{
SettingIntegrationsAll,
SettingIntegrationsHide,
SettingIntegrationsNone,
} {
if integrations == validValue {
return true
}
}
return false
}
func IsValidThemeSetting(theme string) bool {
for _, validValue := range []string{
SettingThemeDefault,
SettingThemeDark,
} {
if theme == validValue {
return true
}
}
return false
}