127 lines
2.9 KiB
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
|
|
// }
|