package db import ( "fmt" "os" "gopkg.in/yaml.v3" ) type targetConfig struct { Targets []struct { Name string `yaml:"name"` TargetURL string `yaml:"target_url"` Platform string `yaml:"platform"` IsActive bool `yaml:"is_active"` } `yaml:"targets"` } // LoadTargetsFromYAML reads a YAML file and inserts targets into the database if it's empty func (db *DB) LoadTargetsFromYAML(filepath string) error { data, err := os.ReadFile(filepath) if err != nil { return fmt.Errorf("could not read target config: %w", err) } var config targetConfig if err := yaml.Unmarshal(data, &config); err != nil { return fmt.Errorf("could not parse target config: %w", err) } // Get existing targets to prevent duplicates existingTargets, err := db.GetAllTargets() if err != nil { return err } existingURLs := make(map[string]bool) for _, t := range existingTargets { existingURLs[t.TargetURL] = true } for _, t := range config.Targets { if !existingURLs[t.TargetURL] { _, err := db.CreateTarget(t.Name, t.TargetURL, t.Platform) if err != nil { return fmt.Errorf("failed to insert target %s: %w", t.Name, err) } } } return nil }