diff --git a/internal/application/application.go b/internal/application/application.go index 697b43d..6acb748 100644 --- a/internal/application/application.go +++ b/internal/application/application.go @@ -66,8 +66,6 @@ func Run() { var homeDir string var dataDir string var DB *gorm.DB - var initialConfig db.AppConfig - var result *gorm.DB networkIsUp = false @@ -110,12 +108,12 @@ func Run() { // Populate the initial Config cache OR create defaults firstRun := false - result = DB.Unscoped().First(&initialConfig) - if result.Error != nil { - if errors.Is(result.Error, gorm.ErrRecordNotFound) { - logger.Info("First run detected: Creating default configuration...") + startupConfig, err := db.GetConfig(DB) + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + logger.Info("No config found in database, generating defaults") firstRun = true - initialConfig = db.AppConfig{ + startupConfig = &db.AppConfig{ DataDir: dataDir, AssetsDir: dataDir, SystemLevel: "BASIC", @@ -126,14 +124,15 @@ func Run() { AudioEnabled: true, SavedVolume: 1.0, } - if err := DB.Create(&initialConfig).Error; err != nil { + + // Now save it to the database to create the config for all subsequent queries + if err := DB.Create(&startupConfig).Error; err != nil { logger.Error("failed to insert default config into database: %v", err) return } - } else { - logger.Error("error querying database for initial config: %v", result.Error) - return } + logger.Error("failed to read configuration from database") + return } logger.AddDatabase(DB) diff --git a/internal/db/queries.go b/internal/db/queries.go index 1654dbd..456578e 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -2,10 +2,13 @@ package db import "gorm.io/gorm" +// GetConfig fetches the application config from the database func GetConfig(db *gorm.DB) (*AppConfig, error) { - var appConfig AppConfig - if err := db.First(&appConfig).Error; err != nil { + var cfg AppConfig + err := db.First(&cfg, 1).Error + if err != nil { return nil, err } - return &appConfig, nil + + return &cfg, err }