浏览代码

rollback history changes

Daniel Bohry 1 年之前
父节点
当前提交
66947371c9

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

@@ -13,9 +13,17 @@ import java.time.LocalDateTime;
 @NoArgsConstructor
 public class Quote {
 
+    @Id
+    private String id;
     private String code;
     private String name;
     private BigDecimal price;
     private LocalDateTime updatedAt;
 
+    public Quote(String code, String name, BigDecimal price, LocalDateTime updatedAt) {
+        this.code = code;
+        this.name = name;
+        this.price = price;
+        this.updatedAt = updatedAt;
+    }
 }

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

@@ -1,23 +1,19 @@
 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;
 
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 
 @Repository
 public interface QuoteRepository extends MongoRepository<Quote, String> {
 
-    @Query("{ $and: [ { $or: [ { 'name': { $regex: ?0, $options: 'i' } }, { 'code': { $regex: ?0, $options: 'i' } } ] }, { 'updatedAt': { $gt: ?1 } } ] }")
-    Set<Quote> findByNameContaining(String query, LocalDateTime date);
+    @Query("{ $or: [ { 'name': { $regex: ?0, $options: 'i' } }, { 'code': { $regex: ?0, $options: 'i' } } ] }")
+    List<Quote> findByNameOrCode(String query);
 
-    @Query(value = "{ 'code': ?0 }", sort = "{ 'updatedAt': -1 }")
-    List<Quote> findLatestByCode(String code);
+    Optional<Quote> findByCode(String code);
 
 }

+ 10 - 15
src/main/java/com/danielbohry/stocks/repository/StockRepository.java

@@ -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) {

+ 1 - 1
src/test/java/service/StockServiceTest.java

@@ -53,7 +53,7 @@ public class StockServiceTest {
         Set<Quote> result = service.get(name);
 
         //then
-        assertEquals(7, result.size());
+        assertEquals(6, result.size());
     }
 
 }