Pull request #465: RED-4249-When I edit or create a dossier as an owner I want to select from multiple watermark configurations

Merge in RED/persistence-service from RED-4249_fix5 to master

* commit '91d37f5c6043eb973584948f4e002cad6d03d6ae':
  RED-4249-When I edit or create a dossier as an owner I want to select from multiple watermark configurations
This commit is contained in:
Corina Olariu 2022-06-29 20:00:04 +02:00 committed by Timo Bejan
commit 5936d66b46
9 changed files with 89 additions and 10 deletions

View File

@ -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;
}

View File

@ -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<Boolean> isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId);
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -66,4 +66,7 @@ public interface DossierRepository extends JpaRepository<DossierEntity, String>
@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);
}

View File

@ -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<Boolean> isWatermarkUsed(@RequestParam(WATERMARK_ID_PARAMETER_NAME) long watermarkId) {
return JSONPrimitive.of(watermarkService.isWatermarkUsed(watermarkId));
}
}

View File

@ -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;

View File

@ -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());

View File

@ -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