|
|
@@ -2,7 +2,6 @@ package com.danielbohry.stocks.repository;
|
|
|
|
|
|
import com.danielbohry.stocks.client.StockClient;
|
|
|
import com.danielbohry.stocks.domain.Quote;
|
|
|
-import com.danielbohry.stocks.exception.NotFoundException;
|
|
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
|
import feign.FeignException;
|
|
|
@@ -14,9 +13,9 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Repository;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.time.LocalDateTime;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -26,7 +25,6 @@ import static java.time.LocalDateTime.now;
|
|
|
@Repository
|
|
|
public class StockRepository {
|
|
|
|
|
|
- public static final LocalDateTime LAST_FIVE_DAYS = LocalDateTime.now().minusDays(5);
|
|
|
private final QuoteRepository repository;
|
|
|
private final StockClient client;
|
|
|
private final String key;
|
|
|
@@ -38,7 +36,7 @@ public class StockRepository {
|
|
|
}
|
|
|
|
|
|
public Set<Quote> findLike(String query) {
|
|
|
- Set<Quote> quotes = repository.findByNameContaining(query, LAST_FIVE_DAYS);
|
|
|
+ List<Quote> quotes = repository.findByNameOrCode(query);
|
|
|
Set<String> addedCodes = new HashSet<>();
|
|
|
return quotes.stream()
|
|
|
.filter(quote -> addedCodes.add(quote.getCode()))
|
|
|
@@ -46,22 +44,19 @@ public class StockRepository {
|
|
|
}
|
|
|
|
|
|
public Quote findByCode(String code) {
|
|
|
-// Optional<Quote> quote = repository.findLatestByCode(code).stream().findFirst();
|
|
|
-// return quote.orElseGet(() -> repository.save(getStockQuote(code)));
|
|
|
- return repository.findLatestByCode(code).stream().findFirst()
|
|
|
- .orElseThrow(() -> new NotFoundException("No stock found"));
|
|
|
+ Optional<Quote> quote = repository.findByCode(code);
|
|
|
+ return quote.orElseGet(() -> repository.save(getStockQuote(code)));
|
|
|
}
|
|
|
|
|
|
public List<Quote> update(List<Quote> quote) {
|
|
|
- return repository.saveAll(quote);
|
|
|
- }
|
|
|
-
|
|
|
- public void deleteAll() {
|
|
|
- repository.deleteAll();
|
|
|
+ return repository.saveAll(quote.stream().peek(i -> {
|
|
|
+ Quote current = repository.findByCode(i.getCode()).orElse(i);
|
|
|
+ i.setId(current.getId());
|
|
|
+ }).toList());
|
|
|
}
|
|
|
|
|
|
public boolean isValid(String code) {
|
|
|
- Quote quote = repository.findLatestByCode(code).stream().findFirst().orElse(null);
|
|
|
+ Quote quote = repository.findByCode(code).stream().findFirst().orElse(null);
|
|
|
|
|
|
if (quote != null) return true;
|
|
|
|
|
|
@@ -75,7 +70,7 @@ public class StockRepository {
|
|
|
}
|
|
|
|
|
|
public Quote getStockQuote(String code) {
|
|
|
- Quote quote = repository.findLatestByCode(code).stream().findFirst().orElse(new Quote(code, null, null, now()));
|
|
|
+ Quote quote = repository.findByCode(code).stream().findFirst().orElse(new Quote(code, null, null, now()));
|
|
|
quote.setPrice(getLastPrice(quote));
|
|
|
|
|
|
if (quote.getName() == null) {
|