diff --git a/src/main/java/it/gov/pagopa/tpp/controller/TppController.java b/src/main/java/it/gov/pagopa/tpp/controller/TppController.java index efd6524..322b453 100644 --- a/src/main/java/it/gov/pagopa/tpp/controller/TppController.java +++ b/src/main/java/it/gov/pagopa/tpp/controller/TppController.java @@ -71,4 +71,7 @@ public interface TppController { @GetMapping("/{tppId}/token") Mono> getTokenSection(@Valid @PathVariable String tppId); + @GetMapping("/entityId/{entityId}") + Mono> getTppByEntityId(@Valid @PathVariable String entityId); + } diff --git a/src/main/java/it/gov/pagopa/tpp/controller/TppControllerImpl.java b/src/main/java/it/gov/pagopa/tpp/controller/TppControllerImpl.java index 0179dd1..82308e2 100644 --- a/src/main/java/it/gov/pagopa/tpp/controller/TppControllerImpl.java +++ b/src/main/java/it/gov/pagopa/tpp/controller/TppControllerImpl.java @@ -60,4 +60,10 @@ public Mono> getTokenSection(String tppId) { .map(ResponseEntity::ok); } + @Override + public Mono> getTppByEntityId(String entityId) { + return tppService.getTppByEntityId(entityId) + .map(ResponseEntity::ok); + } + } diff --git a/src/main/java/it/gov/pagopa/tpp/service/TppService.java b/src/main/java/it/gov/pagopa/tpp/service/TppService.java index 4375681..93d051a 100644 --- a/src/main/java/it/gov/pagopa/tpp/service/TppService.java +++ b/src/main/java/it/gov/pagopa/tpp/service/TppService.java @@ -23,4 +23,6 @@ public interface TppService { Mono getTokenSection(String tppId); + Mono getTppByEntityId(String entityId); + } diff --git a/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java b/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java index fdfbe68..86b3232 100644 --- a/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java +++ b/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java @@ -40,6 +40,7 @@ public class TppServiceImpl implements TppService { private final TokenSectionDTOToObjectMapper tokenSectionMapperToObject; private final ExceptionMap exceptionMap; private final AzureEncryptService azureEncryptService; + private static final String TPP_NOT_FOUND = "Tpp not found during get process"; public TppServiceImpl(TppRepository tppRepository, TppObjectToDTOMapper mapperToDTO, TppWithoutTokenSectionObjectToDTOMapper tppWithoutTokenSectionMapperToDTO, TokenSectionObjectToDTOMapper tokenSectionMapperToDTO, TppDTOToObjectMapper mapperToObject, TokenSectionDTOToObjectMapper tokenSectionMapperToObject, ExceptionMap exceptionMap, AzureEncryptService azureEncryptService) { @@ -185,19 +186,31 @@ public Mono getTppDetails(String tppId) { return tppRepository.findByTppId(tppId) .switchIfEmpty(Mono.error(exceptionMap.throwException(ExceptionName.TPP_NOT_ONBOARDED, - "Tpp not found during get process"))) + TPP_NOT_FOUND))) .map(tppWithoutTokenSectionMapperToDTO::map) .doOnSuccess(tppDTO -> log.info("[TPP-SERVICE][GET] Found TPP with tppId: {}", tppId)) .doOnError(error -> log.error("[TPP-SERVICE][GET] Error retrieving TPP for tppId {}: {}", tppId, error.getMessage())); } + @Override + public Mono getTppByEntityId(String entityId) { + log.info("[TPP-SERVICE][GET] Received request to get TPP for entityId: {}", inputSanify(entityId)); + + return tppRepository.findByEntityId(entityId) + .switchIfEmpty(Mono.error(exceptionMap.throwException(ExceptionName.TPP_NOT_ONBOARDED, + TPP_NOT_FOUND))) + .map(tppWithoutTokenSectionMapperToDTO::map) + .doOnSuccess(tppDTO -> log.info("[TPP-SERVICE][GET] Found TPP with entityId: {}", entityId)) + .doOnError(error -> log.error("[TPP-SERVICE][GET] Error retrieving TPP for entityId {}: {}", entityId, error.getMessage())); + } + @Override public Mono getTokenSection(String tppId) { log.info("[TPP-SERVICE][GET] Received request to get TokenSection for tppId: {}", inputSanify(tppId)); return tppRepository.findByTppId(tppId) .switchIfEmpty(Mono.error(exceptionMap.throwException(ExceptionName.TPP_NOT_ONBOARDED, - "Tpp not found during get process"))) + TPP_NOT_FOUND))) .flatMap(tpp -> { TokenSection tokenSection = tpp.getTokenSection(); keyDecrypt(tokenSection, tppId); diff --git a/src/test/java/it/gov/pagopa/tpp/controller/TppControllerTest.java b/src/test/java/it/gov/pagopa/tpp/controller/TppControllerTest.java index 48f5bb8..23d4e5a 100644 --- a/src/test/java/it/gov/pagopa/tpp/controller/TppControllerTest.java +++ b/src/test/java/it/gov/pagopa/tpp/controller/TppControllerTest.java @@ -126,6 +126,23 @@ void getTppDetails_Ok() { }); } + @Test + void getTppByEntityId_Ok() { + Mockito.when(tppService.getTppByEntityId(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId())) + .thenReturn(Mono.just(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION)); + + webClient.get() + .uri("/emd/tpp/entityId/{entityId}",MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId()) + .exchange() + .expectStatus().isOk() + .expectBody(TppDTOWithoutTokenSection.class) + .consumeWith(response -> { + TppDTOWithoutTokenSection resultResponse = response.getResponseBody(); + Assertions.assertNotNull(resultResponse); + Assertions.assertEquals(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION,resultResponse); + }); + } + @Test void getTokenSection_Ok() { Mockito.when(tppService.getTokenSection("tppId")) diff --git a/src/test/java/it/gov/pagopa/tpp/service/TppServiceTest.java b/src/test/java/it/gov/pagopa/tpp/service/TppServiceTest.java index 2aa17bd..564a7dc 100644 --- a/src/test/java/it/gov/pagopa/tpp/service/TppServiceTest.java +++ b/src/test/java/it/gov/pagopa/tpp/service/TppServiceTest.java @@ -218,6 +218,28 @@ void getTppDetails_TppNotOnboarded() { .verify(); } + @Test + void getTppByEntityId_Ok() { + Mockito.when(tppRepository.findByEntityId(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId())) + .thenReturn(Mono.just(MOCK_TPP)); + + StepVerifier.create(tppService.getTppByEntityId(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId())) + .expectNextCount(1) + .verifyComplete(); + } + + @Test + void getTppByEntityId_TppNotOnboarded() { + Mockito.when(tppRepository.findByEntityId(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId())) + .thenReturn(Mono.empty()); + + StepVerifier.create(tppService.getTppByEntityId(MOCK_TPP_DTO_WITHOUT_TOKEN_SECTION.getEntityId())) + .expectErrorMatches(throwable -> + throwable instanceof ClientExceptionWithBody && + ((ClientExceptionWithBody) throwable).getCode().equals("TPP_NOT_ONBOARDED")) + .verify(); + } + @Test void getTokenSection_Ok() { Mockito.when(tppRepository.findByTppId(MOCK_TPP_DTO.getTppId()))