use an enum for db settings
This commit is contained in:
@@ -349,7 +349,7 @@ func main() {
|
||||
})
|
||||
}
|
||||
|
||||
lastfmAPIKey, _ := dbc.GetSetting("lastfm_api_key")
|
||||
lastfmAPIKey, _ := dbc.GetSetting(db.LastFMAPIKey)
|
||||
if lastfmAPIKey != "" {
|
||||
g.Add(func() error {
|
||||
log.Printf("starting job 'refresh artist info'\n")
|
||||
|
||||
40
db/db.go
40
db/db.go
@@ -54,22 +54,6 @@ func NewMock() (*DB, error) {
|
||||
return New(":memory:", mockOptions())
|
||||
}
|
||||
|
||||
func (db *DB) GetSetting(key string) (string, error) {
|
||||
var setting Setting
|
||||
if err := db.Where("key=?", key).First(&setting).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return "", err
|
||||
}
|
||||
return setting.Value, nil
|
||||
}
|
||||
|
||||
func (db *DB) SetSetting(key, value string) error {
|
||||
return db.
|
||||
Where("key=?", key).
|
||||
Assign(Setting{Key: key, Value: value}).
|
||||
FirstOrCreate(&Setting{}).
|
||||
Error
|
||||
}
|
||||
|
||||
func (db *DB) InsertBulkLeftMany(table string, head []string, left int, col []int) error {
|
||||
if len(col) == 0 {
|
||||
return nil
|
||||
@@ -137,3 +121,27 @@ func (db *DB) TransactionChunked(data []int64, cb ChunkFunc) error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
type SettingKey string
|
||||
|
||||
const (
|
||||
LastFMAPIKey SettingKey = "lastfm_api_key" //nolint:gosec
|
||||
LastFMSecret SettingKey = "lastfm_secret"
|
||||
LastScanTime SettingKey = "last_scan_time"
|
||||
)
|
||||
|
||||
func (db *DB) GetSetting(key SettingKey) (string, error) {
|
||||
var setting Setting
|
||||
if err := db.Where("key=?", key).First(&setting).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return "", err
|
||||
}
|
||||
return setting.Value, nil
|
||||
}
|
||||
|
||||
func (db *DB) SetSetting(key SettingKey, value string) error {
|
||||
return db.
|
||||
Where("key=?", key).
|
||||
Assign(Setting{Key: key, Value: value}).
|
||||
FirstOrCreate(&Setting{}).
|
||||
Error
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ func randKey() string {
|
||||
}
|
||||
|
||||
func TestGetSetting(t *testing.T) {
|
||||
key := randKey()
|
||||
key := SettingKey(randKey())
|
||||
value := "howdy"
|
||||
|
||||
require := require.New(t)
|
||||
|
||||
@@ -174,8 +174,8 @@ type User struct {
|
||||
}
|
||||
|
||||
type Setting struct {
|
||||
Key string `gorm:"not null; primary_key; auto_increment:false" sql:"default: null"`
|
||||
Value string `sql:"default: null"`
|
||||
Key SettingKey `gorm:"not null; primary_key; auto_increment:false" sql:"default: null"`
|
||||
Value string `sql:"default: null"`
|
||||
}
|
||||
|
||||
type Play struct {
|
||||
|
||||
@@ -115,7 +115,7 @@ func (s *Scanner) ScanAndClean(opts ScanOptions) (*Context, error) {
|
||||
return nil, fmt.Errorf("clean genres: %w", err)
|
||||
}
|
||||
|
||||
if err := s.db.SetSetting("last_scan_time", strconv.FormatInt(time.Now().Unix(), 10)); err != nil {
|
||||
if err := s.db.SetSetting(db.LastScanTime, strconv.FormatInt(time.Now().Unix(), 10)); err != nil {
|
||||
return nil, fmt.Errorf("set scan time: %w", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -34,11 +34,11 @@ func (s *Scrobbler) Scrobble(user *db.User, track *db.Track, stamp time.Time, su
|
||||
return fmt.Errorf("track has no album artists")
|
||||
}
|
||||
|
||||
apiKey, err := s.db.GetSetting("lastfm_api_key")
|
||||
apiKey, err := s.db.GetSetting(db.LastFMAPIKey)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get api key: %w", err)
|
||||
}
|
||||
secret, err := s.db.GetSetting("lastfm_secret")
|
||||
secret, err := s.db.GetSetting(db.LastFMSecret)
|
||||
if err != nil {
|
||||
return fmt.Errorf("get secret: %w", err)
|
||||
}
|
||||
|
||||
@@ -22,8 +22,8 @@ func TestScrobble(t *testing.T) {
|
||||
err = testDB.Migrate(db.MigrationContext{})
|
||||
require.NoError(err)
|
||||
|
||||
testDB.SetSetting("lastfm_api_key", "apiKey1")
|
||||
testDB.SetSetting("lastfm_secret", "secret1")
|
||||
testDB.SetSetting(db.LastFMAPIKey, "apiKey1")
|
||||
testDB.SetSetting(db.LastFMSecret, "secret1")
|
||||
|
||||
user := &db.User{
|
||||
LastFMSession: "lastFMSession1",
|
||||
|
||||
@@ -50,7 +50,7 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
|
||||
c.DB.Table("tracks").Count(&data.TrackCount)
|
||||
// lastfm box
|
||||
data.RequestRoot = c.BaseURL(r)
|
||||
data.CurrentLastFMAPIKey, _ = c.DB.GetSetting("lastfm_api_key")
|
||||
data.CurrentLastFMAPIKey, _ = c.DB.GetSetting(db.LastFMAPIKey)
|
||||
data.DefaultListenBrainzURL = listenbrainz.BaseURL
|
||||
|
||||
// users box
|
||||
@@ -67,7 +67,7 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
|
||||
Find(&data.RecentFolders)
|
||||
|
||||
data.IsScanning = c.Scanner.IsScanning()
|
||||
if tStr, _ := c.DB.GetSetting("last_scan_time"); tStr != "" {
|
||||
if tStr, _ := c.DB.GetSetting(db.LastScanTime); tStr != "" {
|
||||
i, _ := strconv.ParseInt(tStr, 10, 64)
|
||||
data.LastScanTime = time.Unix(i, 0)
|
||||
}
|
||||
@@ -97,11 +97,11 @@ func (c *Controller) ServeLinkLastFMDo(r *http.Request) *Response {
|
||||
if token == "" {
|
||||
return &Response{code: 400, err: "please provide a token"}
|
||||
}
|
||||
apiKey, err := c.DB.GetSetting("lastfm_api_key")
|
||||
apiKey, err := c.DB.GetSetting(db.LastFMAPIKey)
|
||||
if err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't get api key: %v", err)}}
|
||||
}
|
||||
secret, err := c.DB.GetSetting("lastfm_secret")
|
||||
secret, err := c.DB.GetSetting(db.LastFMSecret)
|
||||
if err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't get secret: %v", err)}}
|
||||
}
|
||||
@@ -338,10 +338,10 @@ func (c *Controller) ServeCreateUserDo(r *http.Request) *Response {
|
||||
func (c *Controller) ServeUpdateLastFMAPIKey(r *http.Request) *Response {
|
||||
data := &templateData{}
|
||||
var err error
|
||||
if data.CurrentLastFMAPIKey, err = c.DB.GetSetting("lastfm_api_key"); err != nil {
|
||||
if data.CurrentLastFMAPIKey, err = c.DB.GetSetting(db.LastFMAPIKey); err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't get api key: %v", err)}}
|
||||
}
|
||||
if data.CurrentLastFMAPISecret, err = c.DB.GetSetting("lastfm_secret"); err != nil {
|
||||
if data.CurrentLastFMAPISecret, err = c.DB.GetSetting(db.LastFMSecret); err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't get secret: %v", err)}}
|
||||
}
|
||||
return &Response{
|
||||
@@ -359,10 +359,10 @@ func (c *Controller) ServeUpdateLastFMAPIKeyDo(r *http.Request) *Response {
|
||||
flashW: []string{err.Error()},
|
||||
}
|
||||
}
|
||||
if err := c.DB.SetSetting("lastfm_api_key", apiKey); err != nil {
|
||||
if err := c.DB.SetSetting(db.LastFMAPIKey, apiKey); err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't set api key: %v", err)}}
|
||||
}
|
||||
if err := c.DB.SetSetting("lastfm_secret", secret); err != nil {
|
||||
if err := c.DB.SetSetting(db.LastFMSecret, secret); err != nil {
|
||||
return &Response{redirect: r.Referer(), flashW: []string{fmt.Sprintf("couldn't set secret: %v", err)}}
|
||||
}
|
||||
return &Response{redirect: "/admin/home"}
|
||||
|
||||
@@ -320,7 +320,7 @@ func (c *Controller) ServeGetArtistInfoTwo(r *http.Request) *spec.Response {
|
||||
sub := spec.NewResponse()
|
||||
sub.ArtistInfoTwo = &spec.ArtistInfo{}
|
||||
|
||||
apiKey, _ := c.DB.GetSetting("lastfm_api_key")
|
||||
apiKey, _ := c.DB.GetSetting(db.LastFMAPIKey)
|
||||
if apiKey == "" {
|
||||
return sub
|
||||
}
|
||||
@@ -541,7 +541,7 @@ func (c *Controller) ServeGetTopSongs(r *http.Request) *spec.Response {
|
||||
return spec.NewError(0, "finding artist by name: %v", err)
|
||||
}
|
||||
|
||||
apiKey, _ := c.DB.GetSetting("lastfm_api_key")
|
||||
apiKey, _ := c.DB.GetSetting(db.LastFMAPIKey)
|
||||
if apiKey == "" {
|
||||
return spec.NewResponse()
|
||||
}
|
||||
@@ -598,7 +598,7 @@ func (c *Controller) ServeGetSimilarSongs(r *http.Request) *spec.Response {
|
||||
if err != nil || id.Type != specid.Track {
|
||||
return spec.NewError(10, "please provide an track `id` parameter")
|
||||
}
|
||||
apiKey, _ := c.DB.GetSetting("lastfm_api_key")
|
||||
apiKey, _ := c.DB.GetSetting(db.LastFMAPIKey)
|
||||
if apiKey == "" {
|
||||
return spec.NewResponse()
|
||||
}
|
||||
@@ -668,7 +668,7 @@ func (c *Controller) ServeGetSimilarSongsTwo(r *http.Request) *spec.Response {
|
||||
return spec.NewError(10, "please provide an artist `id` parameter")
|
||||
}
|
||||
|
||||
apiKey, _ := c.DB.GetSetting("lastfm_api_key")
|
||||
apiKey, _ := c.DB.GetSetting(db.LastFMAPIKey)
|
||||
if apiKey == "" {
|
||||
return spec.NewResponse()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user