From 6a248756b50850461b2c881e5a1a14b14ff492a8 Mon Sep 17 00:00:00 2001 From: user Date: Tue, 17 Mar 2026 01:51:46 -0700 Subject: [PATCH] refactor: consolidate applyMigrations into single exported function Remove the unexported applyMigrations() and the runMigrations() method. ApplyMigrations() is now the single implementation, accepting context and an optional logger. connect() calls it directly. All callers updated to pass context.Background() and nil logger. --- internal/database/database.go | 21 ++++++--------------- internal/database/database_test.go | 6 +++--- internal/handlers/handlers_test.go | 2 +- internal/imgcache/stats_test.go | 2 +- internal/imgcache/testutil_test.go | 3 ++- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/internal/database/database.go b/internal/database/database.go index 62b2ee4..ddc01ed 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -119,7 +119,7 @@ func (s *Database) connect(ctx context.Context) error { s.db = db s.log.Info("database connected") - return s.runMigrations(ctx) + return ApplyMigrations(ctx, s.db, s.log) } // collectMigrations reads the embedded schema directory and returns @@ -159,9 +159,11 @@ func ensureMigrationsTable(ctx context.Context, db *sql.DB) error { return nil } -// applyMigrations applies all pending migrations to db, using log for -// informational output (may be nil for silent operation). -func applyMigrations(ctx context.Context, db *sql.DB, log *slog.Logger) error { +// ApplyMigrations applies all pending migrations to db. An optional logger +// may be provided for informational output; pass nil for silent operation. +// This is exported so tests can apply the real schema without the full fx +// lifecycle. +func ApplyMigrations(ctx context.Context, db *sql.DB, log *slog.Logger) error { if err := ensureMigrationsTable(ctx, db); err != nil { return err } @@ -228,18 +230,7 @@ func applyMigrations(ctx context.Context, db *sql.DB, log *slog.Logger) error { return nil } -func (s *Database) runMigrations(ctx context.Context) error { - return applyMigrations(ctx, s.db, s.log) -} - // DB returns the underlying sql.DB. func (s *Database) DB() *sql.DB { return s.db } - -// ApplyMigrations applies all migrations to the given database. -// This is useful for testing where you want to use the real schema -// without the full fx lifecycle. -func ApplyMigrations(db *sql.DB) error { - return applyMigrations(context.Background(), db, nil) -} diff --git a/internal/database/database_test.go b/internal/database/database_test.go index ab893ea..9c2fc2c 100644 --- a/internal/database/database_test.go +++ b/internal/database/database_test.go @@ -94,7 +94,7 @@ func TestApplyMigrations(t *testing.T) { defer db.Close() // Apply migrations should succeed. - if err := ApplyMigrations(db); err != nil { + if err := ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatalf("ApplyMigrations failed: %v", err) } @@ -131,11 +131,11 @@ func TestApplyMigrationsIdempotent(t *testing.T) { defer db.Close() // Apply twice should succeed (idempotent). - if err := ApplyMigrations(db); err != nil { + if err := ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatalf("first ApplyMigrations failed: %v", err) } - if err := ApplyMigrations(db); err != nil { + if err := ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatalf("second ApplyMigrations failed: %v", err) } diff --git a/internal/handlers/handlers_test.go b/internal/handlers/handlers_test.go index 550dff3..63861de 100644 --- a/internal/handlers/handlers_test.go +++ b/internal/handlers/handlers_test.go @@ -82,7 +82,7 @@ func setupTestDB(t *testing.T) *sql.DB { t.Fatalf("failed to open test db: %v", err) } - if err := database.ApplyMigrations(db); err != nil { + if err := database.ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatalf("failed to apply migrations: %v", err) } diff --git a/internal/imgcache/stats_test.go b/internal/imgcache/stats_test.go index 5b36a3d..940b7cc 100644 --- a/internal/imgcache/stats_test.go +++ b/internal/imgcache/stats_test.go @@ -16,7 +16,7 @@ func setupStatsTestDB(t *testing.T) *sql.DB { if err != nil { t.Fatal(err) } - if err := database.ApplyMigrations(db); err != nil { + if err := database.ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatal(err) } t.Cleanup(func() { db.Close() }) diff --git a/internal/imgcache/testutil_test.go b/internal/imgcache/testutil_test.go index b07e98b..3b85ece 100644 --- a/internal/imgcache/testutil_test.go +++ b/internal/imgcache/testutil_test.go @@ -2,6 +2,7 @@ package imgcache import ( "bytes" + "context" "database/sql" "image" "image/color" @@ -193,7 +194,7 @@ func setupServiceTestDB(t *testing.T) *sql.DB { } // Use the real production schema via migrations - if err := database.ApplyMigrations(db); err != nil { + if err := database.ApplyMigrations(context.Background(), db, nil); err != nil { t.Fatalf("failed to apply migrations: %v", err) }