| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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<StockInfo> fetchStockInfo(List<Stock> quotes) {
- List<StockInfo> response = new ArrayList<>();
- try {
- String[] tickers = quotes.stream()
- .map(Stock::getCode)
- .filter(ObjectUtils::isNotEmpty)
- .toArray(String[]::new);
- List<StockMetadataResponse> 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;
- }
- }
- }
|