Implement settings api

This commit is contained in:
2024-08-09 18:49:47 +02:00
parent f105595195
commit 5ec2ee18b8
2 changed files with 31 additions and 1 deletions

9
app.go
View File

@@ -20,6 +20,7 @@ func (a *App) startup(ctx context.Context) {
a.ctx = ctx a.ctx = ctx
} }
// region food
func (a *App) GetFood() WailsFood { func (a *App) GetFood() WailsFood {
data, err := foodService.GetRecent() data, err := foodService.GetRecent()
if err != nil { if err != nil {
@@ -42,4 +43,12 @@ func (a *App) UpdateFood(food Food) WailsFood1 {
return WailsFood1{Success: false, Error: err.Error()} return WailsFood1{Success: false, Error: err.Error()}
} }
return WailsFood1{Data: data, Success: true} return WailsFood1{Data: data, Success: true}
}
// region settings
func (a *App) GetSettings() settings {
return Settings
}
func (a *App) SetSetting(key string, value any) settings {
return settingsService.Set(key, value)
} }

View File

@@ -50,7 +50,7 @@ func (s *SettingsService) LoadSettings() error {
log.Printf("error getting setting for key %s: %v; setting default", key, err) 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")) _, err := s.db.writeConn.Exec("INSERT INTO settings (key, value) VALUES (?, ?)", key, field.Tag.Get("default"))
if err != nil { if err != nil {
log.Printf("error inserting setting for key %s: %v", key, err) Error.Printf("error inserting setting for key %s: %v", key, err)
continue continue
} }
} }
@@ -60,3 +60,24 @@ func (s *SettingsService) LoadSettings() error {
} }
return nil return nil
} }
func (s *SettingsService) Set(key string, value any) settings {
fields := reflect.ValueOf(&Settings).Elem()
for i := 0; i < fields.NumField(); i++ {
field := fields.Type().Field(i)
if field.Name == key {
fields.Field(i).SetInt(value.(int64))
// This could cause desync between client and server
// But we can just refresh, I think it's fine
go func() {
_, err := s.db.writeConn.Exec("UPDATE settings SET value = ? WHERE key = ?", value, key)
if err != nil {
Error.Printf("error updating setting for key %s: %v", key)
}
}()
return Settings
}
}
return Settings
}