diff --git a/src/main/java/fr/eni/demo/bll/AdresseService.java b/src/main/java/fr/eni/demo/bll/AdresseService.java index 313dfef..39bc237 100644 --- a/src/main/java/fr/eni/demo/bll/AdresseService.java +++ b/src/main/java/fr/eni/demo/bll/AdresseService.java @@ -6,4 +6,5 @@ public interface AdresseService { Adresse add(Adresse adresse); Adresse findById(Long id); Adresse findAdresseByClientId(Long clientId); + } diff --git a/src/main/java/fr/eni/demo/bll/ClientServiceImpl.java b/src/main/java/fr/eni/demo/bll/ClientServiceImpl.java index 88d6300..35fe26b 100644 --- a/src/main/java/fr/eni/demo/bll/ClientServiceImpl.java +++ b/src/main/java/fr/eni/demo/bll/ClientServiceImpl.java @@ -3,9 +3,12 @@ package fr.eni.demo.bll; import fr.eni.demo.bo.Adresse; import fr.eni.demo.bo.Client; import fr.eni.demo.bo.Location; +import fr.eni.demo.dal.AdresseRepository; import fr.eni.demo.dal.ClientRepository; import jakarta.persistence.EntityNotFoundException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; +import org.springframework.data.domain.ExampleMatcher; import org.springframework.stereotype.Service; import java.util.List; @@ -15,11 +18,14 @@ import java.util.Optional; public class ClientServiceImpl implements ClientService { private ClientRepository clientRepository; + private AdresseRepository adresseRepository; - public ClientServiceImpl(ClientRepository clientRepository) { + public ClientServiceImpl(ClientRepository clientRepository, AdresseRepository adresseRepository) { this.clientRepository = clientRepository; + this.adresseRepository = adresseRepository; } + @Override public void add(Client client) { if (client == null) { @@ -28,9 +34,23 @@ public class ClientServiceImpl implements ClientService { if (client.getAdresse() == null) { throw new IllegalArgumentException("Adresse mandatory"); } + + Adresse adresse = client.getAdresse(); + + ExampleMatcher matcher = ExampleMatcher.matchingAll() + .withIgnoreNullValues() + .withIgnoreCase(); + + Example example = Example.of(adresse, matcher); + + Optional existingAdresse = adresseRepository.findOne(example); + + client.setAdresse(existingAdresse.orElseGet(() -> adresseRepository.save(adresse))); + clientRepository.save(client); } + @Override public Client findById(Long clientId) { return clientRepository.findById(clientId) diff --git a/src/main/java/fr/eni/demo/bo/Adresse.java b/src/main/java/fr/eni/demo/bo/Adresse.java index 4f04486..358b040 100644 --- a/src/main/java/fr/eni/demo/bo/Adresse.java +++ b/src/main/java/fr/eni/demo/bo/Adresse.java @@ -15,7 +15,7 @@ import org.springframework.data.mongodb.core.mapping.Field; public class Adresse { @Id - private Integer id; + private String id; @Field(name = "STREET") private String rue; diff --git a/src/main/java/fr/eni/demo/dal/AdresseRepository.java b/src/main/java/fr/eni/demo/dal/AdresseRepository.java index d43c310..8d1630e 100644 --- a/src/main/java/fr/eni/demo/dal/AdresseRepository.java +++ b/src/main/java/fr/eni/demo/dal/AdresseRepository.java @@ -6,4 +6,5 @@ import org.springframework.stereotype.Repository; @Repository public interface AdresseRepository extends MongoRepository { + }