59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package seeds
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type UserRoleSeed struct {
|
|
UserName string `json:"name"`
|
|
RoleName string `json:"role_name"`
|
|
}
|
|
|
|
func ListUserRoleSeeder(db *gorm.DB) error {
|
|
jsonFile, err := os.Open("./database/seeders/json/users_roles.json")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
jsonData, err := io.ReadAll(jsonFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var listUserRole []UserRoleSeed
|
|
if err := json.Unmarshal(jsonData, &listUserRole); err != nil {
|
|
return err
|
|
}
|
|
hasTable := db.Migrator().HasTable(&entities.M_User_Role{})
|
|
if !hasTable {
|
|
if err := db.Migrator().CreateTable(&entities.M_User_Role{}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
for _, data := range listUserRole {
|
|
var user entities.M_User
|
|
var role entities.M_Role
|
|
|
|
if err := db.Where("name = ?", data.UserName).First(&user).Error; err != nil {
|
|
return err // user tidak ditemukan
|
|
}
|
|
if err := db.Where("name = ?", data.RoleName).First(&role).Error; err != nil {
|
|
return err // role tidak ditemukan
|
|
}
|
|
var userRole entities.M_User_Role
|
|
if err := db.FirstOrCreate(&userRole, entities.M_User_Role{
|
|
UserID: user.ID,
|
|
RoleID: role.ID,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|