66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
type Setting struct {
|
|
Name string
|
|
Value string
|
|
Default string
|
|
}
|
|
|
|
func NewSetting(name string, defaultValue string) Setting {
|
|
return Setting{
|
|
Name: name,
|
|
Value: defaultValue,
|
|
Default: defaultValue,
|
|
}
|
|
}
|
|
|
|
func initSettings(settings *DbTable[string, Setting]) {
|
|
addSettingIfNotExists(NewSetting("theme", "white"), settings)
|
|
addSettingIfNotExists(NewSetting("order", "title"), settings)
|
|
}
|
|
|
|
func addSettingIfNotExists(setting Setting, settings *DbTable[string, Setting]) {
|
|
_, exists := settings.Get(setting.Name)
|
|
if !exists {
|
|
settings.Set(setting.Name, setting)
|
|
}
|
|
}
|
|
|
|
func updateSetting(db *sql.DB, s *Setting) error {
|
|
const cmd = "UPDATE Setting set Value = ? WHERE Name = ?"
|
|
_, err := db.Exec(cmd, s.Value, s.Name)
|
|
return err
|
|
}
|
|
|
|
func insertSetting(db *sql.DB, s *Setting) error {
|
|
const cmd = "INSERT INTO Setting(Name, Value, DefaultValue) VALUES(?, ?, ?)"
|
|
_, err := db.Exec(cmd, s.Name, s.Value, s.Default)
|
|
return err
|
|
}
|
|
|
|
func loadSettings(db *sql.DB) (map[string]Setting, error) {
|
|
const cmd = "SELECT Name, Value, DefaultValue from Setting"
|
|
rows, err := db.Query(cmd)
|
|
|
|
res := make(map[string]Setting)
|
|
|
|
for rows.Next() {
|
|
setting := Setting{}
|
|
if err = rows.Scan(&setting.Name, &setting.Value, &setting.Default); err != nil {
|
|
return nil, err
|
|
}
|
|
res[setting.Name] = setting
|
|
}
|
|
return res, err
|
|
}
|
|
|
|
func deleteSetting(db *sql.DB, key string) error {
|
|
const cmd = "UPDATE Setting set Value = DefaultValue WHERE Name = ?"
|
|
_, err := db.Exec(cmd, key)
|
|
return err
|
|
}
|