diff --git a/src/main/java/fr/eni/demo/bll/FactureService.java b/src/main/java/fr/eni/demo/bll/FactureService.java index f65dcf8..b424861 100644 --- a/src/main/java/fr/eni/demo/bll/FactureService.java +++ b/src/main/java/fr/eni/demo/bll/FactureService.java @@ -1,6 +1,7 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Facture; +import fr.eni.demo.bo.Location; import java.util.List; @@ -8,4 +9,5 @@ public interface FactureService { List getByClient(Long clientId); List getAll(); List getUnpayed(); + void add(Facture facture); } diff --git a/src/main/java/fr/eni/demo/bll/FactureServiceImpl.java b/src/main/java/fr/eni/demo/bll/FactureServiceImpl.java index 73129ee..d241c8d 100644 --- a/src/main/java/fr/eni/demo/bll/FactureServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/FactureServiceImpl.java @@ -1,6 +1,7 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Facture; +import fr.eni.demo.bo.Location; import fr.eni.demo.dal.FactureRepository; import org.springframework.stereotype.Service; @@ -35,4 +36,10 @@ public class FactureServiceImpl implements FactureService { public List getUnpayed() { return factureRepo.findByDatePayEmpty(); } + + @Override + public void add(Facture facture) { + factureRepo.save(facture); + } + } diff --git a/src/main/java/fr/eni/demo/bll/LocationService.java b/src/main/java/fr/eni/demo/bll/LocationService.java index 91ff5cf..997b2e8 100644 --- a/src/main/java/fr/eni/demo/bll/LocationService.java +++ b/src/main/java/fr/eni/demo/bll/LocationService.java @@ -3,6 +3,8 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Location; public interface LocationService { + Location findById(Long id); void add(Location location); - void update(Location location); + void updateDateEnd(String id, 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..eae0a03 100644 --- a/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/LocationServiceImpl.java @@ -2,17 +2,28 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Location; import fr.eni.demo.dal.LocationRepository; +import jakarta.persistence.EntityNotFoundException; import org.springframework.stereotype.Service; +import java.util.Date; +import java.util.NoSuchElementException; + @Service public class LocationServiceImpl implements LocationService { - private LocationRepository locationRepository; + + private final LocationRepository locationRepository; private StockService stockService; public LocationServiceImpl(LocationRepository locationRepository) { this.locationRepository = locationRepository; } + @Override + public Location findById(Long id) { + return locationRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException("Location non trouvée")); + } + @Override public void add(Location location) { locationRepository.save(location); @@ -20,8 +31,17 @@ public class LocationServiceImpl implements LocationService { } @Override - public void update(Location location) { + public void updateDateEnd(String id, Location location) { + Location existing = findById(Long.valueOf(id)); + location.setId(existing.getId()); + location.setEndDate(new Date()); locationRepository.save(location); - stockService.isRent(location.getStock(), false); } + + @Override + 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/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/bo/Client.java b/src/main/java/fr/eni/demo/bo/Client.java index 935b821..f09bcb0 100644 --- a/src/main/java/fr/eni/demo/bo/Client.java +++ b/src/main/java/fr/eni/demo/bo/Client.java @@ -28,15 +28,12 @@ public class Client { @Field(name = "EMAIL") private String email; - @DBRef @Field(name = "ADRESSE") private Adresse adresse; - @DBRef @Field(name = "LOCATIONS") private List locations; - @DBRef @Field(name = "FACTURES") private List factures; } diff --git a/src/main/java/fr/eni/demo/bo/Facture.java b/src/main/java/fr/eni/demo/bo/Facture.java index 06b53b0..a9d1ca0 100644 --- a/src/main/java/fr/eni/demo/bo/Facture.java +++ b/src/main/java/fr/eni/demo/bo/Facture.java @@ -27,7 +27,6 @@ public class Facture { @Field(name = "DATEPAY") private Date datePay; - @DBRef @Field(name = "CLIENTS") private Client client; } diff --git a/src/main/java/fr/eni/demo/bo/Location.java b/src/main/java/fr/eni/demo/bo/Location.java index 6779a6f..0538bd1 100644 --- a/src/main/java/fr/eni/demo/bo/Location.java +++ b/src/main/java/fr/eni/demo/bo/Location.java @@ -19,17 +19,18 @@ public class Location { @Id private String id; + @Field(name = "CODE_BARRE") + private String codeBarre; + @Field(name = "LOCATION_START_DATE") private Date startDate; @Field(name = "LOCATION_END_DATE") private Date endDate; - @DBRef @Field(name = "CLIENT") private Client client; - @DBRef @Field(name = "STOCK") private Stock stock; } diff --git a/src/main/java/fr/eni/demo/bo/Stock.java b/src/main/java/fr/eni/demo/bo/Stock.java index 9d573a0..715e2ab 100644 --- a/src/main/java/fr/eni/demo/bo/Stock.java +++ b/src/main/java/fr/eni/demo/bo/Stock.java @@ -34,11 +34,9 @@ public class Stock { @Field(name = "GAME_IS_RENT") private Boolean isRent; - @DBRef @Field(name = "GAME_TYPE") private List gameType; - @DBRef @Field(name = "LOCATIONS") private List locations; } diff --git a/src/main/java/fr/eni/demo/controller/ClientController.java b/src/main/java/fr/eni/demo/controller/ClientController.java index 0c0ccf3..3daa48e 100644 --- a/src/main/java/fr/eni/demo/controller/ClientController.java +++ b/src/main/java/fr/eni/demo/controller/ClientController.java @@ -58,6 +58,7 @@ public class ClientController { clientService.delete(id); return buildResponse("Address deleted", true, 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/controller/FactureController.java b/src/main/java/fr/eni/demo/controller/FactureController.java index a638b02..2a4ff74 100644 --- a/src/main/java/fr/eni/demo/controller/FactureController.java +++ b/src/main/java/fr/eni/demo/controller/FactureController.java @@ -1,11 +1,14 @@ package fr.eni.demo.controller; import fr.eni.demo.bll.FactureService; +import fr.eni.demo.bll.LocationService; import fr.eni.demo.bo.Facture; +import fr.eni.demo.bo.Location; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,31 +19,51 @@ import java.util.Map; public class FactureController { private final FactureService factureService; + private final LocationService locationService; // Toutes les factures @GetMapping public ResponseEntity> getAllFactures() { List result = factureService.getAll(); - return buildResponse(result); + return buildResponse("List all order", true, result); } // Factures par client @GetMapping("/client/{clientId}") public ResponseEntity> getFactureByClient(@PathVariable Long clientId) { - return buildResponse(factureService.getByClient(clientId)); + List result = factureService.getByClient(clientId); + return buildResponse("List order customer", true, result); } // Factures impayees @GetMapping("/unpayed") public ResponseEntity> getUnpayedFactures() { List result = factureService.getUnpayed(); - return buildResponse(result); + return buildResponse("List unpayed older", true, result); } - private ResponseEntity> buildResponse(Object data) { + // Génère une facture + @PostMapping + public ResponseEntity> setFacture(@RequestBody List locations) { + double price = 0; + for(Location location : locations){ + price += location.getStock().getDailyPrice(); + locationService.updateDateEnd(location.getId(), location); + } + Facture facture = new Facture(); + facture.setClient(locations.get(0).getClient()); + facture.setDatePay(new Date()); + facture.setPrice(price); + factureService.add(facture); + return buildResponse("Older created", true, new HashMap<>()); + } + + private ResponseEntity> buildResponse(String message, boolean status, Object data) { Map response = new HashMap<>(); + response.put("message", message); + response.put("status", status); response.put("data", data); - response.put("status", 200); return ResponseEntity.ok(response); } + } 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/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/LocationRepository.java b/src/main/java/fr/eni/demo/dal/LocationRepository.java index e87db5a..b4a7825 100644 --- a/src/main/java/fr/eni/demo/dal/LocationRepository.java +++ b/src/main/java/fr/eni/demo/dal/LocationRepository.java @@ -4,6 +4,11 @@ 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 { +public interface LocationRepository extends MongoRepository { + + Optional findByCodeBarre(String codeBarre); + } 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 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);