Jelajahi Sumber

implement query stock by name (like)

Daniel Bohry 1 tahun lalu
induk
melakukan
6c200c67c2

+ 3 - 3
src/main/java/com/danielbohry/stocks/controller/stock/StockController.java

@@ -27,14 +27,14 @@ public class StockController {
     private final StockService service;
 
     @GetMapping
-    public ResponseEntity<List<Quote>> getAll() {
-        List<Quote> response = service.get();
+    public ResponseEntity<List<Quote>> getAll(@RequestParam(value = "q", required = false) String query) {
+        List<Quote> response = service.get(query);
         return ResponseEntity.ok(response);
     }
 
     @GetMapping("{code}")
     public ResponseEntity<Quote> getByCode(@PathVariable String code) {
-        Quote response = service.get(code.toUpperCase());
+        Quote response = service.getByCode(code.toUpperCase());
         return ResponseEntity.ok(response);
     }
 

+ 5 - 0
src/main/java/com/danielbohry/stocks/repository/QuoteRepository.java

@@ -2,13 +2,18 @@ package com.danielbohry.stocks.repository;
 
 import com.danielbohry.stocks.domain.Quote;
 import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
 import java.util.Optional;
 
 @Repository
 public interface QuoteRepository extends MongoRepository<Quote, String> {
 
+    @Query("{ 'name' : { $regex: ?0, $options: 'i' } }")
+    List<Quote> findByNameContaining(String query);
+
     Optional<Quote> findByCode(String code);
 
 }

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

@@ -36,6 +36,10 @@ public class StockRepository {
         return repository.findAll();
     }
 
+    public List<Quote> findLike(String query) {
+        return repository.findByNameContaining(query);
+    }
+
     public Quote findByCode(String code) {
         Optional<Quote> quote = repository.findByCode(code);
         return quote.orElseGet(() -> repository.save(getStockQuote(code)));

+ 5 - 3
src/main/java/com/danielbohry/stocks/service/StockService.java

@@ -15,11 +15,13 @@ public class StockService {
 
     private StockRepository repository;
 
-    public List<Quote> get() {
-        return repository.findAll();
+    public List<Quote> get(String query) {
+        return query == null
+                ? repository.findAll()
+                : repository.findLike(query);
     }
 
-    public Quote get(String code) {
+    public Quote getByCode(String code) {
         return repository.findByCode(code);
     }