From ff30b00e7190b63c42eaf7ec5dec2941d08c6e8f Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sat, 9 Aug 2025 16:12:26 +0200 Subject: [PATCH] refactor(db.go, file.go): improve database error handling and file snapshot seeding --- utils/db.go | 6 ++++-- utils/file.go | 12 +++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/utils/db.go b/utils/db.go index ee77729..1bb0772 100644 --- a/utils/db.go +++ b/utils/db.go @@ -7,6 +7,7 @@ import ( logger "git.site.quack-lab.dev/dave/cylogger" "gorm.io/driver/sqlite" "gorm.io/gorm" + gormlogger "gorm.io/gorm/logger" ) // dbLogger is a scoped logger for the utils/db package. @@ -43,7 +44,7 @@ func GetDB() (DB, error) { db, err := gorm.Open(sqlite.Open(dbFile), &gorm.Config{ // SkipDefaultTransaction: true, PrepareStmt: true, - // Logger: gormlogger.Default.LogMode(gormlogger.Silent), + Logger: gormlogger.Default.LogMode(gormlogger.Silent), }) if err != nil { getDBLogger.Error("Failed to open database: %v", err) @@ -120,7 +121,8 @@ func (db *DBWrapper) GetFile(filePath string) ([]byte, error) { var fileSnapshot FileSnapshot err := db.db.Model(&FileSnapshot{}).Where("file_path = ?", filePath).First(&fileSnapshot).Error if err != nil { - getFileLogger.Error("Failed to get file from database: %v", err) + // Downgrade not-found to warning to avoid noisy errors during first run + getFileLogger.Warning("Failed to get file from database: %v", err) return nil, err } getFileLogger.Debug("File found in database") diff --git a/utils/file.go b/utils/file.go index 2da933c..9f87f5a 100644 --- a/utils/file.go +++ b/utils/file.go @@ -102,7 +102,17 @@ func ResetWhereNecessary(associations map[string]FileCommandAssociation, db DB) fileData, err := db.GetFile(file) if err != nil { resetWhereNecessaryLogger.Warning("Failed to get original content for file %q from database: %v", file, err) - continue + // Seed the snapshot from current disk content if missing, then use it as fallback + currentData, readErr := os.ReadFile(file) + if readErr != nil { + resetWhereNecessaryLogger.Warning("Additionally failed to read current file content for %q: %v", file, readErr) + continue + } + // Best-effort attempt to save baseline; ignore errors to avoid blocking reset + if saveErr := db.SaveFile(file, currentData); saveErr != nil { + resetWhereNecessaryLogger.Warning("Failed to seed baseline snapshot for %q: %v", file, saveErr) + } + fileData = currentData } resetWhereNecessaryLogger.Trace("Retrieved original file data length for %q: %d", file, len(fileData)) resetWhereNecessaryLogger.Debug("Writing original content back to file %q", file)