diff --git a/database/entities/m_role_menu_entity.go b/database/entities/m_role_menu_entity.go index e025116..a936980 100644 --- a/database/entities/m_role_menu_entity.go +++ b/database/entities/m_role_menu_entity.go @@ -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"` diff --git a/database/seeder.go b/database/seeder.go index fb56030..b027517 100644 --- a/database/seeder.go +++ b/database/seeder.go @@ -14,6 +14,7 @@ func Seeder(db *gorm.DB) error { seeds.ListUserRoleSeeder, seeds.ListPermissionSeeder, seeds.ListRolePermissionSeeder, + seeds.ListRoleMenuSeeder, } for _, seeder := range seeders { diff --git a/database/seeders/json/role_menus.json b/database/seeders/json/role_menus.json new file mode 100644 index 0000000..eee85c0 --- /dev/null +++ b/database/seeders/json/role_menus.json @@ -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" + } +] diff --git a/database/seeders/seeds/role_menu_seed.go b/database/seeders/seeds/role_menu_seed.go new file mode 100644 index 0000000..a31a633 --- /dev/null +++ b/database/seeders/seeds/role_menu_seed.go @@ -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 +}