v24.go 972 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package migrations
  2. import (
  3. "github.com/pkg/errors"
  4. gouuid "github.com/satori/go.uuid"
  5. "gorm.io/gorm"
  6. )
  7. func addUserLocalEmail(db *gorm.DB) error {
  8. type User struct {
  9. ID int64 `gorm:"primaryKey"`
  10. LocalEmail string `xorm:"NOT NULL" gorm:"not null"`
  11. }
  12. if db.Migrator().HasColumn(&User{}, "LocalEmail") {
  13. return errMigrationSkipped
  14. }
  15. return db.Transaction(func(tx *gorm.DB) error {
  16. err := tx.Migrator().AddColumn(&User{}, "LocalEmail")
  17. if err != nil {
  18. return err
  19. }
  20. const limit = 100
  21. for {
  22. var res []User
  23. err := tx.Table("user").Where("type = ?", 0).Where("local_email = ''").Limit(limit).Find(&res).Error
  24. if err != nil {
  25. return errors.Wrap(err, "query user")
  26. }
  27. for _, r := range res {
  28. r.LocalEmail = gouuid.NewV4().String() + "@fake.localhost"
  29. err = tx.Save(&r).Error
  30. if err != nil {
  31. return errors.Wrap(err, "save user")
  32. }
  33. }
  34. if len(res) < limit {
  35. break
  36. }
  37. }
  38. return nil
  39. })
  40. }