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

127 lines
2.9 KiB
Go

package seeds
import (
"encoding/json"
"errors"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
"gorm.io/gorm"
)
type UserSeed struct {
Name string `json:"name"`
Username string `json:"username"`
Password string `json:"password"`
Gender string `json:"gender"`
Address string `json:"address"`
Phone string `json:"phone"`
Email string `json:"email"`
PhotoUrl string `json:"photo_url"`
ClientName string `json:"client_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.M_User{})
if !hasTable {
if err := db.Migrator().CreateTable(&entities.M_User{}); err != nil {
return err
}
}
for _, data := range listUser {
var client entities.M_Client
if err := db.Where("name = ?", data.ClientName).First(&client).Error; err != nil {
return err // client tidak ditemukan
}
var user entities.M_User
err := db.Where(&entities.M_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 {
passwordEncrypted, err := utils.HashPassword(data.Password)
if err != nil {
return err
}
newUser := entities.M_User{
Name: data.Name,
Username: data.Username,
Password: passwordEncrypted,
Gender: data.Gender,
Address: data.Address,
Phone: data.Phone,
Email: data.Email,
PhotoUrl: data.PhotoUrl,
ClientID: client.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
// }