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

74 lines
1.6 KiB
Go

package seeds
import (
"encoding/json"
"errors"
"fmt"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"gorm.io/gorm"
)
type ClientSeed struct {
ID string `json:"id"`
Name string `json:"name"`
PIC string `json:"pic"`
Phone string `json:"phone"`
Email string `json:"email"`
Address string `json:"address"`
LogoUrl string `json:"logo_url"`
}
func ListClientSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./database/seeders/json/clients.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 listClient []ClientSeed
if err := json.Unmarshal(jsonData, &listClient); err != nil {
fmt.Println("Error unmarshalling JSON:", err)
return err
}
hasTable := db.Migrator().HasTable(&entities.M_Client{})
if !hasTable {
fmt.Println("Creating table: M_Client")
if err := db.Migrator().CreateTable(&entities.M_Client{}); err != nil {
return err
}
}
for _, data := range listClient {
var client entities.M_Client
err := db.Where(&entities.M_Client{Name: data.Name}).First(&client).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("Error querying client:", err)
return err
}
if err := db.FirstOrCreate(&client, entities.M_Client{
ID: client.ID,
Name: data.Name,
PIC: data.PIC,
Phone: data.Phone,
Email: data.Email,
Address: data.Address,
// Logo: data.LogoUrl,
}).Error; err != nil {
fmt.Println("Error seeding client:", err)
return err
}
}
return nil
}