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 }