From 7da990c08fdbd2ed14e32ff5f482e8480ef7aa37 Mon Sep 17 00:00:00 2001 From: Denis Mishankov Date: Tue, 28 Oct 2025 20:22:59 +0300 Subject: [PATCH 1/4] Remove unused repository field from Database struct --- database/database.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/database/database.go b/database/database.go index 55c1dcd..322b509 100644 --- a/database/database.go +++ b/database/database.go @@ -12,7 +12,6 @@ type Database struct { *sqlx.DB repositories map[string]any migrators map[string]migrator - repository *Repository service *service } @@ -24,7 +23,7 @@ func New(connection string) (*Database, error) { repository := newRepository(db) service := newService(repository) - return &Database{DB: db, repositories: make(map[string]any), migrators: make(map[string]migrator), repository: repository, service: service}, nil + return &Database{DB: db, repositories: make(map[string]any), migrators: make(map[string]migrator), service: service}, nil } func (db *Database) RegisterRepository(name string, repository any) { From 885d8e77578e5513c90e3ef2dac5bf4495b560a1 Mon Sep 17 00:00:00 2001 From: Denis Mishankov Date: Tue, 28 Oct 2025 20:36:26 +0300 Subject: [PATCH 2/4] Make migration service methods private The migration service methods are now only used internally within the database package. This change makes them private to better encapsulate the implementation and clarify the package API. Test code is updated to use the internal migrationLog type instead of the previously exported MigrationLog type. --- database/database.go | 6 ++-- database/database_test.go | 33 +++++++++++++--------- database/migration.go | 2 +- database/repository.go | 16 +++++------ database/service.go | 59 +++++++++++++++++---------------------- 5 files changed, 58 insertions(+), 58 deletions(-) diff --git a/database/database.go b/database/database.go index 322b509..c4d8905 100644 --- a/database/database.go +++ b/database/database.go @@ -36,13 +36,13 @@ func (db *Database) RegisterRepository(name string, repository any) { func (db *Database) Migrate(ctx context.Context) error { // Ensure that migration table exists - err := db.service.MigrateSelf(ctx) + err := db.service.migrateSelf(ctx) if err != nil { return err } // Get completed migrations - migrationLogs, err := db.service.GetMigrationLogs(ctx) + migrationLogs, err := db.service.getMigrationLogs(ctx) if err != nil { return fmt.Errorf("failed to select migrations state: %w", err) } @@ -56,7 +56,7 @@ func (db *Database) Migrate(ctx context.Context) error { } } - err = db.service.ApplyMigrations(ctx, migrations, migrationLogs) + err = db.service.applyMigrations(ctx, migrations, migrationLogs) if err != nil { return err } diff --git a/database/database_test.go b/database/database_test.go index c48f80b..3c7b578 100644 --- a/database/database_test.go +++ b/database/database_test.go @@ -4,6 +4,7 @@ import ( "context" "slices" "testing" + "time" "github.com/mishankov/platforma/database" "github.com/testcontainers/testcontainers-go/modules/postgres" @@ -59,7 +60,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("failed to migrate database: %s", err.Error()) } - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -109,7 +110,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("failed to migrate database: %s", err.Error()) } - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -156,7 +157,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("failed to migrate database: %s", err.Error()) } - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -167,7 +168,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected 2 migrations, got: %d", len(migrationLogs)) } - if !slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "some_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to contain init migration for some_repo") @@ -213,7 +214,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("failed to migrate database: %s", err.Error()) } - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -224,7 +225,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected 3 migrations, got: %d", len(migrationLogs)) } - if !slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "some_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to contain init migration for some_repo") @@ -235,7 +236,7 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected no errors, got: %s", err.Error()) } - if !slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "other_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to contain init migration for other_repo, but only got: %s", migrationLogs) @@ -286,7 +287,7 @@ func TestMigrate(t *testing.T) { } t.Logf("migration error: %s", err.Error()) - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -305,7 +306,7 @@ func TestMigrate(t *testing.T) { } // because migration should be reverted - if slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "some_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to not contain init migration for some_repo") @@ -317,7 +318,7 @@ func TestMigrate(t *testing.T) { } // because migration should be reverted - if slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "other_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to not contain init migration for other_repo, but only got: %s", migrationLogs) @@ -368,7 +369,7 @@ func TestMigrate(t *testing.T) { } t.Logf("migration error: %s", err.Error()) - var migrationLogs []database.MigrationLog + var migrationLogs []migrationLog err = db.SelectContext(ctx, &migrationLogs, "SELECT * FROM platforma_migrations") if err != nil { t.Fatalf("expected no errors, got: %s", err.Error()) @@ -387,14 +388,14 @@ func TestMigrate(t *testing.T) { } // because migration should be reverted or not even attempted - if slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "some_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to not contain init migration for some_repo") } // because migration should be reverted - if slices.ContainsFunc(migrationLogs, func(log database.MigrationLog) bool { + if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { return log.Repository == "other_repo" && log.MigrationId == "init" }) { t.Fatalf("expected migration log to not contain init migration for other_repo, but only got: %s", migrationLogs) @@ -407,6 +408,12 @@ func TestMigrate(t *testing.T) { }) } +type migrationLog struct { + Repository string `db:"repository"` + MigrationId string `db:"id"` + Timestamp time.Time `db:"timestamp"` +} + type simpleRepo struct { migrations []database.Migration } diff --git a/database/migration.go b/database/migration.go index dfe5f19..574adcf 100644 --- a/database/migration.go +++ b/database/migration.go @@ -4,7 +4,7 @@ import ( "time" ) -type MigrationLog struct { +type migrationLog struct { Repository string `db:"repository"` MigrationId string `db:"id"` Timestamp time.Time `db:"timestamp"` diff --git a/database/repository.go b/database/repository.go index 7ab923d..c846ba1 100644 --- a/database/repository.go +++ b/database/repository.go @@ -7,15 +7,15 @@ import ( "github.com/jmoiron/sqlx" ) -type Repository struct { +type repository struct { db *sqlx.DB } -func newRepository(db *sqlx.DB) *Repository { - return &Repository{db: db} +func newRepository(db *sqlx.DB) *repository { + return &repository{db: db} } -func (r *Repository) Migrations() []Migration { +func (r *repository) migrations() []Migration { return []Migration{{ ID: "init", Up: "CREATE TABLE IF NOT EXISTS platforma_migrations (repository TEXT, id TEXT, timestamp TIMESTAMP)", @@ -23,8 +23,8 @@ func (r *Repository) Migrations() []Migration { }} } -func (r *Repository) GetMigrationLogs(ctx context.Context) ([]MigrationLog, error) { - var migrations []MigrationLog +func (r *repository) getMigrationLogs(ctx context.Context) ([]migrationLog, error) { + var migrations []migrationLog err := r.db.SelectContext(ctx, &migrations, "SELECT * FROM platforma_migrations") if err != nil { return nil, fmt.Errorf("failed to get migration logs: %w", err) @@ -33,7 +33,7 @@ func (r *Repository) GetMigrationLogs(ctx context.Context) ([]MigrationLog, erro return migrations, nil } -func (r *Repository) SaveMigrationLog(ctx context.Context, log MigrationLog) error { +func (r *repository) saveMigrationLog(ctx context.Context, log migrationLog) error { query := ` INSERT INTO platforma_migrations (repository, id, timestamp) VALUES (:repository, :id, :timestamp) @@ -45,7 +45,7 @@ func (r *Repository) SaveMigrationLog(ctx context.Context, log MigrationLog) err return nil } -func (r *Repository) ExecuteQuery(ctx context.Context, query string) error { +func (r *repository) executeQuery(ctx context.Context, query string) error { _, err := r.db.ExecContext(ctx, query) if err != nil { return fmt.Errorf("failed to execute query: %w", err) diff --git a/database/service.go b/database/service.go index 5fbfa64..a1411f5 100644 --- a/database/service.go +++ b/database/service.go @@ -10,41 +10,34 @@ import ( "github.com/mishankov/platforma/log" ) -type repository interface { - GetMigrationLogs(ctx context.Context) ([]MigrationLog, error) - SaveMigrationLog(ctx context.Context, log MigrationLog) error - ExecuteQuery(ctx context.Context, query string) error - Migrations() []Migration -} - type service struct { - repo repository + repo *repository } -func newService(repo repository) *service { +func newService(repo *repository) *service { return &service{repo: repo} } -func (s *service) GetMigrationLogs(ctx context.Context) ([]MigrationLog, error) { - logs, err := s.repo.GetMigrationLogs(ctx) +func (s *service) getMigrationLogs(ctx context.Context) ([]migrationLog, error) { + logs, err := s.repo.getMigrationLogs(ctx) if err != nil { return nil, fmt.Errorf("failed to get migration logs: %w", err) } return logs, nil } -func (s *service) SaveMigrationLog(ctx context.Context, repository, migrationId string) error { - err := s.repo.SaveMigrationLog(ctx, MigrationLog{Repository: repository, MigrationId: migrationId, Timestamp: time.Now()}) +func (s *service) saveMigrationLog(ctx context.Context, repository, migrationId string) error { + err := s.repo.saveMigrationLog(ctx, migrationLog{Repository: repository, MigrationId: migrationId, Timestamp: time.Now()}) if err != nil { return fmt.Errorf("failed to save migration log: %w", err) } return nil } -func (s *service) SaveMigrationLogs(ctx context.Context, migrations []Migration) error { +func (s *service) saveMigrationLogs(ctx context.Context, migrations []Migration) error { masterErr := error(nil) for _, migr := range migrations { - err := s.SaveMigrationLog(ctx, migr.repository, migr.ID) + err := s.saveMigrationLog(ctx, migr.repository, migr.ID) if err != nil { masterErr = errors.Join(masterErr, err) } @@ -53,22 +46,22 @@ func (s *service) SaveMigrationLogs(ctx context.Context, migrations []Migration) return masterErr } -func (s *service) MigrateSelf(ctx context.Context) error { - migrations := s.repo.Migrations() +func (s *service) migrateSelf(ctx context.Context) error { + migrations := s.repo.migrations() appliedMigrations := []Migration{} - migrationLogs, err := s.repo.GetMigrationLogs(ctx) + migrationLogs, err := s.repo.getMigrationLogs(ctx) if err != nil { log.InfoContext(ctx, "migrations log table does not exist yet") } for _, migr := range migrations { - if !slices.ContainsFunc(migrationLogs, func(l MigrationLog) bool { + if !slices.ContainsFunc(migrationLogs, func(l migrationLog) bool { return l.Repository == "platforma_migration" && l.MigrationId == migr.ID }) { - err := s.ApplyMigration(ctx, migr) + err := s.applyMigration(ctx, migr) if err != nil { - revertErr := s.RevertMigrations(ctx, appliedMigrations) + revertErr := s.revertMigrations(ctx, appliedMigrations) if revertErr != nil { log.ErrorContext(ctx, "got error(s) trying to revert migrations", "error", revertErr) } @@ -79,7 +72,7 @@ func (s *service) MigrateSelf(ctx context.Context) error { } } - err = s.SaveMigrationLogs(ctx, appliedMigrations) + err = s.saveMigrationLogs(ctx, appliedMigrations) if err != nil { log.ErrorContext(ctx, "got error(s) trying to save migration logs", "error", err.Error()) } @@ -87,23 +80,23 @@ func (s *service) MigrateSelf(ctx context.Context) error { return nil } -func (s *service) ApplyMigration(ctx context.Context, migration Migration) error { - err := s.repo.ExecuteQuery(ctx, migration.Up) +func (s *service) applyMigration(ctx context.Context, migration Migration) error { + err := s.repo.executeQuery(ctx, migration.Up) if err != nil { return fmt.Errorf("failed to apply migration: %w", err) } return nil } -func (s *service) ApplyMigrations(ctx context.Context, migrations []Migration, migrationLogs []MigrationLog) error { +func (s *service) applyMigrations(ctx context.Context, migrations []Migration, migrationLogs []migrationLog) error { appliedMigrations := []Migration{} for _, migr := range migrations { - if !slices.ContainsFunc(migrationLogs, func(l MigrationLog) bool { + if !slices.ContainsFunc(migrationLogs, func(l migrationLog) bool { return l.Repository == migr.repository && l.MigrationId == migr.ID }) { - err := s.ApplyMigration(ctx, migr) + err := s.applyMigration(ctx, migr) if err != nil { - revertErr := s.RevertMigrations(ctx, appliedMigrations) + revertErr := s.revertMigrations(ctx, appliedMigrations) if revertErr != nil { log.ErrorContext(ctx, "got error(s) trying to revert migrations", "error", revertErr) } @@ -113,7 +106,7 @@ func (s *service) ApplyMigrations(ctx context.Context, migrations []Migration, m } } - err := s.SaveMigrationLogs(ctx, appliedMigrations) + err := s.saveMigrationLogs(ctx, appliedMigrations) if err != nil { log.ErrorContext(ctx, "got error(s) trying to save migration logs", "error", err.Error()) } @@ -121,18 +114,18 @@ func (s *service) ApplyMigrations(ctx context.Context, migrations []Migration, m return nil } -func (s *service) RevertMigration(ctx context.Context, migration Migration) error { - err := s.repo.ExecuteQuery(ctx, migration.Down) +func (s *service) revertMigration(ctx context.Context, migration Migration) error { + err := s.repo.executeQuery(ctx, migration.Down) if err != nil { return fmt.Errorf("failed to revert migration: %w", err) } return nil } -func (s *service) RevertMigrations(ctx context.Context, migrations []Migration) error { +func (s *service) revertMigrations(ctx context.Context, migrations []Migration) error { masterErr := error(nil) for _, migr := range slices.Backward(migrations) { - err := s.RevertMigration(ctx, migr) + err := s.revertMigration(ctx, migr) if err != nil { masterErr = errors.Join(masterErr, fmt.Errorf("failed to revert migration %s: %w", migr.ID, err)) } From b74a3bcd7d3859f9312f3da172ad1109f2ff8d6c Mon Sep 17 00:00:00 2001 From: Denis Mishankov Date: Tue, 28 Oct 2025 20:55:51 +0300 Subject: [PATCH 3/4] Add revive linter and improve database package documentation - Enable revive linter in golangci configuration with database path exclusion - Add comprehensive package and function documentation to database package - Fix field naming consistency (MigrationId -> MigrationID) throughout codebase - Update test cases to use new field name --- .golangci.yml | 6 +++++- database/database.go | 8 +++++++- database/database_test.go | 32 ++++++++++++++++---------------- database/migration.go | 3 ++- database/service.go | 8 ++++---- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index deb9368..2cc07b9 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -2,7 +2,6 @@ version: "2" linters: # consider to add: cyclop - # find sane settings for revive default: none enable: - bodyclose @@ -35,6 +34,7 @@ linters: - paralleltest - perfsprint - prealloc + - revive - staticcheck - tagalign - tagliatelle @@ -63,6 +63,10 @@ linters: json: camel exclusions: rules: + - path-except: "database/*" + linters: + - revive + - path: _test\.go linters: - dupl diff --git a/database/database.go b/database/database.go index c4d8905..c55a50f 100644 --- a/database/database.go +++ b/database/database.go @@ -1,3 +1,4 @@ +// Package database provides database connection and migration functionality. package database import ( @@ -5,9 +6,10 @@ import ( "fmt" "github.com/jmoiron/sqlx" - _ "github.com/lib/pq" + _ "github.com/lib/pq" // PostgreSQL driver ) +// Database represents a database connection with migration capabilities. type Database struct { *sqlx.DB repositories map[string]any @@ -15,6 +17,7 @@ type Database struct { service *service } +// New creates a new Database instance with the given connection string. func New(connection string) (*Database, error) { db, err := sqlx.Connect("postgres", connection) if err != nil { @@ -26,6 +29,8 @@ func New(connection string) (*Database, error) { return &Database{DB: db, repositories: make(map[string]any), migrators: make(map[string]migrator), service: service}, nil } +// RegisterRepository registers a repository in the database. +// If repository implements migrator interface, it will migrate when `Migrate` is called. func (db *Database) RegisterRepository(name string, repository any) { db.repositories[name] = repository @@ -34,6 +39,7 @@ func (db *Database) RegisterRepository(name string, repository any) { } } +// Migrate runs all pending migrations for registered repositories. func (db *Database) Migrate(ctx context.Context) error { // Ensure that migration table exists err := db.service.migrateSelf(ctx) diff --git a/database/database_test.go b/database/database_test.go index 3c7b578..c03f2b3 100644 --- a/database/database_test.go +++ b/database/database_test.go @@ -74,8 +74,8 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected repository to be platforma_migration, got: %s", migrationLogs[0].Repository) } - if migrationLogs[0].MigrationId != "init" { - t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationId) + if migrationLogs[0].MigrationID != "init" { + t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationID) } }) @@ -124,8 +124,8 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected repository to be platforma_migration, got: %s", migrationLogs[0].Repository) } - if migrationLogs[0].MigrationId != "init" { - t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationId) + if migrationLogs[0].MigrationID != "init" { + t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationID) } }) @@ -169,7 +169,7 @@ func TestMigrate(t *testing.T) { } if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "some_repo" && log.MigrationId == "init" + return log.Repository == "some_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to contain init migration for some_repo") } @@ -226,7 +226,7 @@ func TestMigrate(t *testing.T) { } if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "some_repo" && log.MigrationId == "init" + return log.Repository == "some_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to contain init migration for some_repo") } @@ -237,7 +237,7 @@ func TestMigrate(t *testing.T) { } if !slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "other_repo" && log.MigrationId == "init" + return log.Repository == "other_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to contain init migration for other_repo, but only got: %s", migrationLogs) } @@ -301,13 +301,13 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected repository to be platforma_migration, got: %s", migrationLogs[0].Repository) } - if migrationLogs[0].MigrationId != "init" { - t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationId) + if migrationLogs[0].MigrationID != "init" { + t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationID) } // because migration should be reverted if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "some_repo" && log.MigrationId == "init" + return log.Repository == "some_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to not contain init migration for some_repo") } @@ -319,7 +319,7 @@ func TestMigrate(t *testing.T) { // because migration should be reverted if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "other_repo" && log.MigrationId == "init" + return log.Repository == "other_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to not contain init migration for other_repo, but only got: %s", migrationLogs) } @@ -383,20 +383,20 @@ func TestMigrate(t *testing.T) { t.Fatalf("expected repository to be platforma_migration, got: %s", migrationLogs[0].Repository) } - if migrationLogs[0].MigrationId != "init" { - t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationId) + if migrationLogs[0].MigrationID != "init" { + t.Fatalf("expected migration id to be init, got: %s", migrationLogs[0].MigrationID) } // because migration should be reverted or not even attempted if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "some_repo" && log.MigrationId == "init" + return log.Repository == "some_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to not contain init migration for some_repo") } // because migration should be reverted if slices.ContainsFunc(migrationLogs, func(log migrationLog) bool { - return log.Repository == "other_repo" && log.MigrationId == "init" + return log.Repository == "other_repo" && log.MigrationID == "init" }) { t.Fatalf("expected migration log to not contain init migration for other_repo, but only got: %s", migrationLogs) } @@ -410,7 +410,7 @@ func TestMigrate(t *testing.T) { type migrationLog struct { Repository string `db:"repository"` - MigrationId string `db:"id"` + MigrationID string `db:"id"` Timestamp time.Time `db:"timestamp"` } diff --git a/database/migration.go b/database/migration.go index 574adcf..5d5c40d 100644 --- a/database/migration.go +++ b/database/migration.go @@ -6,10 +6,11 @@ import ( type migrationLog struct { Repository string `db:"repository"` - MigrationId string `db:"id"` + MigrationID string `db:"id"` Timestamp time.Time `db:"timestamp"` } +// Migration represents a database migration with up and down SQL statements. type Migration struct { ID string Up string diff --git a/database/service.go b/database/service.go index a1411f5..5ddfe48 100644 --- a/database/service.go +++ b/database/service.go @@ -26,8 +26,8 @@ func (s *service) getMigrationLogs(ctx context.Context) ([]migrationLog, error) return logs, nil } -func (s *service) saveMigrationLog(ctx context.Context, repository, migrationId string) error { - err := s.repo.saveMigrationLog(ctx, migrationLog{Repository: repository, MigrationId: migrationId, Timestamp: time.Now()}) +func (s *service) saveMigrationLog(ctx context.Context, repository, migrationID string) error { + err := s.repo.saveMigrationLog(ctx, migrationLog{Repository: repository, MigrationID: migrationID, Timestamp: time.Now()}) if err != nil { return fmt.Errorf("failed to save migration log: %w", err) } @@ -57,7 +57,7 @@ func (s *service) migrateSelf(ctx context.Context) error { for _, migr := range migrations { if !slices.ContainsFunc(migrationLogs, func(l migrationLog) bool { - return l.Repository == "platforma_migration" && l.MigrationId == migr.ID + return l.Repository == "platforma_migration" && l.MigrationID == migr.ID }) { err := s.applyMigration(ctx, migr) if err != nil { @@ -92,7 +92,7 @@ func (s *service) applyMigrations(ctx context.Context, migrations []Migration, m appliedMigrations := []Migration{} for _, migr := range migrations { if !slices.ContainsFunc(migrationLogs, func(l migrationLog) bool { - return l.Repository == migr.repository && l.MigrationId == migr.ID + return l.Repository == migr.repository && l.MigrationID == migr.ID }) { err := s.applyMigration(ctx, migr) if err != nil { From 798ae6c0d1983ca6dc946b48c6a7b7ff44b16dcd Mon Sep 17 00:00:00 2001 From: Denis Mishankov Date: Tue, 28 Oct 2025 20:58:03 +0300 Subject: [PATCH 4/4] Update GolangCI linter configuration --- .golangci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 2cc07b9..8596adb 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,7 +1,6 @@ version: "2" linters: - # consider to add: cyclop default: none enable: - bodyclose