From 91d37f5c6043eb973584948f4e002cad6d03d6ae Mon Sep 17 00:00:00 2001 From: devplant Date: Wed, 29 Jun 2022 20:52:56 +0300 Subject: [PATCH] RED-4249-When I edit or create a dossier as an owner I want to select from multiple watermark configurations - add endpoint to check if watermark configuration is in use - added 3 new columns: createdBy, dateAdded, dateModified - update tests --- .../configuration/Watermark.java | 5 +++ .../v1/api/resources/WatermarkResource.java | 6 ++++ .../entity/configuration/WatermarkEntity.java | 8 ++++- .../processor/service/WatermarkService.java | 17 ++++++++-- .../repository/DossierRepository.java | 3 ++ .../controller/WatermarkController.java | 11 ++++--- .../sql/31-watermark-configuration.sql | 2 +- .../server/integration/tests/DossierTest.java | 15 ++++++++- .../integration/tests/WatermarkTest.java | 32 +++++++++++++++++++ 9 files changed, 89 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/Watermark.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/Watermark.java index 01d81b745..f9ee43d0f 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/Watermark.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/configuration/Watermark.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.OffsetDateTime; + @Data @Builder @NoArgsConstructor @@ -21,6 +23,9 @@ public class Watermark { private int opacity; private int fontSize; private String fontType; + private String createdBy; + private OffsetDateTime dateAdded; + private OffsetDateTime dateModified; private WatermarkOrientation orientation; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java index a1984a09b..19f78b844 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/WatermarkResource.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -11,6 +12,7 @@ import java.util.List; public interface WatermarkResource { String WATERMARK_PATH = "/watermark"; + String CHECK_USED_REST_PATH = "/used"; String WATERMARK_ID_PARAMETER_NAME = "watermarkId"; String WATERMARK_ID_PATH_VARIABLE = "/{" + WATERMARK_ID_PARAMETER_NAME + "}"; @@ -30,4 +32,8 @@ public interface WatermarkResource { @DeleteMapping(value = WATERMARK_PATH + WATERMARK_ID_PATH_VARIABLE) void deleteWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) long watermarkId); + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = WATERMARK_PATH + CHECK_USED_REST_PATH , produces = MediaType.APPLICATION_JSON_VALUE) + JSONPrimitive isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java index c956e8b8e..c8f842f30 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/configuration/WatermarkEntity.java @@ -12,6 +12,7 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import javax.persistence.*; +import java.time.OffsetDateTime; @Data @Builder @@ -40,7 +41,12 @@ public class WatermarkEntity { private int fontSize; @Column private String fontType; - + @Column + private String createdBy; + @Column + private OffsetDateTime dateAdded; + @Column + private OffsetDateTime dateModified; @Column @Enumerated(EnumType.STRING) private WatermarkOrientation orientation; 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 2ba8e32b5..b049c3c98 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 @@ -15,6 +15,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.transaction.Transactional; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.Optional; @@ -56,7 +58,8 @@ public class WatermarkService { if (loadedWatermark.isPresent()) { validateDossierTemplateId(watermark.getDossierTemplateId(), loadedWatermark.get().getDossierTemplateId()); validateWatermarkNameIsUnique(watermark.getName(), loadedWatermark.get().getDossierTemplateId(), loadedWatermark.get().getId()); - BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId"); + BeanUtils.copyProperties(watermark, loadedWatermark.get(), "dossierTemplateId", "createdBy", "dateAdded", "dateModified"); + loadedWatermark.get().setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(loadedWatermark.get().getDossierTemplateId()); loadedWatermark.get().setDossierTemplate(dossierTemplate); return loadedWatermark.get(); @@ -64,7 +67,8 @@ public class WatermarkService { validateDossierTemplateId(watermark.getDossierTemplateId(), null); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); WatermarkEntity watermarkEntity = new WatermarkEntity(); - BeanUtils.copyProperties(watermark, watermarkEntity, "id"); + BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); + watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); watermarkEntity.setDossierTemplate(dossierTemplate); return watermarkRepository.save(watermarkEntity); @@ -73,7 +77,8 @@ public class WatermarkService { validateDossierTemplateId(watermark.getDossierTemplateId(), null); validateWatermarkNameIsUnique(watermark.getName(), watermark.getDossierTemplateId(), 0); WatermarkEntity watermarkEntity = new WatermarkEntity(); - BeanUtils.copyProperties(watermark, watermarkEntity, "id"); + BeanUtils.copyProperties(watermark, watermarkEntity, "id", "dateAdded", "dateModified"); + watermarkEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); watermarkEntity.setDossierTemplate(dossierTemplate); return watermarkRepository.save(watermarkEntity); @@ -112,4 +117,10 @@ public class WatermarkService { return watermarkRepository.findByDossierTemplateId(dossierTemplateId); } + public boolean isWatermarkUsed(long watermarkId) { + watermarkRepository.findById(watermarkId); //check if watermark exists + int count = dossierRepository.countDossiersWithWatermarkInUse(watermarkId); + return count != 0; + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java index a523e65eb..68653d493 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierRepository.java @@ -66,4 +66,7 @@ public interface DossierRepository extends JpaRepository @Modifying @Query("update DossierEntity d set d.previewWatermarkId = null where d.previewWatermarkId = :previewWatermarkId") int countDeletePreviewWatermark(long previewWatermarkId); + + @Query("select count(d) from DossierEntity d where d.watermarkId = :watermarkId or d.previewWatermarkId = :watermarkId") + int countDossiersWithWatermarkInUse(long watermarkId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java index 7e229cca6..10077e376 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/WatermarkController.java @@ -1,13 +1,12 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import com.iqser.red.service.persistence.service.v1.api.resources.WatermarkResource; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -38,4 +37,8 @@ public class WatermarkController implements WatermarkResource { watermarkService.deleteWatermark(watermarkId); } + public JSONPrimitive isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId) { + return JSONPrimitive.of(watermarkService.isWatermarkUsed(watermarkId)); + } + } 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 246eaedad..f9abeee8c 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,6 @@ -- 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 DEFAULT TRUE; +alter table watermark_configuration add column name VARCHAR (255), add column enabled BOOLEAN DEFAULT TRUE, add column created_by VARCHAR (255), add column date_added TIMESTAMP WITHOUT TIME ZONE, add column date_modified TIMESTAMP WITHOUT TIME ZONE; --initialise the new columns for the current watermark configurations update watermark_configuration set name = 'Watermark ' || id, enabled = true; diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 6a5ea5a00..c94708e28 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -66,6 +66,10 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { var watermarkConfig = watermarkClient.createOrUpdateWatermark(watermark); + watermark.setEnabled(false); + watermark.setName("watermark disabled"); + var watermarkConfigDisabled = watermarkClient.createOrUpdateWatermark(watermark); + var allDossiers = dossierClient.getAllDossiers(false, false); assertThat(allDossiers.size()).isEqualTo(1); assertThat(allDossiers.get(0)).isEqualTo(dossier); @@ -79,7 +83,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setWatermarkId(watermarkConfig.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName("Dossier 1 Update"); - cru.setPreviewWatermarkId(watermarkConfig.getId()); + cru.setPreviewWatermarkId(watermarkConfigDisabled.getId()); // Create dossier status CreateOrUpdateDossierStatusRequest crudsr = new CreateOrUpdateDossierStatusRequest(); crudsr.setName("name1"); @@ -91,11 +95,20 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setDossierStatusId(loadedDossierStatus.getId()); + try { + dossierClient.updateDossier(cru, dossier.getId()); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(400); + } + + cru.setPreviewWatermarkId(watermarkConfig.getId()); var updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo("Dossier 1 Update"); assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getDossierStatusId()).isEqualTo(loadedDossierStatus.getId()); + assertThat(watermarkClient.isWatermarkUsed(watermarkConfig.getId())).isEqualTo(JSONPrimitive.of(true)); + // put dossier status to null cru.setDossierStatusId(null); updated = dossierClient.updateDossier(cru, dossier.getId()); 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 d625987d7..c3e660598 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 @@ -3,7 +3,12 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThrows; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import org.junit.Test; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; @@ -19,9 +24,15 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + @Autowired private WatermarkClient watermarkClient; + @Autowired + private DossierClient dossierClient; + @Test public void testWatermark() { @@ -42,10 +53,12 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { watermark.setOpacity(20); watermark.setOrientation(WatermarkOrientation.DIAGONAL); watermark.setDossierTemplateId(dossierTemplate.getId()); + watermark.setCreatedBy("user"); var saved = watermarkClient.createOrUpdateWatermark(watermark); var loadedWatermark = watermarkClient.getWatermark(saved.getId()); assertThat(loadedWatermark).isEqualTo(saved); + assertThat(saved.getDateAdded()).isNotNull(); // try to save the same watermark without id try { watermarkClient.createOrUpdateWatermark(watermark); @@ -62,9 +75,27 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { // update current watermark saved.setFontSize(14); + saved.setEnabled(true); saved.setDossierTemplateId(null); var updated = watermarkClient.createOrUpdateWatermark(saved); assertThat(updated.getDossierTemplateId()).isEqualTo(dossierTemplate.getId()); + assertThat(updated.getDateModified()).isNotNull(); + assertThat(updated.isEnabled()).isTrue(); + + assertThat(watermarkClient.isWatermarkUsed(updated.getId())).isEqualTo(JSONPrimitive.of(false)); + + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + + // update dossier with watermark config + CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); + + BeanUtils.copyProperties(dossier, cru); + cru.setWatermarkId(updated.getId()); + + var updatedDossier = dossierClient.updateDossier(cru, dossier.getId()); + assertThat(updatedDossier.getWatermarkId()).isEqualTo(updated.getId()); + + assertThat(watermarkClient.isWatermarkUsed(updated.getId())).isEqualTo(JSONPrimitive.of(true)); // update current watermark with new dossier template id updated.setDossierTemplateId("dossierTemplate2"); @@ -90,6 +121,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { } + } @Test