package seeds import ( "encoding/json" "fmt" "io" "os" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "gorm.io/gorm" ) type PermissionSeed struct { ID string `json:"id"` Name string `json:"name"` MenuName string `json:"menu_name"` } func ListPermissionSeeder(db *gorm.DB) error { jsonFile, err := os.Open("./database/seeders/json/permissions.json") if err != nil { fmt.Println("Error opening file:", err) return err } jsonData, err := io.ReadAll(jsonFile) if err != nil { fmt.Println("Error reading file:", err) return err } var listPermission []PermissionSeed if err := json.Unmarshal(jsonData, &listPermission); err != nil { fmt.Println("Error unmarshalling JSON:", err) return err } hasTable := db.Migrator().HasTable(&entities.M_Permissions{}) if !hasTable { fmt.Println("Creating table: M_Permissions") if err := db.Migrator().CreateTable(&entities.M_Permissions{}); err != nil { return err } } for _, data := range listPermission { var permission entities.M_Permissions var menu entities.M_Menu if err := db.Where("name = ?", data.MenuName).First(&menu).Error; err != nil { fmt.Println("Menu not found:", err) return err // menu tidak ditemukan } if err := db.FirstOrCreate(&permission, entities.M_Permissions{ Name: data.Name, MenuID: menu.ID, }).Error; err != nil { fmt.Println("Error seeding permission:", err) return err } } return nil }