From 66a6cb69d64ec2f90001c54c22b159f220e9d730 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Fri, 9 Aug 2024 16:29:53 +0200 Subject: [PATCH] Add settings and implement auto default --- food.ddl | 5 +++++ settingsservice.go | 49 +++++++++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 18 deletions(-) diff --git a/food.ddl b/food.ddl index 2fc1e69..37ebbfe 100644 --- a/food.ddl +++ b/food.ddl @@ -148,4 +148,9 @@ set per100 = coalesce( where rowid = new .rowid; end; +create table settings( + key text not null primary key, + value text not null +); + commit; \ No newline at end of file diff --git a/settingsservice.go b/settingsservice.go index 5eeb1d2..17754b7 100644 --- a/settingsservice.go +++ b/settingsservice.go @@ -13,10 +13,19 @@ type ( ) type settings struct { - FoodDaysLookback string - FoodAggregatedDaysLookback string - WeightDaysLookback string - WeightAggregatedDaysLookback string + FoodDaysLookback int + FoodAggregatedDaysLookback int + FoodDailyLookback int + FoodWeeklyLookback int + FoodMonthlyLookback int + FoodYearlyLookback int + + WeightDaysLookback int + WeightAggregatedDaysLookback int + WeightDailyLookback int + WeightWeeklyLookback int + WeightMonthlyLookback int + WeightYearlyLookback int } var Settings settings @@ -26,22 +35,26 @@ func (s *SettingsService) LoadSettings() error { return fmt.Errorf("cannot load Settings, db is nil or is not ready") } - settingsValue := reflect.ValueOf(&Settings).Elem() - settingsType := settingsValue.Type() + settingsValue := reflect.ValueOf(&Settings).Elem() + settingsType := settingsValue.Type() - for i := 0; i < settingsValue.NumField(); i++ { - field := settingsType.Field(i) - key := field.Name + 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 - } + var value int + 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; setting default", key, err) + _, err := s.db.writeConn.Exec("INSERT INTO settings (key, value) VALUES (?, ?)", key, field.Tag.Get("default")) + if err != nil { + log.Printf("error inserting setting for key %s: %v", key, err) + continue + } + } - settingsValue.Field(i).SetString(value) - log.Println(key, value) - } + settingsValue.Field(i).SetInt(int64(value)) + log.Println(key, value) + } return nil }