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

60 lines
1.5 KiB
Go

package seeds
import (
"encoding/json"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
type RolePermissionSeed struct {
RoleName string `json:"role_name"`
PermissionName string `json:"permission_name"`
}
func ListRolePermissionSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./database/seeders/json/role_permissions.json")
if err != nil {
return err
}
jsonData, err := io.ReadAll(jsonFile)
if err != nil {
return err
}
var listRolePermission []RolePermissionSeed
if err := json.Unmarshal(jsonData, &listRolePermission); err != nil {
return err
}
hasTable := db.Migrator().HasTable(&entities.M_Role_Permission{})
if !hasTable {
if err := db.Migrator().CreateTable(&entities.M_Role_Permission{}); err != nil {
return err
}
}
for _, data := range listRolePermission {
var role entities.M_Role
var permission entities.M_Permissions
if err := db.Where("name = ?", data.RoleName).First(&role).Error; err != nil {
logrus.Error("Role not found: ", err)
return err // role tidak ditemukan
}
if err := db.Where("name = ?", data.PermissionName).First(&permission).Error; err != nil {
logrus.Error("Permission not found: ", err)
return err // permission tidak ditemukan
}
var rolePermission entities.M_Role_Permission
if err := db.FirstOrCreate(&rolePermission, entities.M_Role_Permission{
RoleID: role.ID,
PermissionID: permission.ID,
}).Error; err != nil {
return err
}
}
return nil
}