Merge branch 'RED-9891-bp' into 'release/2.465.x'

RED-9891: Re-creation of component-definition does not work

See merge request redactmanager/persistence-service!671
This commit is contained in:
Maverick Studer 2024-08-15 15:26:03 +02:00
commit c08acf46f6
4 changed files with 56 additions and 10 deletions

View File

@ -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<ComponentDefinitionEntity> componentEntities = new ArrayList<>();
componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> componentEntities.add(componentDefinitionPersistenceService.insert(componentDefinitionAddRequest,
dossierTemplateId)));
componentDefinitionAddRequests.forEach(componentDefinitionAddRequest -> {
Optional<String> 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<ComponentDefinition> orderedComponents = new ArrayList<>();
List<ComponentDefinitionEntity> existingComponents = componentDefinitionPersistenceService.findComponentsByDossierTemplateIdExcludeSoftDeleted(dossierTemplateId);
List<ComponentDefinitionEntity> existingComponents = componentDefinitionPersistenceService.findByDossierTemplateIdAndNotSoftDeleted(dossierTemplateId);
Map<String, ComponentDefinitionEntity> componentMap = existingComponents.stream()
.collect(Collectors.toMap(ComponentDefinitionEntity::getId, component -> component));

View File

@ -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<ComponentDefinitionEntity> findComponentsByDossierTemplateIdExcludeSoftDeleted(String dossierTemplateId) {
return componentDefinitionRepository.findByDossierTemplateIdAndSoftDeletedTimeIsNull(dossierTemplateId);
}
public List<ComponentDefinitionEntity> findByDossierTemplateIdAndNotSoftDeleted(String dossierTemplateId) {
return componentDefinitionRepository.findByDossierTemplateIdAndSoftDeletedTimeIsNull(dossierTemplateId);
}
public Optional<String> findIdByTechnicalNameAndSoftDeleted(String technicalName) {
return componentDefinitionRepository.findIdByTechnicalNameAndIsSoftDeleted(technicalName);
}
}

View File

@ -37,4 +37,8 @@ public interface ComponentDefinitionRepository extends JpaRepository<ComponentDe
@Query("SELECT COUNT(c) from ComponentDefinitionEntity c WHERE c.dossierTemplateId = :dossierTemplateId AND c.softDeleteTime IS NULL")
int countByDossierTemplateId(@Param("dossierTemplateId") String dossierTemplateId);
@Query("SELECT c.id FROM ComponentDefinitionEntity c WHERE c.technicalName = :technicalName AND c.softDeleteTime IS NOT NULL")
Optional<String> findIdByTechnicalNameAndIsSoftDeleted(@Param("technicalName") String technicalName);
}

View File

@ -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<ComponentDefinition> componentsIncludingSoftDeleted = dossierTemplateExternalClient.getComponents(dossierTemplate.getId(), true);
List<ComponentDefinition> 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() {