package bloomberg import ( "context" "fmt" "github.com/tradarr/backend/internal/crypto" "github.com/tradarr/backend/internal/models" "github.com/tradarr/backend/internal/scraper" ) // DynamicBloomberg charge les credentials depuis la DB avant chaque scraping type DynamicBloomberg struct { repo *models.Repository enc *crypto.Encryptor chromePath string } func NewDynamic(repo *models.Repository, enc *crypto.Encryptor, chromePath string) *DynamicBloomberg { return &DynamicBloomberg{repo: repo, enc: enc, chromePath: chromePath} } func (d *DynamicBloomberg) Name() string { return "bloomberg" } func (d *DynamicBloomberg) Scrape(ctx context.Context, symbols []string) ([]scraper.Article, error) { // Récupérer la source Bloomberg source, err := d.repo.GetSourceByType("bloomberg") if err != nil || source == nil { return nil, fmt.Errorf("bloomberg source not found") } cred, err := d.repo.GetCredentials(source.ID) if err != nil { return nil, fmt.Errorf("get bloomberg credentials: %w", err) } if cred == nil || cred.Username == "" { return nil, fmt.Errorf("bloomberg credentials not configured — please set them in the admin panel") } password := "" if cred.PasswordEncrypted != "" { password, err = d.enc.Decrypt(cred.PasswordEncrypted) if err != nil { return nil, fmt.Errorf("decrypt bloomberg password: %w", err) } } b := New(cred.Username, password, d.chromePath) return b.Scrape(ctx, symbols) }