diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java index 96000dc49..9241ee552 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/WatermarkService.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; @@ -52,10 +53,12 @@ public class WatermarkService { if (watermark.getId() != null) { // update watermarkRepository.findById(watermark.getId()) .ifPresentOrElse(loadedWatermark -> { + validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), loadedWatermark.getId()); BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); loadedWatermark.setDossierTemplate(dossierTemplate); }, () -> { + validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); WatermarkEntity watermarkEntity = new WatermarkEntity(); BeanUtils.copyProperties(watermark, watermarkEntity, "id"); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); @@ -64,6 +67,7 @@ public class WatermarkService { }); return watermarkRepository.findById(watermark.getId()).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); } else { + validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); WatermarkEntity watermarkEntity = new WatermarkEntity(); BeanUtils.copyProperties(watermark, watermarkEntity, "id"); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); @@ -75,15 +79,23 @@ public class WatermarkService { private void validateWatermark(Watermark watermark) { -// if (watermark == null) { -// throw new BadRequestException("The watermark may not be null"); -// } + if (StringUtils.isBlank(watermark.getName())) { + throw new BadRequestException("The watermark name must not be null"); + } if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) { throw new BadRequestException("The watermark may only contain ASCII characters"); } } + private void validateWatermarkNameIsUnique(String watermarkName, String dossierTemplateId, long watermarkId) { + getWatermarksForDossierTemplateId(dossierTemplateId).forEach(existing -> { + if (existing.getName().equals(watermarkName) && existing.getId() != watermarkId) { + throw new ConflictException("Watermark name must be unique within the same dossier template"); + } + }); + } + public List getWatermarksForDossierTemplateId(String dossierTemplateId) { return watermarkRepository.findByDossierTemplateId(dossierTemplateId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/sql/31-watermark-configuration.sql b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/sql/31-watermark-configuration.sql index a7d1d47d9..246eaedad 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/sql/31-watermark-configuration.sql +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/sql/31-watermark-configuration.sql @@ -1,6 +1,8 @@ -- add the generated id to watermark_configuration table alter table watermark_configuration add column id BIGINT GENERATED ALWAYS AS IDENTITY; -alter table watermark_configuration add column name VARCHAR (255), add column enabled BOOLEAN; +alter table watermark_configuration add column name VARCHAR (255), add column enabled BOOLEAN DEFAULT TRUE; +--initialise the new columns for the current watermark configurations +update watermark_configuration set name = 'Watermark ' || id, enabled = true; -- update the primary key constraint based on the new configuration and add the foreign key contraints to the dossier and dossier_template tables alter table watermark_configuration drop constraint watermark_configuration_pkey; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java index fce23740a..0b3cf6248 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/WatermarkTest.java @@ -28,14 +28,13 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); try { - watermarkClient.getWatermark(Long.valueOf(13)); + watermarkClient.getWatermark(13L); } catch (FeignException.FeignClientException e) { assertThat(e.status()).isEqualTo(404); } Watermark watermark = new Watermark(); watermark.setName("watermark name"); - watermark.setEnabled(true); watermark.setText("Minions ipsum chasy para tu la bodaaa bananaaaa hana dul sae. Chasy hana dul sae pepete hana dul sae belloo! Tatata bala tu ti aamoo! Jeje."); watermark.setFontSize(12); watermark.setFontType("font"); @@ -47,12 +46,26 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var saved = watermarkClient.createOrUpdateWatermark(watermark); var loadedWatermark = watermarkClient.getWatermark(saved.getId()); assertThat(loadedWatermark).isEqualTo(saved); - - watermark.setFontSize(14); - saved = watermarkClient.createOrUpdateWatermark(watermark); + // update current watermark + saved.setFontSize(14); + saved = watermarkClient.createOrUpdateWatermark(saved); loadedWatermark = watermarkClient.getWatermark(saved.getId()); assertThat(loadedWatermark).isEqualTo(saved); + var watermarkList = watermarkClient.getWatermarksForDossierTemplateId(dossierTemplate.getId()); + assertThat(watermarkList.size()).isEqualTo(1); + + // create new watermark with same name: + Watermark watermark2 = new Watermark(); + watermark2.setName("watermark name"); + watermark2.setOrientation(WatermarkOrientation.DIAGONAL); + watermark2.setDossierTemplateId(dossierTemplate.getId()); + + try { + watermarkClient.createOrUpdateWatermark(watermark2); + } catch (FeignException.FeignClientException e) { + assertThat(e.status()).isEqualTo(409); + } // Delete first time watermarkClient.deleteWatermark(saved.getId()); diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index 9a3007c32..d53903a98 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -27,7 +27,7 @@ 3.114.0 2.36.0 - 3.105.0 + 3.111.0 3.47.0