package com.danielbohry.stocks.service.stock; import com.danielbohry.stocks.domain.Stock; import com.danielbohry.stocks.repository.stock.StockRepository; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.List; import java.util.Objects; import static java.util.Collections.emptyList; @Slf4j @Service @AllArgsConstructor public class StockService { private StockRepository repository; @Cacheable("allStockQuotes") public List getAll() { return repository.findAll() .stream() .sorted(Comparator.comparing(Stock::getName)) .toList(); } @Cacheable(value = "stockQuotesQuery", key = "#query") public List get(String query) { if (Objects.equals(query, "")) { return emptyList(); } log.debug("Querying stock with query [{}]", query); return repository.findLike(query); } @Cacheable(value = "stockQuotes", key = "#code") public Stock getByCode(String code) { log.debug("Getting stock by code [{}]", code); return repository.findByCode(code); } public List update(List quotes) { return repository.update(quotes); } public boolean isValid(String code) { return repository.isValid(code); } public Stock getStockQuote(String code) { return repository.getStockQuote(code); } }