feat: Add role-menu seeder and remove redundant ID field from M_Role_Menu
This commit is contained in:
parent
37d656999e
commit
7fa3971c70
|
|
@ -5,7 +5,6 @@ import (
|
|||
)
|
||||
|
||||
type M_Role_Menu struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"`
|
||||
RoleID uuid.UUID `gorm:"type:uuid;not null;index" json:"role_id"`
|
||||
MenuID uuid.UUID `gorm:"type:uuid;not null;index" json:"menu_id"`
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ func Seeder(db *gorm.DB) error {
|
|||
seeds.ListUserRoleSeeder,
|
||||
seeds.ListPermissionSeeder,
|
||||
seeds.ListRolePermissionSeeder,
|
||||
seeds.ListRoleMenuSeeder,
|
||||
}
|
||||
|
||||
for _, seeder := range seeders {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
[
|
||||
{
|
||||
"role_name": "Super Admin",
|
||||
"menu_name": "Dashboard"
|
||||
},
|
||||
{
|
||||
"role_name": "Super Admin",
|
||||
"menu_name": "Users"
|
||||
},
|
||||
{
|
||||
"role_name": "Super Admin",
|
||||
"menu_name": "Roles & Permissions"
|
||||
},
|
||||
{
|
||||
"role_name": "Super Admin",
|
||||
"menu_name": "Products"
|
||||
},
|
||||
{
|
||||
"role_name": "Super Admin",
|
||||
"menu_name": "Reports"
|
||||
},
|
||||
{
|
||||
"role_name": "Admin",
|
||||
"menu_name": "Dashboard"
|
||||
},
|
||||
{
|
||||
"role_name": "Admin",
|
||||
"menu_name": "Users"
|
||||
},
|
||||
{
|
||||
"role_name": "Admin",
|
||||
"menu_name": "Roles & Permissions"
|
||||
},
|
||||
{
|
||||
"role_name": "User",
|
||||
"menu_name": "Dashboard"
|
||||
},
|
||||
{
|
||||
"role_name": "User",
|
||||
"menu_name": "Products"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package seeds
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||
"github.com/sirupsen/logrus"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type RoleMenuSeed struct {
|
||||
RoleName string `json:"role_name"`
|
||||
MenuName string `json:"menu_name"`
|
||||
}
|
||||
|
||||
func ListRoleMenuSeeder(db *gorm.DB) error {
|
||||
jsonFile, err := os.Open("./database/seeders/json/role_menus.json")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
jsonData, err := io.ReadAll(jsonFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var listRoleMenu []RoleMenuSeed
|
||||
if err := json.Unmarshal(jsonData, &listRoleMenu); err != nil {
|
||||
return err
|
||||
}
|
||||
hasTable := db.Migrator().HasTable(&entities.M_Role_Menu{})
|
||||
if !hasTable {
|
||||
if err := db.Migrator().CreateTable(&entities.M_Role_Menu{}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, data := range listRoleMenu {
|
||||
var role entities.M_Role
|
||||
var menu entities.M_Menu
|
||||
|
||||
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.MenuName).First(&menu).Error; err != nil {
|
||||
logrus.Error("Menu not found: ", err)
|
||||
return err // menu tidak ditemukan
|
||||
}
|
||||
var roleMenu entities.M_Role_Menu
|
||||
if err := db.FirstOrCreate(&roleMenu, entities.M_Role_Menu{
|
||||
RoleID: role.ID,
|
||||
MenuID: menu.ID,
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue