From db44823ecf42d60465878b3b072ea0e33e5853a1 Mon Sep 17 00:00:00 2001 From: StarFleetCPTN Date: Wed, 9 Apr 2025 19:15:17 -0700 Subject: [PATCH] fix: Improve database initialization and connection handling - Added logic to close the database connection after migrations to ensure a clean state. - Implemented reconnection to the database post-migrations to prevent potential issues. - Updated rclone connection logic to use 'host' instead of 'endpoint' for webdav and nextcloud providers, enhancing consistency in configuration arguments. --- internal/db/db.go | 22 +++++++++++++++------- internal/rclone_service/rclone_service.go | 4 ++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/internal/db/db.go b/internal/db/db.go index aac927b..87599fb 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -33,6 +33,21 @@ func Initialize(dbPath string) (*DB, error) { return nil, fmt.Errorf("failed to run migrations: %v", err) } + // Close the database connection after migrations + sqlDB, err := db.DB() + if err != nil { + return nil, fmt.Errorf("failed to get underlying database: %v", err) + } + if err := sqlDB.Close(); err != nil { + return nil, fmt.Errorf("failed to close database after migrations: %v", err) + } + + // Reopen the database connection for a clean state + db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) + if err != nil { + return nil, fmt.Errorf("failed to reconnect to database after migrations: %v", err) + } + return &DB{DB: db}, nil } @@ -55,10 +70,3 @@ func (db *DB) Close() error { } return sqlDB.Close() } - -// GetEnabledAuthProviders returns all enabled authentication providers -// func (db *DB) GetEnabledAuthProviders(ctx context.Context) ([]AuthProvider, error) { -// var providers []AuthProvider -// result := db.WithContext(ctx).Where("enabled = ?", true).Find(&providers) -// return providers, result.Error -// } diff --git a/internal/rclone_service/rclone_service.go b/internal/rclone_service/rclone_service.go index ed956ea..516dc0b 100644 --- a/internal/rclone_service/rclone_service.go +++ b/internal/rclone_service/rclone_service.go @@ -210,12 +210,12 @@ func TestRcloneConnection(config db.TransferConfig, providerType string, dbInsta createArgs = append(createArgs, "domain", domain) } case "webdav": - createArgs = append(createArgs, "url", endpoint, "vendor", "other", "user", user) + createArgs = append(createArgs, "url", host, "vendor", "other", "user", user) if pass != "" { createArgs = append(createArgs, "pass", pass) } case "nextcloud": - createArgs = append(createArgs, "url", endpoint, "vendor", "nextcloud", "user", user) + createArgs = append(createArgs, "url", host, "vendor", "nextcloud", "user", user) if pass != "" { createArgs = append(createArgs, "pass", pass) }