diff --git a/config/database.go b/config/database.go index 962995e..fd56c7e 100644 --- a/config/database.go +++ b/config/database.go @@ -8,24 +8,28 @@ import ( "github.com/nprasad2077/NBA_Go/utils/metrics" ) -func InitDB() *gorm.DB { +func InitDB(shouldMigrate bool) *gorm.DB { db, err := gorm.Open(sqlite.Open("/app/data/nba.db"), &gorm.Config{}) if err != nil { - log.Printf("/app/config/database.go:11\n[error] failed to initialize database, got error %v", err) - log.Fatal("Failed to connect database") + log.Fatalf("failed to connect database: %v", err) } - - // Track database operations metrics.DBOperationsTotal.WithLabelValues("connect", "database").Inc() - - // Auto migrate models - db.AutoMigrate(&models.PlayerAdvancedStat{}) - db.AutoMigrate(&models.PlayerTotalStat{}) - db.AutoMigrate(&models.PlayerShotChart{}) - db.AutoMigrate(&models.APIKey{}) - - metrics.DBOperationsTotal.WithLabelValues("migrate", "database").Inc() - + if shouldMigrate { + if err := db.AutoMigrate(&models.PlayerAdvancedStat{}); err != nil { + log.Fatalf("migrate PlayerAdvancedStat: %v", err) + } + if err := db.AutoMigrate(&models.PlayerTotalStat{}); err != nil { + log.Fatalf("migrate PlayerTotalStat: %v", err) + } + if err := db.AutoMigrate(&models.PlayerShotChart{}); err != nil { + log.Fatalf("migrate PlayerShotChart: %v", err) + } + if err := db.AutoMigrate(&models.APIKey{}); err != nil { + log.Fatalf("migrate APIKey: %v", err) + } + metrics.DBOperationsTotal.WithLabelValues("migrate", "database").Inc() + } + return db } \ No newline at end of file diff --git a/main.go b/main.go index a1602e7..46671b5 100644 --- a/main.go +++ b/main.go @@ -25,6 +25,7 @@ import ( "github.com/gofiber/fiber/v2/middleware/logger" "github.com/prometheus/client_golang/prometheus/promhttp" fiberswagger "github.com/swaggo/fiber-swagger" + // "gorm.io/gorm" "github.com/nprasad2077/NBA_Go/config" "github.com/nprasad2077/NBA_Go/controllers" @@ -36,29 +37,26 @@ import ( func main() { // ——— One-off import-data mode ——— if len(os.Args) > 1 && os.Args[1] == "import-data" { - db := config.InitDB() + // Run all migrations + import steps exactly once + db := config.InitDB(true) importPlayerAdvanced(db) log.Println("🎉 Player Advanced Import completed successfully") importPlayerAdvancedPlayoffs(db) log.Println("🎉 Player Advanced Playoffs Import completed successfully") - importPlayerTotalsScrape(db) - log.Println("🎉 Player Totals (scraped) Import completed successfully") + log.Println("🎉 Player Totals (scraped) Import completed successfully") - importPlayerTotalsPlayoffsScrape(db) - log.Println("🎉 Player Playoffs (scraped) Import completed successfully") + importPlayerTotalsPlayoffsScrape(db) + log.Println("🎉 Player Playoffs (scraped) Import completed successfully") - // importPlayerShotChart(db) - // log.Println("🎉 Player Shot Chart Import Completed Successfully ") - log.Println("🏀 ALL Imports completed successfully ✅ 🙌") return } - // gracefull shutdown context + // ——— Normal API startup: skip AutoMigrate ——— ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() @@ -75,14 +73,14 @@ func main() { }) // — CORS Allow ALL origins (development) — - app.Use(cors.New()) + app.Use(cors.New()) // middlewares app.Use(logger.New()) app.Use(middleware.MetricsMiddleware()) - // DB connection - db := config.InitDB() + // DB connection (no migrations on API startup) + db := config.InitDB(false) /* ---------- PUBLIC ROUTES (no API key) ---------- */ app.Get("/metrics", adaptor.HTTPHandler(promhttp.Handler()))