Browse Source

enable saving multiple quote (history)

Daniel Bohry 1 year ago
parent
commit
8cc6df3be0

+ 0 - 1
src/main/java/com/danielbohry/stocks/domain/Quote.java

@@ -13,7 +13,6 @@ import java.time.LocalDateTime;
 @NoArgsConstructor
 public class Quote {
 
-    @Id
     private String code;
     private String name;
     private BigDecimal price;

+ 3 - 1
src/main/java/com/danielbohry/stocks/repository/QuoteRepository.java

@@ -1,6 +1,7 @@
 package com.danielbohry.stocks.repository;
 
 import com.danielbohry.stocks.domain.Quote;
+import feign.Param;
 import org.springframework.data.mongodb.repository.MongoRepository;
 import org.springframework.data.mongodb.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -14,6 +15,7 @@ public interface QuoteRepository extends MongoRepository<Quote, String> {
     @Query("{ $or: [ { 'name': { $regex: ?0, $options: 'i' } }, { 'code': { $regex: ?0, $options: 'i' } } ] }")
     List<Quote> findByNameContaining(String query);
 
-    Optional<Quote> findByCode(String code);
+    @Query(value = "{ 'code': ?0 }", sort = "{ 'updatedAt': -1 }")
+    Optional<Quote> findLatestByCode(@Param("code") String code);
 
 }

+ 4 - 3
src/main/java/com/danielbohry/stocks/repository/StockRepository.java

@@ -41,7 +41,7 @@ public class StockRepository {
     }
 
     public Quote findByCode(String code) {
-        Optional<Quote> quote = repository.findByCode(code);
+        Optional<Quote> quote = repository.findLatestByCode(code);
         return quote.orElseGet(() -> repository.save(getStockQuote(code)));
     }
 
@@ -50,11 +50,12 @@ public class StockRepository {
     }
 
     public boolean isValid(String code) {
-        Quote quote = repository.findByCode(code).orElse(null);
+        Quote quote = repository.findLatestByCode(code).orElse(null);
 
         if (quote != null) return true;
 
         try {
+            log.info("Current stock's name is null. Requesting latest information...");
             client.getStockInfo(code, key);
             return true;
         } catch (FeignException.NotFound e) {
@@ -63,7 +64,7 @@ public class StockRepository {
     }
 
     public Quote getStockQuote(String code) {
-        Quote quote = repository.findByCode(code).orElse(new Quote(code, null, null, now()));
+        Quote quote = repository.findLatestByCode(code).orElse(new Quote(code, null, null, now()));
         quote.setPrice(getLastPrice(quote));
 
         if (quote.getName() == null) {