feat: add Apple jobs crawler and implement duplicate-prevention logic for target loading
This commit is contained in:
@@ -28,20 +28,23 @@ func (db *DB) LoadTargetsFromYAML(filepath string) error {
|
||||
return fmt.Errorf("could not parse target config: %w", err)
|
||||
}
|
||||
|
||||
// Check if we already have targets
|
||||
targets, err := db.GetAllTargets()
|
||||
// Get existing targets to prevent duplicates
|
||||
existingTargets, err := db.GetAllTargets()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(targets) > 0 {
|
||||
// Do not overwrite existing targets
|
||||
return nil
|
||||
|
||||
existingURLs := make(map[string]bool)
|
||||
for _, t := range existingTargets {
|
||||
existingURLs[t.TargetURL] = true
|
||||
}
|
||||
|
||||
for _, t := range config.Targets {
|
||||
_, err := db.CreateTarget(t.Name, t.TargetURL, t.Platform)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to insert target %s: %w", t.Name, err)
|
||||
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
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"github.com/hireme/hireme/internal/db"
|
||||
"github.com/hireme/hireme/internal/filter"
|
||||
"github.com/hireme/hireme/internal/logger"
|
||||
"github.com/hireme/hireme/pkg/crawler/apple"
|
||||
"github.com/hireme/hireme/pkg/crawler/google"
|
||||
)
|
||||
|
||||
@@ -292,5 +293,8 @@ func (p *WorkerPool) getCrawlerForPlatform(platform string) crawler.SiteCrawler
|
||||
if strings.Contains(plat, "google") {
|
||||
return google.NewGoogleCrawler()
|
||||
}
|
||||
if strings.Contains(plat, "apple") {
|
||||
return apple.NewAppleCrawler()
|
||||
}
|
||||
return crawler.NewGenericCrawler()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user