wms-be/database/seeders/seeds/user_seed.go

118 lines
2.6 KiB
Go

package seeds
import (
"encoding/json"
"errors"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"gorm.io/gorm"
)
type UserSeed struct {
Name string `json:"name"`
TelpNumber string `json:"telp_number"`
Email string `json:"email"`
Password string `json:"password"`
Role string `json:"role"`
IsVerified bool `json:"is_verified"`
TenantName string `json:"tenant_name"`
}
func ListUserSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./database/seeders/json/users.json")
if err != nil {
return err
}
jsonData, err := io.ReadAll(jsonFile)
if err != nil {
return err
}
var listUser []UserSeed
if err := json.Unmarshal(jsonData, &listUser); err != nil {
return err
}
hasTable := db.Migrator().HasTable(&entities.User{})
if !hasTable {
if err := db.Migrator().CreateTable(&entities.User{}); err != nil {
return err
}
}
for _, data := range listUser {
var tenant entities.Tenant
if err := db.Where("name = ?", data.TenantName).First(&tenant).Error; err != nil {
return err // tenant tidak ditemukan
}
var user entities.User
err := db.Where(&entities.User{Email: data.Email}).First(&user).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
isData := db.Find(&user, "email = ?", data.Email).RowsAffected
if isData == 0 {
newUser := entities.User{
Name: data.Name,
TelpNumber: data.TelpNumber,
Email: data.Email,
Password: data.Password,
Role: data.Role,
IsVerified: data.IsVerified,
TenantID: tenant.ID,
}
if err := db.Create(&newUser).Error; err != nil {
return err
}
}
}
return nil
}
// func ListUserSeeder(db *gorm.DB) error {
// jsonFile, err := os.Open("./database/seeders/json/users.json")
// if err != nil {
// return err
// }
// jsonData, err := io.ReadAll(jsonFile)
// if err != nil {
// return err
// }
// var listUser []entities.User
// if err := json.Unmarshal(jsonData, &listUser); err != nil {
// return err
// }
// hasTable := db.Migrator().HasTable(&entities.User{})
// if !hasTable {
// if err := db.Migrator().CreateTable(&entities.User{}); err != nil {
// return err
// }
// }
// for _, data := range listUser {
// var user entities.User
// err := db.Where(&entities.User{Email: data.Email}).First(&user).Error
// if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
// return err
// }
// isData := db.Find(&user, "email = ?", data.Email).RowsAffected
// if isData == 0 {
// if err := db.Create(&data).Error; err != nil {
// return err
// }
// }
// }
// return nil
// }