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 // }