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:
commit
5936d66b46
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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());
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user