mirror of https://github.com/gogs/gogs.git
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package migrations
|
|
|
|
import (
|
|
"fmt"
|
|
gouuid "github.com/satori/go.uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func addUserLocalEmail(db *gorm.DB) error {
|
|
type User struct {
|
|
ID int64 `gorm:"primaryKey"`
|
|
LocalEmail string
|
|
}
|
|
|
|
type UserNotNULL struct {
|
|
ID int64 `gorm:"primaryKey"`
|
|
LocalEmail string
|
|
}
|
|
|
|
if db.Migrator().HasColumn(&User{}, "LocalEmail") {
|
|
return errMigrationSkipped
|
|
}
|
|
|
|
return db.Transaction(func(tx *gorm.DB) error {
|
|
err := tx.Migrator().AddColumn(&User{}, "LocalEmail")
|
|
if err != nil {
|
|
return fmt.Errorf("add column user.local_email error: %s", err.Error())
|
|
}
|
|
|
|
const limit = 100
|
|
for {
|
|
var res []User
|
|
err := tx.Table("user").Where("type = ?", 0).Where("local_email = ''").Limit(limit).Find(&res).Error
|
|
if err != nil {
|
|
return fmt.Errorf("query user error: %s", err.Error())
|
|
}
|
|
|
|
for _, r := range res {
|
|
r.LocalEmail = gouuid.NewV4().String() + "@fake.localhost"
|
|
err = tx.Save(&r).Error
|
|
if err != nil {
|
|
return fmt.Errorf("save column user.local_email error: %s", err)
|
|
}
|
|
}
|
|
|
|
if len(res) < limit {
|
|
break
|
|
}
|
|
}
|
|
|
|
err = tx.Migrator().AlterColumn(&User{}, "LocalEmail")
|
|
if err != nil {
|
|
return fmt.Errorf("alter column user.local_email error: %s", err.Error())
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|