From e19b32e4bf7270de54175b41fd417e41d65bbe30 Mon Sep 17 00:00:00 2001 From: mepiphana2023 Date: Wed, 16 Jul 2025 16:23:44 +0200 Subject: [PATCH 1/3] search code barre --- .../java/fr/eni/demo/bll/UserService.java | 11 ++++++ .../java/fr/eni/demo/bll/UserServiceImpl.java | 39 +++++++++++++++++++ .../eni/demo/controller/UserController.java | 35 +++++++++++++++++ .../java/fr/eni/demo/dal/UserRepository.java | 12 ++++++ 4 files changed, 97 insertions(+) create mode 100644 src/main/java/fr/eni/demo/bll/UserService.java create mode 100644 src/main/java/fr/eni/demo/bll/UserServiceImpl.java create mode 100644 src/main/java/fr/eni/demo/controller/UserController.java create mode 100644 src/main/java/fr/eni/demo/dal/UserRepository.java diff --git a/src/main/java/fr/eni/demo/bll/UserService.java b/src/main/java/fr/eni/demo/bll/UserService.java new file mode 100644 index 0000000..2482d21 --- /dev/null +++ b/src/main/java/fr/eni/demo/bll/UserService.java @@ -0,0 +1,11 @@ +package fr.eni.demo.bll; + +import fr.eni.demo.bo.User; +import java.util.Optional; +import java.util.List; + +public interface UserService { + void addUser(User user); + Optional findByUsername(String username); + List findAll(); +} \ No newline at end of file diff --git a/src/main/java/fr/eni/demo/bll/UserServiceImpl.java b/src/main/java/fr/eni/demo/bll/UserServiceImpl.java new file mode 100644 index 0000000..a977054 --- /dev/null +++ b/src/main/java/fr/eni/demo/bll/UserServiceImpl.java @@ -0,0 +1,39 @@ +package fr.eni.demo.bll; + +import fr.eni.demo.bo.User; +import fr.eni.demo.dal.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class UserServiceImpl implements UserService { + + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + + @Autowired + public UserServiceImpl(UserRepository userRepository, PasswordEncoder passwordEncoder) { + this.userRepository = userRepository; + this.passwordEncoder = passwordEncoder; + } + + @Override + public void addUser(User user) { + user.setPassword(passwordEncoder.encode(user.getPassword())); + userRepository.save(user); + } + + @Override + public Optional findByUsername(String username) { + return userRepository.findByUsername(username); + } + + @Override + public List findAll() { + return userRepository.findAll(); + } +} \ No newline at end of file diff --git a/src/main/java/fr/eni/demo/controller/UserController.java b/src/main/java/fr/eni/demo/controller/UserController.java new file mode 100644 index 0000000..fda549f --- /dev/null +++ b/src/main/java/fr/eni/demo/controller/UserController.java @@ -0,0 +1,35 @@ +package fr.eni.demo.controller; + +import fr.eni.demo.bll.UserService; +import fr.eni.demo.bo.User; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/users") +@RequiredArgsConstructor +public class UserController { + + private final UserService userService; + + @PostMapping + public ResponseEntity createUser(@RequestBody User user) { + userService.addUser(user); + return ResponseEntity.ok(user); + } + + @GetMapping + public ResponseEntity> getAllUsers() { + return ResponseEntity.ok(userService.findAll()); + } + + @GetMapping("/{username}") + public ResponseEntity getUserByUsername(@PathVariable String username) { + return userService.findByUsername(username) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } +} \ No newline at end of file diff --git a/src/main/java/fr/eni/demo/dal/UserRepository.java b/src/main/java/fr/eni/demo/dal/UserRepository.java new file mode 100644 index 0000000..f077a77 --- /dev/null +++ b/src/main/java/fr/eni/demo/dal/UserRepository.java @@ -0,0 +1,12 @@ +package fr.eni.demo.dal; + +import fr.eni.demo.bo.User; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface UserRepository extends MongoRepository { + Optional findByUsername(String username); +} \ No newline at end of file From b4c8f2af6b24d16873b94b77ce7288f07f7ade80 Mon Sep 17 00:00:00 2001 From: Olivier PARPAILLON Date: Wed, 16 Jul 2025 16:16:52 +0200 Subject: [PATCH 2/3] add isRent to stock if location is in progress --- src/main/java/fr/eni/demo/bll/LocationService.java | 1 + .../java/fr/eni/demo/bll/LocationServiceImpl.java | 9 ++++++++- src/main/java/fr/eni/demo/bll/StockService.java | 1 + src/main/java/fr/eni/demo/bll/StockServiceImpl.java | 11 ++++++++++- src/main/java/fr/eni/demo/bo/Stock.java | 3 +++ src/main/java/fr/eni/demo/dal/StockRepository.java | 2 +- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/eni/demo/bll/LocationService.java b/src/main/java/fr/eni/demo/bll/LocationService.java index ce67a0c..91ff5cf 100644 --- a/src/main/java/fr/eni/demo/bll/LocationService.java +++ b/src/main/java/fr/eni/demo/bll/LocationService.java @@ -4,4 +4,5 @@ import fr.eni.demo.bo.Location; public interface LocationService { void add(Location location); + void update(Location location); } diff --git a/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java b/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java index 6a569dd..52ce5e3 100644 --- a/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java @@ -2,12 +2,12 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Location; import fr.eni.demo.dal.LocationRepository; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class LocationServiceImpl implements LocationService { private LocationRepository locationRepository; + private StockService stockService; public LocationServiceImpl(LocationRepository locationRepository) { this.locationRepository = locationRepository; @@ -16,5 +16,12 @@ public class LocationServiceImpl implements LocationService { @Override public void add(Location location) { locationRepository.save(location); + stockService.isRent(location.getStock(), true); + } + + @Override + public void update(Location location) { + locationRepository.save(location); + stockService.isRent(location.getStock(), false); } } diff --git a/src/main/java/fr/eni/demo/bll/StockService.java b/src/main/java/fr/eni/demo/bll/StockService.java index 355c5b4..a4f3910 100644 --- a/src/main/java/fr/eni/demo/bll/StockService.java +++ b/src/main/java/fr/eni/demo/bll/StockService.java @@ -11,5 +11,6 @@ public interface StockService { Optional findById(Long gameId); List findAllByName(String name); Stock findByRef(String ref); + void isRent(Stock stock, boolean value); } diff --git a/src/main/java/fr/eni/demo/bll/StockServiceImpl.java b/src/main/java/fr/eni/demo/bll/StockServiceImpl.java index 14c0053..0228e1a 100644 --- a/src/main/java/fr/eni/demo/bll/StockServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/StockServiceImpl.java @@ -32,7 +32,7 @@ public class StockServiceImpl implements StockService{ @Override public List findAllByName(String name){ - List stocks = stockRepository.findByNameIsContainingIgnoreCase(name); + List stocks = stockRepository.findByNameIsContainingIgnoreCaseAndIsRentFalse(name); List result = stocks.stream() .collect(Collectors.groupingBy(Stock::getName, Collectors.counting())) .entrySet().stream() @@ -49,4 +49,13 @@ public class StockServiceImpl implements StockService{ } return stock; } + + @Override + public void isRent(Stock stock, boolean value) { + if (stock == null) { + throw new EntityNotFoundException("Stock non valide"); + } + stock.setIsRent(value); + stockRepository.save(stock); + } } diff --git a/src/main/java/fr/eni/demo/bo/Stock.java b/src/main/java/fr/eni/demo/bo/Stock.java index 634f435..9d573a0 100644 --- a/src/main/java/fr/eni/demo/bo/Stock.java +++ b/src/main/java/fr/eni/demo/bo/Stock.java @@ -31,6 +31,9 @@ public class Stock { @Field(name = "GAME_DAILY_PRICE") private Double dailyPrice; + @Field(name = "GAME_IS_RENT") + private Boolean isRent; + @DBRef @Field(name = "GAME_TYPE") private List gameType; diff --git a/src/main/java/fr/eni/demo/dal/StockRepository.java b/src/main/java/fr/eni/demo/dal/StockRepository.java index aab81b2..1ec8e46 100644 --- a/src/main/java/fr/eni/demo/dal/StockRepository.java +++ b/src/main/java/fr/eni/demo/dal/StockRepository.java @@ -8,6 +8,6 @@ import java.util.List; @Repository public interface StockRepository extends MongoRepository { - List findByNameIsContainingIgnoreCase(String name); + List findByNameIsContainingIgnoreCaseAndIsRentFalse(String name); Stock findByRefEQ(String ref); } From 3a37ddc2520d1ebff144b8ca61503e7e81be48eb Mon Sep 17 00:00:00 2001 From: mepiphana2023 Date: Wed, 16 Jul 2025 16:37:28 +0200 Subject: [PATCH 3/3] search code barre --- src/main/java/fr/eni/demo/bll/LocationService.java | 2 +- .../java/fr/eni/demo/bll/LocationServiceImpl.java | 9 +++++---- src/main/java/fr/eni/demo/bo/Location.java | 3 +++ .../fr/eni/demo/controller/LocationController.java | 12 ++++++++++++ .../java/fr/eni/demo/dal/LocationRepository.java | 6 ++++++ .../java/fr/eni/demo/security/SecurityConfig.java | 2 +- 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/eni/demo/bll/LocationService.java b/src/main/java/fr/eni/demo/bll/LocationService.java index 91ff5cf..da1b7e6 100644 --- a/src/main/java/fr/eni/demo/bll/LocationService.java +++ b/src/main/java/fr/eni/demo/bll/LocationService.java @@ -4,5 +4,5 @@ import fr.eni.demo.bo.Location; public interface LocationService { void add(Location location); - void update(Location location); + Location findByCodeBarre(String codeBarre); } diff --git a/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java b/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java index 52ce5e3..e1f4942 100644 --- a/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java @@ -4,6 +4,8 @@ import fr.eni.demo.bo.Location; import fr.eni.demo.dal.LocationRepository; import org.springframework.stereotype.Service; +import java.util.NoSuchElementException; + @Service public class LocationServiceImpl implements LocationService { private LocationRepository locationRepository; @@ -16,12 +18,11 @@ public class LocationServiceImpl implements LocationService { @Override public void add(Location location) { locationRepository.save(location); - stockService.isRent(location.getStock(), true); } @Override - public void update(Location location) { - locationRepository.save(location); - stockService.isRent(location.getStock(), false); + public Location findByCodeBarre(String codeBarre) { + return locationRepository.findByCodeBarre(codeBarre) + .orElseThrow(() -> new NoSuchElementException("Code-barre inconnu : " + codeBarre)); } } diff --git a/src/main/java/fr/eni/demo/bo/Location.java b/src/main/java/fr/eni/demo/bo/Location.java index 6779a6f..ab8ce48 100644 --- a/src/main/java/fr/eni/demo/bo/Location.java +++ b/src/main/java/fr/eni/demo/bo/Location.java @@ -19,6 +19,9 @@ public class Location { @Id private String id; + @Field(name = "CODE_BARRE") + private String codeBarre; + @Field(name = "LOCATION_START_DATE") private Date startDate; diff --git a/src/main/java/fr/eni/demo/controller/LocationController.java b/src/main/java/fr/eni/demo/controller/LocationController.java index 5fa2853..b9851ef 100644 --- a/src/main/java/fr/eni/demo/controller/LocationController.java +++ b/src/main/java/fr/eni/demo/controller/LocationController.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; +import java.util.NoSuchElementException; @RestController @RequestMapping("/api/location") @@ -23,6 +24,17 @@ public class LocationController { return buildResponse("Location added", true, new HashMap<>()); } + // Chercher location depuis code barre + @GetMapping("/codeBarre/{codeBarre}") + public ResponseEntity> findByCodeBarre(@PathVariable String codeBarre) { + try { + Location location = locationService.findByCodeBarre(codeBarre); + return buildResponse("Location trouvée", true, location); + } catch (NoSuchElementException e) { + return buildResponse(e.getMessage(), false, new HashMap<>()); + } + } + private ResponseEntity> buildResponse(String message, boolean status, Object data) { Map response = new HashMap<>(); response.put("message", message); diff --git a/src/main/java/fr/eni/demo/dal/LocationRepository.java b/src/main/java/fr/eni/demo/dal/LocationRepository.java index e87db5a..0417c01 100644 --- a/src/main/java/fr/eni/demo/dal/LocationRepository.java +++ b/src/main/java/fr/eni/demo/dal/LocationRepository.java @@ -4,6 +4,12 @@ import fr.eni.demo.bo.Location; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface LocationRepository extends MongoRepository { + + Optional findByCodeBarre(String codeBarre); + + } diff --git a/src/main/java/fr/eni/demo/security/SecurityConfig.java b/src/main/java/fr/eni/demo/security/SecurityConfig.java index 6e82b89..80c282c 100644 --- a/src/main/java/fr/eni/demo/security/SecurityConfig.java +++ b/src/main/java/fr/eni/demo/security/SecurityConfig.java @@ -66,7 +66,7 @@ public class SecurityConfig { UserDetails user = User.builder() .username("user") .password(encoder.encode("password")) - .roles("USER") + .roles("EMPLOYE") .build(); return new InMemoryUserDetailsManager(user);