// cmd/run-server/seed/runner.go package seed import ( "log" "time" "gorm.io/gorm" ) type Config struct { Truncate bool Genres bool FixedTestData bool // 💎 Deterministic testing data Users bool Projects bool Tracks bool Comments bool Ratings bool } func (config *Config) Run(db *gorm.DB) { log.Println("🌱 [SEED] Starting structural database seed execution pipeline...") start := time.Now() log.Printf("db: %v\n", db) err := db.Transaction(func(tx *gorm.DB) error { // 0. Optional State Wipe if config.Truncate { log.Println("⚠️ [SEED] Truncating existing transactional tables for fresh environment setup...") tables := []string{"ratings", "comments", "track_coworkers", "tracks", "projects", "user_preferred_genres", "uploads", "users", "genres"} for _, table := range tables { if err := tx.Exec("TRUNCATE TABLE " + table + " RESTART IDENTITY CASCADE").Error; err != nil { return err } } } // 1. Core Tier Frameworks if config.Genres { if err := seedGenres(tx); err != nil { return err } } // 2. 💎 DETERMINISTIC TEST DATA MODULE 💎 if config.FixedTestData { if err := seedFixedTestData(tx); err != nil { return err } } // 3. Random Load Testing Modules if config.Users { if err := seedUsers(tx, 45); err != nil { return err } } if config.Projects { if err := seedProjects(tx, 30); err != nil { return err } } if config.Tracks { if err := seedTracks(tx, 40); err != nil { return err } } if config.Comments { if err := seedComments(tx, 80); err != nil { return err } } if config.Ratings { if err := seedRatings(tx); err != nil { return err } } return nil }) if err != nil { log.Fatalf("❌ [SEED] Pipeline execution aborted. Transaction rolled back safely: %v", err) } log.Printf("✅ [SEED] Sequence completed successfully in %v!", time.Since(start)) }