backend-server-v2/internal/db/seed.go

83 lines
1.7 KiB
Go

package db
import (
"fmt"
"trustcontact/internal/auth"
"trustcontact/internal/models"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
func Seed(database *gorm.DB) error {
passwordHash, err := auth.HashPassword("password")
if err != nil {
return fmt.Errorf("hash seed password: %w", err)
}
seedUsers := []models.User{
{
Name: "Admin User",
Email: "admin@example.com",
Role: models.RoleAdmin,
EmailVerified: true,
PasswordHash: passwordHash,
},
{
Name: "Normal User",
Email: "user@example.com",
Role: models.RoleUser,
EmailVerified: true,
PasswordHash: passwordHash,
},
{
Name: "Demo One",
Email: "demo1@example.com",
Role: models.RoleUser,
EmailVerified: true,
PasswordHash: passwordHash,
},
{
Name: "Demo Two",
Email: "demo2@example.com",
Role: models.RoleUser,
EmailVerified: true,
PasswordHash: passwordHash,
},
{
Name: "Demo Three",
Email: "demo3@example.com",
Role: models.RoleUser,
EmailVerified: true,
PasswordHash: passwordHash,
},
}
for _, user := range seedUsers {
if err := upsertUser(database, user); err != nil {
return err
}
}
return nil
}
func upsertUser(database *gorm.DB, user models.User) error {
result := database.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "email"}},
DoUpdates: clause.AssignmentColumns([]string{
"name",
"role",
"email_verified",
"password_hash",
"updated_at",
}),
}).Create(&user)
if result.Error != nil {
return fmt.Errorf("seed user %s: %w", user.Email, result.Error)
}
return nil
}