103 lines
2.2 KiB
Go
103 lines
2.2 KiB
Go
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
|
|
}
|