From b74c2e93f97b044bc1f39d3053ba171abf0e7419 Mon Sep 17 00:00:00 2001 From: Vitolo-Andrea Date: Wed, 13 Nov 2024 10:20:36 +0100 Subject: [PATCH] Fix Upsert --- .../tpp/configuration/ExceptionMap.java | 8 +++++ .../pagopa/tpp/constants/TppConstants.java | 6 ++++ .../pagopa/tpp/repository/TppRepository.java | 2 ++ .../pagopa/tpp/service/TppServiceImpl.java | 30 +++++++++++-------- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/java/it/gov/pagopa/tpp/configuration/ExceptionMap.java b/src/main/java/it/gov/pagopa/tpp/configuration/ExceptionMap.java index 0d22092..7678322 100644 --- a/src/main/java/it/gov/pagopa/tpp/configuration/ExceptionMap.java +++ b/src/main/java/it/gov/pagopa/tpp/configuration/ExceptionMap.java @@ -26,6 +26,14 @@ public ExceptionMap() { message ) ); + + exceptions.put(TppConstants.ExceptionName.TPP_ALREADY_ONBOARDED, message -> + new ClientExceptionWithBody( + HttpStatus.FORBIDDEN, + TppConstants.ExceptionCode.TPP_ALREADY_ONBOARDED, + message + ) + ); } public RuntimeException throwException(String exceptionKey, String message) { diff --git a/src/main/java/it/gov/pagopa/tpp/constants/TppConstants.java b/src/main/java/it/gov/pagopa/tpp/constants/TppConstants.java index c24149b..0b91094 100644 --- a/src/main/java/it/gov/pagopa/tpp/constants/TppConstants.java +++ b/src/main/java/it/gov/pagopa/tpp/constants/TppConstants.java @@ -4,6 +4,8 @@ public class TppConstants { public static final class ExceptionCode { public static final String TPP_NOT_ONBOARDED = "TPP_NOT_ONBOARDED"; + + public static final String TPP_ALREADY_ONBOARDED = "TPP_ALREADY_ONBOARDED"; public static final String GENERIC_ERROR = "GENERIC_ERROR"; private ExceptionCode() {} } @@ -11,6 +13,8 @@ private ExceptionCode() {} public static final class ExceptionMessage { public static final String TPP_NOT_ONBOARDED = "TPP_NOT_ONBOARDED"; + + public static final String TPP_ALREADY_ONBOARDED = "TPP_ALREADY_ONBOARDED"; public static final String GENERIC_ERROR = "GENERIC_ERROR"; private ExceptionMessage() {} } @@ -18,6 +22,8 @@ private ExceptionMessage() {} public static final class ExceptionName { public static final String TPP_NOT_ONBOARDED = "TPP_NOT_ONBOARDED"; + + public static final String TPP_ALREADY_ONBOARDED = "TPP_ALREADY_ONBOARDED"; public static final String GENERIC_ERROR = "GENERIC_ERROR"; private ExceptionName() {} } diff --git a/src/main/java/it/gov/pagopa/tpp/repository/TppRepository.java b/src/main/java/it/gov/pagopa/tpp/repository/TppRepository.java index 3a57b6a..7d1ad63 100644 --- a/src/main/java/it/gov/pagopa/tpp/repository/TppRepository.java +++ b/src/main/java/it/gov/pagopa/tpp/repository/TppRepository.java @@ -16,4 +16,6 @@ public interface TppRepository extends ReactiveMongoRepository { Mono findByTppId(String tppId); + Mono findByEntityId(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 c365248..b443d82 100644 --- a/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java +++ b/src/main/java/it/gov/pagopa/tpp/service/TppServiceImpl.java @@ -1,9 +1,9 @@ package it.gov.pagopa.tpp.service; +import it.gov.pagopa.tpp.configuration.ExceptionMap; import it.gov.pagopa.tpp.constants.TppConstants.ExceptionName; import it.gov.pagopa.tpp.dto.TppDTO; import it.gov.pagopa.tpp.dto.mapper.TppObjectToDTOMapper; -import it.gov.pagopa.tpp.configuration.ExceptionMap; import it.gov.pagopa.tpp.model.Tpp; import it.gov.pagopa.tpp.model.mapper.TppDTOToObjectMapper; import it.gov.pagopa.tpp.repository.TppRepository; @@ -11,7 +11,6 @@ import org.springframework.stereotype.Service; import reactor.core.publisher.Mono; - import java.time.LocalDateTime; import java.util.List; import java.util.UUID; @@ -53,23 +52,28 @@ public Mono> getEnabledList(List tppIdList) { public Mono upsert(TppDTO tppDTO) { log.info("[TPP-SERVICE][UPSERT] Received tppDTO: {}", inputSanify(tppDTO.toString())); - if(tppDTO.getTppId() == null){ - Tpp tppToSave = mapperToObject.map(tppDTO); - tppToSave.setTppId(generateTppId()); - log.info("[TPP-SERVICE][UPSERT] Creating new entry ..."); - return saveTpp(tppToSave, "[TPP-SERVICE][UPSERT] Created new TPP with tppId: "); - } - else { + if (tppDTO.getTppId() == null) { + return tppRepository.findByEntityId(tppDTO.getEntityId()) + .flatMap(existingTpp -> Mono.error( + exceptionMap.throwException(ExceptionName.TPP_ALREADY_ONBOARDED, "TPP already onboarded with entity ID.") + )) + .flatMap(entityNotFound -> { + Tpp tppToSave = mapperToObject.map(tppDTO); + tppToSave.setId(generateTppId()); + return saveTpp(tppToSave, "[TPP-SERVICE][UPSERT] Created new TPP with tppId"); + }); + } else { return tppRepository.findByTppId(tppDTO.getTppId()) .flatMap(existingTpp -> { - log.info("[TPP-SERVICE][UPSERT] TPP with tppId [{}] already exists. Updating...", tppDTO.getTppId()); + log.info("[TPP-SERVICE][UPSERT] TPP with tppId [{}] found. Updating...", tppDTO.getTppId()); Tpp tppToUpdate = mapperToObject.map(tppDTO); tppToUpdate.setId(existingTpp.getId()); tppToUpdate.setLastUpdateDate(LocalDateTime.now()); - return saveTpp(tppToUpdate, "[TPP-SERVICE][UPSERT] Updated existing TPP with tppId: "); + return saveTpp(tppToUpdate, "[TPP-SERVICE][UPSERT] Updated existing TPP with tppId"); }) - .switchIfEmpty(Mono.error(exceptionMap.throwException(ExceptionName.TPP_NOT_ONBOARDED, - "Tpp not found during update process"))); + .switchIfEmpty( + Mono.error(exceptionMap.throwException(ExceptionName.TPP_NOT_ONBOARDED, "TPP not found for update.")) + ); } }