Goondex/internal/import/enrich.go

76 lines
1.6 KiB
Go

package import_service
import (
"context"
"log"
"strings"
"time"
"git.leaktechnologies.dev/stu/Goondex/internal/db"
"git.leaktechnologies.dev/stu/Goondex/internal/model"
"git.leaktechnologies.dev/stu/Goondex/internal/scraper/adultemp"
"git.leaktechnologies.dev/stu/Goondex/internal/scraper/merger"
)
type Enricher struct {
db *db.DB
adult *adultemp.Scraper
delay time.Duration
enabled bool
}
func NewEnricher(database *db.DB, delay time.Duration) (*Enricher, error) {
adult, err := adultemp.NewScraper()
if err != nil {
return nil, err
}
return &Enricher{
db: database,
adult: adult,
delay: delay,
enabled: true,
}, nil
}
// EnrichPerformer tries to fill missing fields via Adult Empire by name search.
func (e *Enricher) EnrichPerformer(ctx context.Context, p *model.Performer) {
if !e.enabled || p == nil {
return
}
name := strings.TrimSpace(p.Name)
if name == "" {
return
}
results, err := e.adult.SearchPerformersByName(ctx, name)
if err != nil || len(results) == 0 {
return
}
data, err := e.adult.ScrapePerformerByURL(ctx, results[0].URL)
if err != nil {
return
}
// Only merge when names reasonably match
if !merger.ShouldMerge(p.Name, data.Name) {
return
}
merged := merger.MergePerformerData(p, data)
// Preserve original source IDs (TPDB format)
merged.Source = p.Source
merged.SourceID = p.SourceID
merged.SourceNumericID = p.SourceNumericID
merged.ID = p.ID
store := db.NewPerformerStore(e.db)
if err := store.Create(merged); err != nil {
log.Printf("enrich: failed to update performer %s: %v", name, err)
}
if e.delay > 0 {
time.Sleep(e.delay)
}
}