FinanceClient.java 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.danielbohry.stocks.client;
  2. import com.danielbohry.stocks.domain.Stock;
  3. import com.danielbohry.stocks.domain.StockInfo;
  4. import com.danielbohry.stocks.repository.stock.StockRepository.StockMetadataResponse;
  5. import lombok.RequiredArgsConstructor;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang3.ObjectUtils;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.stereotype.Component;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import static java.time.Instant.now;
  13. @Slf4j
  14. @Component
  15. @RequiredArgsConstructor
  16. public class FinanceClient {
  17. private final StockClient client;
  18. @Value("${clients.stock.key}")
  19. private String key;
  20. public List<StockInfo> fetchStockInfo(List<Stock> quotes) {
  21. List<StockInfo> response = new ArrayList<>();
  22. try {
  23. String[] tickers = quotes.stream()
  24. .map(Stock::getCode)
  25. .filter(ObjectUtils::isNotEmpty)
  26. .toArray(String[]::new);
  27. List<StockMetadataResponse> metadata = client.getMetadata(key, String.join(",", tickers));
  28. metadata.forEach(meta -> response.add(StockInfo.builder()
  29. .code(meta.getTicker().toUpperCase())
  30. .name(meta.getName())
  31. .headquarters(meta.getLocation())
  32. .industry(meta.getSector() + " - " + meta.getIndustry())
  33. .companyWebsite(meta.getCompanyWebsite())
  34. .secWebsite(meta.getSecWebsite())
  35. .updatedAt(now())
  36. .build()));
  37. return response;
  38. } catch (Exception e) {
  39. log.error(e.getMessage());
  40. return null;
  41. }
  42. }
  43. }