diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java index f99c972da..afd9ca711 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java @@ -61,9 +61,9 @@ public class FileAttributesController implements FileAttributesResource { } fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId, MagicConverter.convert(fileAttributesConfig, FileAttributesGeneralConfigurationEntity.class)); - var result = fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId, - MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(), - FileAttributeConfigEntity.class)); + fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId, + MagicConverter.convert(fileAttributesConfig.getFileAttributeConfigs(), FileAttributeConfigEntity.class)); + auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) .objectId(dossierTemplateId) @@ -74,7 +74,7 @@ public class FileAttributesController implements FileAttributesResource { .filenameMappingColumnHeaderName(fileAttributesConfig.getFilenameMappingColumnHeaderName()) .delimiter(fileAttributesConfig.getDelimiter()) .encoding(fileAttributesConfig.getEncoding()) - .fileAttributeConfigs(MagicConverter.convert(result, FileAttributeConfig.class)) + .fileAttributeConfigs(MagicConverter.convert(fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId), FileAttributeConfig.class)) .build(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java index 60bf63dd4..8cc7362dd 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java @@ -81,7 +81,7 @@ public class FileAttributeConfigPersistenceService { @Transactional - public List setFileAttributesConfig(String dossierTemplateId, List fileAttributesConfig) { + public void setFileAttributesConfig(String dossierTemplateId, List fileAttributesConfig) { Set toSetIds = fileAttributesConfig.stream() .map(FileAttributeConfigEntity::getId) @@ -98,8 +98,6 @@ public class FileAttributeConfigPersistenceService { fileAttributesRepository.deleteByFileAttributeConfigId(ctr.getId()); fileAttributeConfigRepository.deleteById(ctr.getId()); }); - - return getFileAttributes(dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java index 0ccfdc594..ec2b7079f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java @@ -15,7 +15,7 @@ public interface FileAttributeConfigRepository extends JpaRepository findByDossierTemplateId(String dossierTemplateId); - @Modifying + @Modifying(clearAutomatically = true) @Query("update FileAttributeConfigEntity e set e.primaryAttribute = false where e.dossierTemplate.id = :dossierTemplateId") void updateAllPrimaryAttributeValuesToFalse(@Param("dossierTemplateId") String dossierTemplateId); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java index db3478d84..6cb0d7e2d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileAttributeTest.java @@ -396,4 +396,83 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest { } + @SneakyThrows + @Test + public void testUpdatePrimaryAttributeAndVerify() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + List initialConfigs = new ArrayList<>(); + initialConfigs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute A") + .primaryAttribute(true) + .label("Attribute A") + .build()); + initialConfigs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute B") + .primaryAttribute(false) + .label("Attribute B") + .build()); + initialConfigs.add(FileAttributeConfig.builder() + .csvColumnHeader("Attribute C") + .primaryAttribute(false) + .label("Attribute C") + .build()); + + FileAttributesConfig initialConfig = new FileAttributesConfig(); + initialConfig.setDelimiter(","); + initialConfig.setEncoding(UTF_ENCODING); + initialConfig.setFilenameMappingColumnHeaderName("Name"); + initialConfig.setFileAttributeConfigs(initialConfigs); + + fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), initialConfig); + + var loadedInitialConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()); + assertThat(loadedInitialConfig.getFileAttributeConfigs()).hasSize(3); + FileAttributeConfig initialPrimary = loadedInitialConfig.getFileAttributeConfigs().stream() + .filter(FileAttributeConfig::isPrimaryAttribute) + .findFirst() + .orElseThrow(() -> new AssertionError("No primary attribute found initially")); + assertThat(initialPrimary.getLabel()).isEqualTo("Attribute A"); + + List updatedConfigs = loadedInitialConfig.getFileAttributeConfigs().stream() + .map(config -> { + if (config.getLabel().equals("Attribute B")) { + config.setPrimaryAttribute(true); + } else if (config.getLabel().equals("Attribute A")) { + config.setPrimaryAttribute(false); + } + return config; + }) + .collect(Collectors.toList()); + + FileAttributesConfig updatedConfig = new FileAttributesConfig(); + updatedConfig.setDelimiter(loadedInitialConfig.getDelimiter()); + updatedConfig.setEncoding(loadedInitialConfig.getEncoding()); + updatedConfig.setFilenameMappingColumnHeaderName(loadedInitialConfig.getFilenameMappingColumnHeaderName()); + updatedConfig.setFileAttributeConfigs(updatedConfigs); + + fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), updatedConfig); + + var loadedUpdatedConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()); + assertThat(loadedUpdatedConfig.getFileAttributeConfigs()).hasSize(3); + FileAttributeConfig newPrimary = loadedUpdatedConfig.getFileAttributeConfigs().stream() + .filter(FileAttributeConfig::isPrimaryAttribute) + .findFirst() + .orElseThrow(() -> new AssertionError("No primary attribute found after update")); + assertThat(newPrimary.getLabel()).isEqualTo("Attribute B"); + + fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), loadedUpdatedConfig); + + var reloadedConfig = fileAttributeConfigClient.getFileAttributesConfiguration(dossier.getDossierTemplateId()); + assertThat(reloadedConfig.getFileAttributeConfigs()).hasSize(3); + FileAttributeConfig verifiedPrimary = reloadedConfig.getFileAttributeConfigs().stream() + .filter(FileAttributeConfig::isPrimaryAttribute) + .findFirst() + .orElseThrow(() -> new AssertionError("No primary attribute found after reapplying configuration")); + assertThat(verifiedPrimary.getLabel()).isEqualTo("Attribute B"); + } + + }