package config import ( "fmt" "log" "os" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" "api.qobiltu.id/models" "github.com/joho/godotenv" ) var DB *gorm.DB var err error var Salt string func init() { godotenv.Load() if err != nil { fmt.Println("Gagal membaca file .env") return } os.Setenv("TZ", "Asia/Jakarta") dbHost := os.Getenv("DB_HOST") dbPort := os.Getenv("DB_PORT") dbUser := os.Getenv("DB_USER") dbPassword := os.Getenv("DB_PASSWORD") dbName := os.Getenv("DB_NAME") Salt := os.Getenv("SALT") dsn := "host=" + dbHost + " user=" + dbUser + " password=" + dbPassword + " dbname=" + dbName + " port=" + dbPort + " sslmode=disable TimeZone=Asia/Jakarta" DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{TranslateError: true}) if err != nil { panic(err) } if Salt == "" { Salt = "D3f4u|t" } // Call AutoMigrateAll to perform auto-migration AutoMigrateAll(DB) } func AutoMigrateAll(db *gorm.DB) { // Enable logger to see SQL logs db.Logger.LogMode(logger.Info) // Auto-migrate all models err := db.AutoMigrate( &models.Account{}, &models.AccountDetails{}, &models.EmailVerification{}, &models.ExternalAuth{}, &models.FCM{}, &models.ForgotPassword{}, &models.Academy{}, &models.AcademyMaterial{}, &models.AcademyMaterialProgress{}, &models.RegionCity{}, &models.RegionProvince{}, &models.OptionCategory{}, &models.OptionValues{}, &models.Quiz{}, &models.Question{}, &models.Answer{}, &models.QuizAttempt{}, &models.UserAnswer{}, &models.PersonalityAndPreferenceCV{}, &models.FamilyMemberCV{}, &models.PhysicalAndHealthCV{}, &models.WorshipAndReligiousUnderstandingCV{}, &models.EducationCV{}, &models.JobCV{}, &models.AchievementCV{}, &models.MarriageReadinessProfile{}, &models.PartnerCriteria{}, ) if err != nil { log.Fatal(err) } sequences := []string{ `CREATE SEQUENCE IF NOT EXISTS seq_ikh_counter START 1 INCREMENT 1 MINVALUE 1;`, `CREATE SEQUENCE IF NOT EXISTS seq_akh_counter START 1 INCREMENT 1 MINVALUE 1;`, } for _, seq := range sequences { if err := db.Exec(seq).Error; err != nil { fmt.Printf("Gagal membuat sequence: %v", err) } } fmt.Println("Auto-migration sequence check completed successfully") }