package seeds import ( "encoding/json" "fmt" "io" "os" "github.com/Caknoooo/go-gin-clean-starter/database/entities" "github.com/google/uuid" "gorm.io/gorm" ) // { // "id": "d3b7e1f5-4c2a-496b-9e9a-2c9d7d3f6f1b", // "name": "Reports", // "icon_url": "/icons/reports.svg", // "url": "/reports", // "sequence": 5, // "mode": "desktop", // "table_name": "m_reports", // "status": "inactive", // "parent_id": null // } type MenuSeed struct { ID string `json:"id"` Name string `json:"name"` IconUrl string `json:"icon_url"` URL string `json:"url"` Sequence int `json:"sequence"` Mode string `json:"mode"` TableName string `json:"table_name"` Status string `json:"status"` ParentID string `json:"parent_id"` } func ListMenuSeeder(db *gorm.DB) error { jsonFile, err := os.Open("./database/seeders/json/menus.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 listMenu []MenuSeed if err := json.Unmarshal(jsonData, &listMenu); err != nil { fmt.Println("Error unmarshalling JSON:", err) return err } hasTable := db.Migrator().HasTable(&entities.M_Menu{}) if !hasTable { fmt.Println("Creating table: M_Menu") if err := db.Migrator().CreateTable(&entities.M_Menu{}); err != nil { return err } } for _, data := range listMenu { var parentUUID *uuid.UUID if data.ParentID != "" { parsed, err := uuid.Parse(data.ParentID) if err != nil { fmt.Println("Error parsing ParentID:", err) return err } parentUUID = &parsed } menuID := uuid.Nil if data.ID != "" { parsedID, err := uuid.Parse(data.ID) if err != nil { fmt.Println("Error parsing Menu ID:", err) return err } menuID = parsedID } menu := entities.M_Menu{ ID: menuID, Name: data.Name, IconUrl: data.IconUrl, Url: data.URL, Sequence: data.Sequence, Mode: data.Mode, TableName: data.TableName, Status: data.Status, ParentID: parentUUID, } if err := db.Where("name = ?", data.Name).FirstOrCreate(&menu).Error; err != nil { fmt.Println("Error seeding Menu:", err) return err } } return nil }