From de61006d867d54c02d2e69723c38c65cc4ea2f22 Mon Sep 17 00:00:00 2001 From: Olivier PARPAILLON Date: Wed, 16 Jul 2025 12:04:18 +0200 Subject: [PATCH] find stock by name and count done --- .../java/fr/eni/demo/bll/StockService.java | 3 + .../fr/eni/demo/bll/StockServiceImpl.java | 14 +++++ src/main/java/fr/eni/demo/bo/Stock.java | 1 + src/main/java/fr/eni/demo/bo/StockCount.java | 13 +++++ .../eni/demo/controller/StockController.java | 56 +++++++++++-------- .../fr/eni/demo/dal/ClientRepository.java | 1 - .../java/fr/eni/demo/dal/StockRepository.java | 3 + 7 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 src/main/java/fr/eni/demo/bo/StockCount.java diff --git a/src/main/java/fr/eni/demo/bll/StockService.java b/src/main/java/fr/eni/demo/bll/StockService.java index 0286010..cd738ab 100644 --- a/src/main/java/fr/eni/demo/bll/StockService.java +++ b/src/main/java/fr/eni/demo/bll/StockService.java @@ -1,11 +1,14 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Stock; +import fr.eni.demo.bo.StockCount; +import java.util.List; import java.util.Optional; public interface StockService { void add(Stock game); Optional findById(Long gameId); + List findAllByName(String name); } diff --git a/src/main/java/fr/eni/demo/bll/StockServiceImpl.java b/src/main/java/fr/eni/demo/bll/StockServiceImpl.java index 318f315..acb94d7 100644 --- a/src/main/java/fr/eni/demo/bll/StockServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/StockServiceImpl.java @@ -1,11 +1,14 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Stock; +import fr.eni.demo.bo.StockCount; import fr.eni.demo.dal.StockRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; @Service public class StockServiceImpl implements StockService{ @@ -25,4 +28,15 @@ public class StockServiceImpl implements StockService{ public Optional findById(Long gameId) { return stockRepository.findById(gameId); } + + @Override + public List findAllByName(String name){ + List stocks = stockRepository.findByNameIsContainingIgnoreCase(name); + List result = stocks.stream() + .collect(Collectors.groupingBy(Stock::getName, Collectors.counting())) + .entrySet().stream() + .map(entry -> new StockCount(entry.getKey(), entry.getValue())) + .toList(); + return result; + } } diff --git a/src/main/java/fr/eni/demo/bo/Stock.java b/src/main/java/fr/eni/demo/bo/Stock.java index aa23413..634f435 100644 --- a/src/main/java/fr/eni/demo/bo/Stock.java +++ b/src/main/java/fr/eni/demo/bo/Stock.java @@ -39,3 +39,4 @@ public class Stock { @Field(name = "LOCATIONS") private List locations; } + diff --git a/src/main/java/fr/eni/demo/bo/StockCount.java b/src/main/java/fr/eni/demo/bo/StockCount.java new file mode 100644 index 0000000..263b289 --- /dev/null +++ b/src/main/java/fr/eni/demo/bo/StockCount.java @@ -0,0 +1,13 @@ +package fr.eni.demo.bo; + +import lombok.*; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Builder +public class StockCount { + private String name; + private long count; +} diff --git a/src/main/java/fr/eni/demo/controller/StockController.java b/src/main/java/fr/eni/demo/controller/StockController.java index 18b834f..72d9ee3 100644 --- a/src/main/java/fr/eni/demo/controller/StockController.java +++ b/src/main/java/fr/eni/demo/controller/StockController.java @@ -2,11 +2,13 @@ package fr.eni.demo.controller; import fr.eni.demo.bll.StockService; import fr.eni.demo.bo.Stock; +import fr.eni.demo.bo.StockCount; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -15,31 +17,41 @@ import java.util.Optional; @RequiredArgsConstructor public class StockController { - private final StockService stockService; + private final StockService stockService; - // Ajouter un stock - @PostMapping - public ResponseEntity> create(@RequestBody Stock stock) { - stockService.add(stock); - Map response = new HashMap<>(); - response.put("message", "Stock added"); - response.put("status", true); - response.put("data", new HashMap<>()); + // Ajouter un stock + @PostMapping + public ResponseEntity> create(@RequestBody Stock stock) { + stockService.add(stock); + Map response = new HashMap<>(); + response.put("message", "Stock added"); + response.put("status", true); + response.put("data", new HashMap<>()); - return ResponseEntity.ok(response); - } + return ResponseEntity.ok(response); + } - // Chercher des clients par nom - @GetMapping("/{id}") - public ResponseEntity> findById(@PathVariable Long id) { - Optional result = stockService.findById(id); - Map response = new HashMap<>(); - response.put("message", "List of Clients found"); - response.put("status", true); - response.put("data", result); - - return ResponseEntity.ok(response); - } + // Chercher des stocks par id + @GetMapping("/{id}") + public ResponseEntity> findById(@PathVariable Long id) { + Optional result = stockService.findById(id); + Map response = new HashMap<>(); + response.put("message", "List of Clients found"); + response.put("status", 200); + response.put("data", result); + return ResponseEntity.ok(response); + } + // Trouver les jeux par nom et compter le result par nom + // ACCESS PUBLIC + @GetMapping("/{name}") + public ResponseEntity> findByName(@PathVariable String name) { + List result = stockService.findAllByName(name); + Map response = new HashMap<>(); + response.put("message", "List of Clients found"); + response.put("status", 200); + response.put("data", result); + return ResponseEntity.ok(response); + } } diff --git a/src/main/java/fr/eni/demo/dal/ClientRepository.java b/src/main/java/fr/eni/demo/dal/ClientRepository.java index 9bb34e2..07f0294 100644 --- a/src/main/java/fr/eni/demo/dal/ClientRepository.java +++ b/src/main/java/fr/eni/demo/dal/ClientRepository.java @@ -5,7 +5,6 @@ import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; import java.util.List; -import java.util.Optional; @Repository public interface ClientRepository extends MongoRepository { diff --git a/src/main/java/fr/eni/demo/dal/StockRepository.java b/src/main/java/fr/eni/demo/dal/StockRepository.java index be732a2..0f1b568 100644 --- a/src/main/java/fr/eni/demo/dal/StockRepository.java +++ b/src/main/java/fr/eni/demo/dal/StockRepository.java @@ -4,6 +4,9 @@ import fr.eni.demo.bo.Stock; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface StockRepository extends MongoRepository { + List findByNameIsContainingIgnoreCase(String name); }