stato intermedio
This commit is contained in:
@@ -11,5 +11,6 @@ func Migrate(database *gorm.DB) error {
|
||||
&models.User{},
|
||||
&models.EmailVerificationToken{},
|
||||
&models.PasswordResetToken{},
|
||||
&models.UserProperties{},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -23,6 +23,10 @@ func Seed(database *gorm.DB) error {
|
||||
Role: models.RoleAdmin,
|
||||
EmailVerified: true,
|
||||
PasswordHash: passwordHash,
|
||||
Properties: models.UserProperties{
|
||||
Lang: "en",
|
||||
Dark: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Normal User",
|
||||
@@ -30,6 +34,10 @@ func Seed(database *gorm.DB) error {
|
||||
Role: models.RoleUser,
|
||||
EmailVerified: true,
|
||||
PasswordHash: passwordHash,
|
||||
Properties: models.UserProperties{
|
||||
Lang: "it",
|
||||
Dark: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Demo One",
|
||||
@@ -37,6 +45,10 @@ func Seed(database *gorm.DB) error {
|
||||
Role: models.RoleUser,
|
||||
EmailVerified: true,
|
||||
PasswordHash: passwordHash,
|
||||
Properties: models.UserProperties{
|
||||
Lang: "en",
|
||||
Dark: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Demo Two",
|
||||
@@ -44,6 +56,10 @@ func Seed(database *gorm.DB) error {
|
||||
Role: models.RoleUser,
|
||||
EmailVerified: true,
|
||||
PasswordHash: passwordHash,
|
||||
Properties: models.UserProperties{
|
||||
Lang: "en",
|
||||
Dark: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Demo Three",
|
||||
@@ -51,11 +67,20 @@ func Seed(database *gorm.DB) error {
|
||||
Role: models.RoleUser,
|
||||
EmailVerified: true,
|
||||
PasswordHash: passwordHash,
|
||||
Properties: models.UserProperties{
|
||||
Lang: "en",
|
||||
Dark: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, user := range seedUsers {
|
||||
if err := upsertUser(database, user); err != nil {
|
||||
userID, err := upsertUser(database, user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user.Properties.UserId = userID
|
||||
if err := upsertUserProperties(database, user.Properties, user.Email); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -63,7 +88,7 @@ func Seed(database *gorm.DB) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func upsertUser(database *gorm.DB, user models.User) error {
|
||||
func upsertUser(database *gorm.DB, user models.User) (string, error) {
|
||||
result := database.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "email"}},
|
||||
DoUpdates: clause.AssignmentColumns([]string{
|
||||
@@ -73,9 +98,26 @@ func upsertUser(database *gorm.DB, user models.User) error {
|
||||
"password_hash",
|
||||
"updated_at",
|
||||
}),
|
||||
}).Create(&user)
|
||||
}).Omit("Properties").Create(&user)
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("seed user %s: %w", user.Email, result.Error)
|
||||
return "", fmt.Errorf("seed user %s: %w", user.Email, result.Error)
|
||||
}
|
||||
|
||||
var persisted models.User
|
||||
if err := database.Select("id").Where("email = ?", user.Email).First(&persisted).Error; err != nil {
|
||||
return "", fmt.Errorf("load seeded user %s: %w", user.Email, err)
|
||||
}
|
||||
|
||||
return persisted.ID, nil
|
||||
}
|
||||
|
||||
func upsertUserProperties(database *gorm.DB, props models.UserProperties, userEmail string) error {
|
||||
result := database.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "user_id"}},
|
||||
DoNothing: true,
|
||||
}).Create(&props)
|
||||
if result.Error != nil {
|
||||
return fmt.Errorf("seed user properties %s: %w", userEmail, result.Error)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user