find stock by name and count done

This commit is contained in:
Olivier PARPAILLON
2025-07-16 12:04:18 +02:00
parent 1535f6bf19
commit de61006d86
7 changed files with 68 additions and 23 deletions

View File

@@ -1,11 +1,14 @@
package fr.eni.demo.bll; package fr.eni.demo.bll;
import fr.eni.demo.bo.Stock; import fr.eni.demo.bo.Stock;
import fr.eni.demo.bo.StockCount;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface StockService { public interface StockService {
void add(Stock game); void add(Stock game);
Optional<Stock> findById(Long gameId); Optional<Stock> findById(Long gameId);
List<StockCount> findAllByName(String name);
} }

View File

@@ -1,11 +1,14 @@
package fr.eni.demo.bll; package fr.eni.demo.bll;
import fr.eni.demo.bo.Stock; import fr.eni.demo.bo.Stock;
import fr.eni.demo.bo.StockCount;
import fr.eni.demo.dal.StockRepository; import fr.eni.demo.dal.StockRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
@Service @Service
public class StockServiceImpl implements StockService{ public class StockServiceImpl implements StockService{
@@ -25,4 +28,15 @@ public class StockServiceImpl implements StockService{
public Optional<Stock> findById(Long gameId) { public Optional<Stock> findById(Long gameId) {
return stockRepository.findById(gameId); return stockRepository.findById(gameId);
} }
@Override
public List<StockCount> findAllByName(String name){
List<Stock> stocks = stockRepository.findByNameIsContainingIgnoreCase(name);
List<StockCount> result = stocks.stream()
.collect(Collectors.groupingBy(Stock::getName, Collectors.counting()))
.entrySet().stream()
.map(entry -> new StockCount(entry.getKey(), entry.getValue()))
.toList();
return result;
}
} }

View File

@@ -39,3 +39,4 @@ public class Stock {
@Field(name = "LOCATIONS") @Field(name = "LOCATIONS")
private List<Location> locations; private List<Location> locations;
} }

View File

@@ -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;
}

View File

@@ -2,11 +2,13 @@ package fr.eni.demo.controller;
import fr.eni.demo.bll.StockService; import fr.eni.demo.bll.StockService;
import fr.eni.demo.bo.Stock; import fr.eni.demo.bo.Stock;
import fr.eni.demo.bo.StockCount;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
@@ -15,31 +17,41 @@ import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class StockController { public class StockController {
private final StockService stockService; private final StockService stockService;
// Ajouter un stock // Ajouter un stock
@PostMapping @PostMapping
public ResponseEntity<Map<String, Object>> create(@RequestBody Stock stock) { public ResponseEntity<Map<String, Object>> create(@RequestBody Stock stock) {
stockService.add(stock); stockService.add(stock);
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
response.put("message", "Stock added"); response.put("message", "Stock added");
response.put("status", true); response.put("status", true);
response.put("data", new HashMap<>()); response.put("data", new HashMap<>());
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
// Chercher des clients par nom // Chercher des stocks par id
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<Map<String, Object>> findById(@PathVariable Long id) { public ResponseEntity<Map<String, Object>> findById(@PathVariable Long id) {
Optional<Stock> result = stockService.findById(id); Optional<Stock> result = stockService.findById(id);
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
response.put("message", "List of Clients found"); response.put("message", "List of Clients found");
response.put("status", true); response.put("status", 200);
response.put("data", result); response.put("data", result);
return ResponseEntity.ok(response);
}
return ResponseEntity.ok(response);
}
// Trouver les jeux par nom et compter le result par nom
// ACCESS PUBLIC
@GetMapping("/{name}")
public ResponseEntity<Map<String, Object>> findByName(@PathVariable String name) {
List<StockCount> result = stockService.findAllByName(name);
Map<String, Object> response = new HashMap<>();
response.put("message", "List of Clients found");
response.put("status", 200);
response.put("data", result);
return ResponseEntity.ok(response);
}
} }

View File

@@ -5,7 +5,6 @@ import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
import java.util.Optional;
@Repository @Repository
public interface ClientRepository extends MongoRepository<Client, Long> { public interface ClientRepository extends MongoRepository<Client, Long> {

View File

@@ -4,6 +4,9 @@ import fr.eni.demo.bo.Stock;
import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface StockRepository extends MongoRepository<Stock,Long> { public interface StockRepository extends MongoRepository<Stock,Long> {
List<Stock> findByNameIsContainingIgnoreCase(String name);
} }