package com.danielbohry.stocks.client; import com.danielbohry.stocks.domain.Stock; import com.danielbohry.stocks.domain.StockInfo; import com.danielbohry.stocks.repository.stock.StockRepository.StockMetadataResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import static java.time.Instant.now; @Slf4j @Component @RequiredArgsConstructor public class FinanceClient { private final StockClient client; @Value("${clients.stock.key}") private String key; public List fetchStockInfo(List quotes) { List response = new ArrayList<>(); try { String[] tickers = quotes.stream() .map(Stock::getCode) .filter(ObjectUtils::isNotEmpty) .toArray(String[]::new); List metadata = client.getMetadata(key, String.join(",", tickers)); metadata.forEach(meta -> response.add(StockInfo.builder() .code(meta.getTicker().toUpperCase()) .name(meta.getName()) .headquarters(meta.getLocation()) .industry(meta.getSector() + " - " + meta.getIndustry()) .companyWebsite(meta.getCompanyWebsite()) .secWebsite(meta.getSecWebsite()) .updatedAt(now()) .build())); return response; } catch (Exception e) { log.error(e.getMessage()); return null; } } }