1.site_category_to_env_group.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package migrate
  2. import (
  3. "github.com/0xJacky/Nginx-UI/model"
  4. "github.com/go-gormigrate/gormigrate/v2"
  5. "gorm.io/gorm"
  6. )
  7. var SiteCategoryToEnvGroup = &gormigrate.Migration{
  8. ID: "20250405000001",
  9. Migrate: func(tx *gorm.DB) error {
  10. // Step 1: Create new env_groups table
  11. if err := tx.Migrator().AutoMigrate(&model.EnvGroup{}); err != nil {
  12. return err
  13. }
  14. // Step 2: Copy data from site_categories to env_groups
  15. if tx.Migrator().HasTable("site_categories") {
  16. var siteCategories []map[string]interface{}
  17. if err := tx.Table("site_categories").Find(&siteCategories).Error; err != nil {
  18. return err
  19. }
  20. for _, sc := range siteCategories {
  21. if err := tx.Table("env_groups").Create(sc).Error; err != nil {
  22. return err
  23. }
  24. }
  25. // Step 3: Update sites table to use env_group_id instead of site_category_id
  26. if tx.Migrator().HasColumn("sites", "site_category_id") {
  27. // First add the new column if it doesn't exist
  28. if !tx.Migrator().HasColumn("sites", "env_group_id") {
  29. if err := tx.Exec("ALTER TABLE sites ADD COLUMN env_group_id bigint").Error; err != nil {
  30. return err
  31. }
  32. }
  33. // Copy the values from site_category_id to env_group_id
  34. if err := tx.Exec("UPDATE sites SET env_group_id = site_category_id").Error; err != nil {
  35. return err
  36. }
  37. }
  38. }
  39. return nil
  40. },
  41. }