diff --git a/main.go b/main.go index 30adbe2..00784d2 100644 --- a/main.go +++ b/main.go @@ -48,7 +48,7 @@ func main() { } settingsService := SettingsService{db: &db} - _, err = settingsService.LoadSettings() + err = settingsService.LoadSettings() if err != nil { Error.Printf("%++v", err) os.Exit(1) diff --git a/settingsservice.go b/settingsservice.go index bc326d1..5eeb1d2 100644 --- a/settingsservice.go +++ b/settingsservice.go @@ -3,6 +3,7 @@ package main import ( "fmt" "log" + "reflect" ) type ( @@ -11,27 +12,36 @@ type ( } ) -var Settings map[string]string = map[string]string{ - "FoodDaysLookback": "7", - "FoodAggregatedDaysLookback": "7", - "WeightDaysLookback": "7", - "WeightAggregatedDaysLookback": "7", +type settings struct { + FoodDaysLookback string + FoodAggregatedDaysLookback string + WeightDaysLookback string + WeightAggregatedDaysLookback string } -func (s *SettingsService) LoadSettings() (map[string]string, error) { +var Settings settings + +func (s *SettingsService) LoadSettings() error { if s.db == nil || !s.db.Ready { - return Settings, fmt.Errorf("cannot load Settings, db is nil or is not ready") + return fmt.Errorf("cannot load Settings, db is nil or is not ready") } - for key := range Settings { - var value string - err := s.db.readConn.QueryRow("SELECT value FROM settings WHERE key = ?", key).Scan(&value) - if err != nil { - Error.Printf("error getting setting for key %s: %++v", key, err) - continue - } - log.Println(key, value) - } + settingsValue := reflect.ValueOf(&Settings).Elem() + settingsType := settingsValue.Type() - return Settings, nil + for i := 0; i < settingsValue.NumField(); i++ { + field := settingsType.Field(i) + key := field.Name + + var value string + err := s.db.readConn.QueryRow("SELECT value FROM settings WHERE key = ?", key).Scan(&value) + if err != nil { + log.Printf("error getting setting for key %s: %v", key, err) + continue + } + + settingsValue.Field(i).SetString(value) + log.Println(key, value) + } + return nil }