diff --git a/cmd/migrate/main.go b/cmd/migrate/main.go index 28855e1..dc50340 100644 --- a/cmd/migrate/main.go +++ b/cmd/migrate/main.go @@ -25,7 +25,20 @@ func main() { os.Exit(1) } defer pool.Close() - for _, path := range []string{"migrations/000001_mvp.sql", "migrations/000002_growth_analyst.sql", "migrations/000003_ai_summary_refresh.sql", "migrations/000004_ai_page_insights.sql"} { + migrations := []struct { + version int64 + path string + }{{1, "migrations/000001_mvp.sql"}, {2, "migrations/000002_growth_analyst.sql"}, {3, "migrations/000003_ai_summary_refresh.sql"}, {4, "migrations/000004_ai_page_insights.sql"}} + for _, item := range migrations { + var applied bool + if err := pool.QueryRow(ctx, `SELECT EXISTS(SELECT 1 FROM schema_migrations WHERE version=$1)`, item.version).Scan(&applied); err != nil { + logger.Error("checking migration version failed", "version", item.version, "error", err) + os.Exit(1) + } + if applied { + continue + } + path := item.path migration, err := os.ReadFile(path) if err != nil { logger.Error("reading migration failed", "path", path, "error", err)