Quick import now runs TPDB bulk with AE enrichment and per-page import CTAs
This commit is contained in:
parent
4f14d3b032
commit
d0f009f127
60
internal/import/enrich.go
Normal file
60
internal/import/enrich.go
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
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"
|
||||
)
|
||||
|
||||
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
|
||||
}
|
||||
merged := e.adult.ConvertPerformerToModel(data)
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
@ -24,18 +24,25 @@ type ProgressCallback func(update ProgressUpdate)
|
|||
|
||||
// Service handles bulk import operations
|
||||
type Service struct {
|
||||
db *db.DB
|
||||
scraper *tpdb.Scraper
|
||||
db *db.DB
|
||||
scraper *tpdb.Scraper
|
||||
enricher *Enricher
|
||||
}
|
||||
|
||||
// NewService creates a new import service
|
||||
func NewService(database *db.DB, scraper *tpdb.Scraper) *Service {
|
||||
return &Service{
|
||||
db: database,
|
||||
scraper: scraper,
|
||||
db: database,
|
||||
scraper: scraper,
|
||||
enricher: nil,
|
||||
}
|
||||
}
|
||||
|
||||
// WithEnricher configures enrichment (optional).
|
||||
func (s *Service) WithEnricher(enricher *Enricher) {
|
||||
s.enricher = enricher
|
||||
}
|
||||
|
||||
// ImportResult contains the results of an import operation
|
||||
type ImportResult struct {
|
||||
EntityType string
|
||||
|
|
@ -76,6 +83,9 @@ func (s *Service) BulkImportAllPerformersWithProgress(ctx context.Context, progr
|
|||
result.Failed++
|
||||
} else {
|
||||
result.Imported++
|
||||
if s.enricher != nil {
|
||||
s.enricher.EnrichPerformer(ctx, &performer)
|
||||
}
|
||||
}
|
||||
|
||||
// Send progress update
|
||||
|
|
|
|||
|
|
@ -1120,6 +1120,9 @@ func (s *Server) handleAPIBulkImportPerformers(w http.ResponseWriter, r *http.Re
|
|||
|
||||
scraper := tpdb.NewScraper("https://api.theporndb.net", apiKey)
|
||||
service := import_service.NewService(s.db, scraper)
|
||||
if enricher, err := import_service.NewEnricher(s.db, 1*time.Second); err == nil {
|
||||
service.WithEnricher(enricher)
|
||||
}
|
||||
|
||||
result, err := service.BulkImportAllPerformers(context.Background())
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -126,8 +126,8 @@
|
|||
</div>
|
||||
<div class="stat-actions">
|
||||
<a href="/performers" class="stat-link">View all →</a>
|
||||
<button class="btn-small" onclick="aeImportPerformerByName()">
|
||||
Quick import
|
||||
<button class="btn-small" onclick="bulkImportPerformers()">
|
||||
Import all
|
||||
<div class="hoverEffect"><div></div></div>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user