From e85e19aa78e32d6d5a0d5b120ebd09b51719aca0 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Thu, 15 Aug 2024 15:26:03 +0200 Subject: [PATCH] RED-9891: Re-creation of component-definition does not work --- .../service/ComponentDefinitionService.java | 18 +++++++++++---- ...ComponentDefinitionPersistenceService.java | 22 ++++++++++++++----- .../ComponentDefinitionRepository.java | 4 ++++ .../tests/ComponentDefinitionTests.java | 22 +++++++++++++++++++ 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentDefinitionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentDefinitionService.java index 67eb41640..3f6bc5148 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentDefinitionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ComponentDefinitionService.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; @@ -47,8 +48,17 @@ public class ComponentDefinitionService { validateAddRequest(componentDefinitionAddRequests); List componentEntities = new ArrayList<>(); - componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> componentEntities.add(componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, - dossierTemplateId))); + componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> { + Optional optionalIdOfSoftDeleted = componentDefinitionPersistenceService.findIdByTechnicalNameAndSoftDeleted(componentDefinitionAddRequest.getTechnicalName()); + ComponentDefinitionEntity entity; + if (optionalIdOfSoftDeleted.isEmpty()) { + entity = componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, + dossierTemplateId); + } else { + entity = componentDefinitionPersistenceService.restoreComponent(dossierTemplateId, optionalIdOfSoftDeleted.get()); + } + componentEntities.add(entity); + }); return componentEntities.stream() .map(componentDefinitionEntity -> MagicConverter.convert(componentDefinitionEntity, ComponentDefinition.class)) .sorted(Comparator.comparing(ComponentDefinition::getRank)) @@ -85,7 +95,7 @@ public class ComponentDefinitionService { if (includeSoftDeleted) { componentDefinitionEntities = componentDefinitionPersistenceService.findComponentsByDossierTemplateId(dossierTemplateId); } else { - componentDefinitionEntities = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId); + componentDefinitionEntities = componentDefinitionPersistenceService.findByDossierTemplateIdAndNotSoftDeleted(dossierTemplateId); } return componentDefinitionEntities.stream() @@ -157,7 +167,7 @@ public class ComponentDefinitionService { validateDossierTemplateExists(dossierTemplateId); List orderedComponents = new ArrayList<>(); - List existingComponents = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId); + List existingComponents = componentDefinitionPersistenceService.findByDossierTemplateIdAndNotSoftDeleted(dossierTemplateId); Map componentMap = existingComponents.stream() .collect(Collectors.toMap(ComponentDefinitionEntity::getId, component -> component)); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ComponentDefinitionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ComponentDefinitionPersistenceService.java index 82deee3ee..48a2c819d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ComponentDefinitionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ComponentDefinitionPersistenceService.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import java.time.OffsetDateTime; import java.util.List; +import java.util.Optional; import java.util.UUID; import org.apache.commons.lang3.StringUtils; @@ -92,6 +93,15 @@ public class ComponentDefinitionPersistenceService { } + @Transactional + public ComponentDefinitionEntity restoreComponent(String dossierTemplateId, String componentId) { + + componentDefinitionRepository.updateSoftDeleteForIds(List.of(componentId), dossierTemplateId, null); + return componentDefinitionRepository.findById(componentId) + .orElseThrow(() -> new NotFoundException("Component with id: " + componentId + " not found")); + } + + public ComponentDefinitionEntity findComponentByDossierTemplateIdAndComponentId(String dossierTemplateId, String componentId) { return componentDefinitionRepository.findByIdAndDossierTemplateId(componentId, dossierTemplateId) @@ -105,15 +115,15 @@ public class ComponentDefinitionPersistenceService { } - public List findComponentsByDossierTemplateIdExcludeSoftDeleted(String dossierTemplateId) { - - return componentDefinitionRepository.findByDossierTemplateIdAndSoftDeletedTimeIsNull(dossierTemplateId); - } - - public List findByDossierTemplateIdAndNotSoftDeleted(String dossierTemplateId) { return componentDefinitionRepository.findByDossierTemplateIdAndSoftDeletedTimeIsNull(dossierTemplateId); } + + public Optional findIdByTechnicalNameAndSoftDeleted(String technicalName) { + + return componentDefinitionRepository.findIdByTechnicalNameAndIsSoftDeleted(technicalName); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ComponentDefinitionRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ComponentDefinitionRepository.java index 446757ec9..a58f71c58 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ComponentDefinitionRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ComponentDefinitionRepository.java @@ -37,4 +37,8 @@ public interface ComponentDefinitionRepository extends JpaRepository findIdByTechnicalNameAndIsSoftDeleted(@Param("technicalName") String technicalName); + + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java index 04118251b..451d1e8ae 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ComponentDefinitionTests.java @@ -15,6 +15,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinition; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionAddRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.component.ComponentDefinitionUpdateRequest; @@ -145,6 +146,27 @@ public class ComponentDefinitionTests extends AbstractPersistenceServerServiceTe assertTrue(unknownDossierError.getMessage().contains("DossierTemplate with Id 123 not found.")); } + @Test + public void testAddComponentDefinitionAfterSoftDeletion() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var componentDefinitionAddRequest = buildComponentDefinitionAddRequest(dossierTemplate); + + var response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(componentDefinitionAddRequest)); + assertEquals(response.size(), 1); + + dossierTemplateExternalClient.deleteComponents(dossierTemplate.getId(), List.of(response.get(0).getId())); + + var softDeletedComponent = dossierTemplateExternalClient.getComponent(dossierTemplate.getId(), response.get(0).getId()); + assertNotNull(softDeletedComponent.getSoftDeleteTime()); + List componentsIncludingSoftDeleted = dossierTemplateExternalClient.getComponents(dossierTemplate.getId(), true); + List componentsExcludingSoftDeleted = dossierTemplateExternalClient.getComponents(dossierTemplate.getId(), false); + assertEquals(componentsIncludingSoftDeleted.size(), componentsExcludingSoftDeleted.size() + 1); + + response = dossierTemplateExternalClient.createComponents(dossierTemplate.getId(), List.of(componentDefinitionAddRequest)); + assertEquals(response.size(), 1); + } + @Test public void testRestoreDeletedComponentDefinitions() {