wms-be/database/seeders/seeds/menu_client_seed.go

60 lines
1.4 KiB
Go

package seeds
import (
"encoding/json"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
type MenuClientSeed struct {
MenuName string `json:"menu_name"`
ClientName string `json:"client_name"`
}
func ListMenuClientSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./database/seeders/json/menu_clients.json")
if err != nil {
return err
}
jsonData, err := io.ReadAll(jsonFile)
if err != nil {
return err
}
var listMenuClient []MenuClientSeed
if err := json.Unmarshal(jsonData, &listMenuClient); err != nil {
return err
}
hasTable := db.Migrator().HasTable(&entities.M_Menu_Client{})
if !hasTable {
if err := db.Migrator().CreateTable(&entities.M_Menu_Client{}); err != nil {
return err
}
}
for _, data := range listMenuClient {
var menu entities.M_Menu
var client entities.M_Client
if err := db.Where("name = ?", data.MenuName).First(&menu).Error; err != nil {
logrus.Error("Menu not found: ", err)
return err // menu tidak ditemukan
}
if err := db.Where("name = ?", data.ClientName).First(&client).Error; err != nil {
logrus.Error("Client not found: ", err)
return err // client tidak ditemukan
}
var menuClient entities.M_Menu_Client
if err := db.FirstOrCreate(&menuClient, entities.M_Menu_Client{
MenuID: menu.ID,
ClientID: client.ID,
}).Error; err != nil {
return err
}
}
return nil
}