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 1987e6c88..01d81b745 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 @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,6 +12,9 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class Watermark { + private Long id; + private String name; + private boolean enabled; private String dossierTemplateId; private String text; private String hexColor; @@ -19,5 +23,4 @@ public class Watermark { private String fontType; private WatermarkOrientation orientation; - } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java index 34c405e21..7d3d0a567 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierRequest.java @@ -33,10 +33,6 @@ public class CreateOrUpdateDossierRequest { @Builder.Default private Set downloadFileTypes = new HashSet<>(); - private boolean watermarkEnabled; - - private boolean watermarkPreviewEnabled; - private OffsetDateTime dueDate; private String dossierTemplateId; @@ -48,4 +44,7 @@ public class CreateOrUpdateDossierRequest { private String dossierStatusId; + private Long watermarkId; + private Long previewWatermarkId; + } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java index a4efadc55..245f6af44 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/Dossier.java @@ -27,8 +27,8 @@ public class Dossier { private Set approverIds = new HashSet<>(); private Set downloadFileTypes = new HashSet<>(); private Set reportTemplateIds = new HashSet<>(); - private boolean watermarkEnabled; - private boolean watermarkPreviewEnabled; + private Long watermarkId; + private Long previewWatermarkId; private OffsetDateTime softDeletedTime; private OffsetDateTime hardDeletedTime; private OffsetDateTime startDate; 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 d4cb47872..c541ec656 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 @@ -9,18 +9,18 @@ import org.springframework.web.bind.annotation.*; public interface WatermarkResource { String WATERMARK_PATH = "/watermark"; - String DOSSIER_TEMPLATE_PARAMETER_NAME = "dossierTemplateId"; - String DOSSIER_TEMPLATE_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_PARAMETER_NAME + "}"; + String WATERMARK_ID_PARAMETER_NAME = "watermarkId"; + String WATERMARK_ID_PATH_VARIABLE = "/{" + WATERMARK_ID_PARAMETER_NAME + "}"; @ResponseStatus(HttpStatus.CREATED) - @PostMapping(value = WATERMARK_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) - Watermark saveWatermark(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody Watermark watermark); + @PostMapping(value = WATERMARK_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + Watermark createOrUpdateWatermark(@RequestBody Watermark watermark); - @GetMapping(value = WATERMARK_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) - Watermark getWatermark(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); + @GetMapping(value = WATERMARK_PATH + WATERMARK_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + Watermark getWatermark(@PathVariable(WATERMARK_ID_PARAMETER_NAME) Long watermarkId); @ResponseStatus(HttpStatus.NO_CONTENT) - @DeleteMapping(value = WATERMARK_PATH + DOSSIER_TEMPLATE_PATH_VARIABLE) - void deleteWatermark(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId); + @DeleteMapping(value = WATERMARK_PATH + WATERMARK_ID_PATH_VARIABLE) + void deleteWatermark(@PathVariable(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 255eceb2d..c956e8b8e 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 @@ -22,7 +22,13 @@ import javax.persistence.*; public class WatermarkEntity { @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; @Column + private String name; + @Column + private boolean enabled; + @Column(updatable = false, insertable = false, name = "dossier_template_id") private String dossierTemplateId; @Column(length = 4000) private String text; @@ -39,9 +45,8 @@ public class WatermarkEntity { @Enumerated(EnumType.STRING) private WatermarkOrientation orientation; - @OneToOne(fetch = FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dossier_template_id") private DossierTemplateEntity dossierTemplate; - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java index f74a1767b..7b58fd913 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierEntity.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier import com.fasterxml.jackson.annotation.JsonIgnore; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter; import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStringSetConverter; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; @@ -59,12 +60,6 @@ public class DossierEntity { @Convert(converter = JSONDownloadFileTypeConverter.class) private Set downloadFileTypes = new HashSet<>(); - @Column - private boolean watermarkEnabled; - - @Column - private boolean watermarkPreviewEnabled; - @Column private OffsetDateTime softDeletedTime; @@ -113,6 +108,18 @@ public class DossierEntity { @Column(updatable = false, insertable = false, name = "dossier_status_id") private String dossierStatusId; + @Column(updatable = false, insertable = false, name = "watermark_id") + private Long watermarkId; + + @ManyToOne(fetch = FetchType.LAZY) + private WatermarkEntity watermark; + + @Column(updatable = false, insertable = false, name = "preview_watermark_id") + private Long previewWatermarkId; + + @ManyToOne(fetch = FetchType.LAZY) + private WatermarkEntity previewWatermark; + public boolean isDeleted() { return softDeletedTime != null || hardDeletedTime != null; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java index a453fc3f1..87709f955 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierTemplateEntity.java @@ -8,8 +8,8 @@ import java.util.Set; import javax.persistence.*; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; @@ -89,6 +89,11 @@ public class DossierTemplateEntity { @OneToMany(mappedBy = "dossierTemplate") private List dossierStatusList = new ArrayList<>(); + @Builder.Default + @Fetch(FetchMode.SUBSELECT) + @OneToMany(mappedBy = "dossierTemplate") + private List watermarkConfigs = new ArrayList<>(); + @Transient private DossierTemplateStatus dossierTemplateStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java index cb62a6e84..2f0750346 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java @@ -3,7 +3,6 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; -import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; @@ -45,7 +44,6 @@ public class DossierTemplateCloneService { private final EntryPersistenceService entryPersistenceService; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final ReportTemplatePersistenceService reportTemplatePersistenceService; - private final WatermarkService watermarkService; private final ColorsService colorsService; private final StorageService storageService; private final DossierStatusPersistenceService dossierStatusPersistenceService; @@ -93,9 +91,6 @@ public class DossierTemplateCloneService { //set report templates cloneReportTemplates(dossierTemplate, clonedDossierTemplate.getId()); - //set watermarks - cloneWatermark(dossierTemplate.getId(), clonedDossierTemplate.getId()); - //set colors cloneColors(dossierTemplate.getId(), clonedDossierTemplate.getId()); @@ -205,27 +200,6 @@ public class DossierTemplateCloneService { } } - - private void cloneWatermark(String dossierTemplateId, String clonedDossierTemplateId) { - - try { - var watermark = watermarkService.getWatermark(dossierTemplateId); - WatermarkEntity we = WatermarkEntity.builder() - .dossierTemplateId(clonedDossierTemplateId) - .text(watermark.getText()) - .hexColor(watermark.getHexColor()) - .opacity(watermark.getOpacity()) - .fontType(watermark.getFontType()) - .fontSize(watermark.getFontSize()) - .orientation(watermark.getOrientation()) - .build(); - watermarkService.saveWatermark(clonedDossierTemplateId, we); - } catch (NotFoundException e) { - log.debug("No watermark config found for cloning {}", dossierTemplateId); - } - } - - private void cloneColors(String dossierTemplateId, String clonedDossierTemplateId) { var colors = colorsService.getColors(dossierTemplateId); 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 470752def..e43584d0c 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,9 +2,11 @@ package com.iqser.red.service.persistence.management.v1.processor.service; import javax.transaction.Transactional; +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; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; @@ -15,50 +17,70 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import java.util.Optional; + @Slf4j @Service @RequiredArgsConstructor public class WatermarkService { private final WatermarkRepository watermarkRepository; + private final DossierRepository dossierRepository; + private final DossierTemplatePersistenceService dossierTemplatePersistenceService; - public void deleteWatermark(String dossierTemplateId) { - try { - watermarkRepository.deleteById(dossierTemplateId); - } catch (EmptyResultDataAccessException e) { - log.info("Watermark for dossierTemplateId '{}' was already deleted.", dossierTemplateId); - } + @Transactional + public void deleteWatermark(Long watermarkId) { + watermarkRepository.findById(watermarkId).ifPresentOrElse(loadedWatermark -> { + dossierRepository.countDeleteWatermark(watermarkId); + dossierRepository.countDeletePreviewWatermark(watermarkId); + watermarkRepository.deleteById(watermarkId); + }, () -> { + log.debug("Watermark with id '{}' was already deleted.", watermarkId); + }); } - public WatermarkEntity getWatermark(String dossierTemplateId) { + public WatermarkEntity getWatermark(Long watermarkId) { - return watermarkRepository.findById(dossierTemplateId) + return watermarkRepository.findById(watermarkId) .orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); } @Transactional - public WatermarkEntity saveWatermark(String dossierTemplateId, WatermarkEntity watermark) { + public WatermarkEntity createOrUpdateWatermark(Watermark watermark) { validateWatermark(watermark); - watermarkRepository.findById(dossierTemplateId) - .ifPresentOrElse(loadedWatermark -> BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"), () -> { - watermark.setDossierTemplateId(dossierTemplateId); - watermarkRepository.save(watermark); - }); - - return watermarkRepository.findById(dossierTemplateId) - .orElseThrow(() -> new NotFoundException("Watermark not found")); + if (watermark.getId() != null) { // update + watermarkRepository.findById(watermark.getId()) + .ifPresentOrElse(loadedWatermark -> { + BeanUtils.copyProperties(watermark, loadedWatermark, "dossierTemplateId"); + var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); + loadedWatermark.setDossierTemplate(dossierTemplate); + }, () -> { + WatermarkEntity watermarkEntity = new WatermarkEntity(); + BeanUtils.copyProperties(watermark, watermarkEntity, "id"); + var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); + watermarkEntity.setDossierTemplate(dossierTemplate); + watermarkRepository.save(watermarkEntity); + }); + return watermarkRepository.findById(watermark.getId()).orElseThrow(() -> new NotFoundException("Watermark Configuration not found")); + } else { + WatermarkEntity watermarkEntity = new WatermarkEntity(); + BeanUtils.copyProperties(watermark, watermarkEntity, "id"); + var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(watermark.getDossierTemplateId()); + watermarkEntity.setDossierTemplate(dossierTemplate); + return watermarkRepository.save(watermarkEntity); + } } - private void validateWatermark(WatermarkEntity watermark) { + private void validateWatermark(Watermark watermark) { - if (watermark == null) { - throw new BadRequestException("The watermark may not be null"); - } +// if (watermark == null) { +// throw new BadRequestException("The watermark may not be null"); +// } if (StringUtils.isNotBlank(watermark.getText()) && !StringUtils.isAsciiPrintable(StringUtils.normalizeSpace(watermark.getText()))) { throw new BadRequestException("The watermark may only contain ASCII characters"); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 8a1422bef..96fb10815 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -12,6 +12,8 @@ import java.util.stream.Collectors; import javax.transaction.Transactional; +import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -29,6 +31,7 @@ import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor +@Slf4j public class DossierPersistenceService { @@ -37,6 +40,7 @@ public class DossierPersistenceService { private final DossierTemplateRepository dossierTemplateRepository; private final ReportTemplateRepository reportTemplateRepository; private final DossierStatusPersistenceService dossierStatusPersistenceService; + private final WatermarkService watermarkService; public DossierEntity insert(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) { @@ -51,7 +55,7 @@ public class DossierPersistenceService { reportTemplates.forEach(r -> r.getDossiers().add(dossier)); dossier.setReportTemplates(reportTemplates); this.handleDossierStatus(createOrUpdateDossierRequest, dossier); - + this.handleWatermark(createOrUpdateDossierRequest, dossier); return dossierRepository.save(dossier); @@ -75,6 +79,7 @@ public class DossierPersistenceService { }); dossier.setReportTemplates(reportTemplates); this.handleDossierStatus(createOrUpdateDossierRequest, dossier); + this.handleWatermark(createOrUpdateDossierRequest, dossier); }); } @@ -92,6 +97,29 @@ public class DossierPersistenceService { } } + private void handleWatermark(CreateOrUpdateDossierRequest createOrUpdateDossierRequest, DossierEntity dossier) { + if (createOrUpdateDossierRequest.getWatermarkId() != null) { + var watermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getWatermarkId()); + if (watermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) { + dossier.setWatermark(watermarkEntity); + } else { + log.debug("Invalid watermark id"); + } + } else { + dossier.setWatermark(null); + } + if (createOrUpdateDossierRequest.getPreviewWatermarkId() != null) { + var previewWatermarkEntity = watermarkService.getWatermark(createOrUpdateDossierRequest.getPreviewWatermarkId()); + if (previewWatermarkEntity.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) { + dossier.setPreviewWatermark(previewWatermarkEntity); + } else { + log.debug("Invalid preview watermark id"); + } + } else { + dossier.setPreviewWatermark(null); + } + } + public DossierEntity getActiveOrArchivedDossier(String dossierId) { 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 73c8bef68..4b0441d34 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 @@ -58,4 +58,12 @@ public interface DossierRepository extends JpaRepository @Query("select d from DossierEntity d where d.dossierTemplateId = :dossierTemplateId") List findByDossierTemplateId(String dossierTemplateId); + + @Modifying + @Query("update DossierEntity d set d.watermarkId = null where d.watermarkId = :watermarkId") + int countDeleteWatermark(Long watermarkId); + + @Modifying + @Query("update DossierEntity d set d.previewWatermarkId = null where d.previewWatermarkId = :previewWatermarkId") + int countDeletePreviewWatermark(Long previewWatermarkId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/WatermarkRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/WatermarkRepository.java index adf8a9f6b..8d0978a41 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/WatermarkRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/WatermarkRepository.java @@ -3,5 +3,5 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import org.springframework.data.jpa.repository.JpaRepository; -public interface WatermarkRepository extends JpaRepository { +public interface WatermarkRepository extends JpaRepository { } 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 63f62b606..0a9e1e55a 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 @@ -17,16 +17,16 @@ public class WatermarkController implements WatermarkResource { private final WatermarkService watermarkService; - public Watermark saveWatermark(String dossierTemplateId, @RequestBody Watermark watermark) { - return convert(watermarkService.saveWatermark(dossierTemplateId, convert(watermark, WatermarkEntity.class)), Watermark.class); + public Watermark createOrUpdateWatermark(@RequestBody Watermark watermark) { + return convert(watermarkService.createOrUpdateWatermark(watermark), Watermark.class); } - public Watermark getWatermark(String dossierTemplateId) { - return convert(watermarkService.getWatermark(dossierTemplateId), Watermark.class); + public Watermark getWatermark(Long watermarkId) { + return convert(watermarkService.getWatermark(watermarkId), Watermark.class); } - public void deleteWatermark(String dossierTemplateId) { - watermarkService.deleteWatermark(dossierTemplateId); + public void deleteWatermark(Long watermarkId) { + watermarkService.deleteWatermark(watermarkId); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java index cc9301283..fc98e375f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/download/DownloadPreparationService.java @@ -88,15 +88,15 @@ public class DownloadPreparationService { } if (downloadFileType.name().equals(DownloadFileType.PREVIEW.name())) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", addSuffix(fileStatus.getFilename(), "highlighted"), - getPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.isWatermarkPreviewEnabled()))); + getPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId()))); } if (downloadFileType.name().equals(DownloadFileType.DELTA_PREVIEW.name())) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Delta Preview", addSuffix(fileStatus.getFilename(), "delta_highlighted"), - getDeltaPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.isWatermarkPreviewEnabled()))); + getDeltaPreview(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getPreviewWatermarkId()))); } if (downloadFileType.name().equals(DownloadFileType.REDACTED.name())) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Redacted", addSuffix(fileStatus.getFilename(), "redacted"), - getRedacted(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.isWatermarkEnabled()))); + getRedacted(dossier.getId(), fileId, redactionLog, dossier.getDossierTemplateId(), dossier.getWatermarkId()))); } } log.info("Successfully added file {}/{} for downloadId {}, took {}", i, fileIds @@ -173,38 +173,38 @@ public class DownloadPreparationService { } private byte[] getRedacted(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, - boolean watermarkEnabled) { + Long watermarkId) { return pdfTronRedactionClient.redact(RedactionRequest.builder() .dossierId(dossierId) .fileId(fileId) .dossierTemplateId(dossierTemplateId) .redactionLog(redactionLog) - .applyWatermark(watermarkEnabled) + .watermarkId(watermarkId) .build()).getDocument(); } - private byte[] getPreview(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, boolean watermarkEnabled) { + private byte[] getPreview(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, Long watermarkId) { return pdfTronRedactionClient.redactionPreview(RedactionRequest.builder() .dossierId(dossierId) .fileId(fileId) .dossierTemplateId(dossierTemplateId) .redactionLog(redactionLog) - .applyWatermark(watermarkEnabled) + .watermarkId(watermarkId) .build()).getDocument(); } - private byte[] getDeltaPreview(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, boolean watermarkEnabled) { + private byte[] getDeltaPreview(String dossierId, String fileId, RedactionLog redactionLog, String dossierTemplateId, Long watermarkId) { return pdfTronRedactionClient.redactionPreviewDiff(RedactionRequest.builder() .dossierId(dossierId) .fileId(fileId) .dossierTemplateId(dossierTemplateId) .redactionLog(redactionLog) - .applyWatermark(watermarkEnabled) + .watermarkId(watermarkId) .build()).getDocument(); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml index 9e28ec0d8..630a85dbc 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/db.changelog-master.yaml @@ -73,3 +73,5 @@ databaseChangeLog: file: db/changelog/sql/30-change-bigint-to-serial.sql - include: file: db/changelog/31-add-file-size-column.changelog.yaml + - include: + file: db/changelog/sql/31-watermark-configuration.sql 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 new file mode 100644 index 000000000..a7d1d47d9 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/sql/31-watermark-configuration.sql @@ -0,0 +1,20 @@ +-- 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; + +-- 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; +alter table watermark_configuration add constraint watermark_configuration_pkey PRIMARY KEY (id); +delete from watermark_configuration where dossier_template_id not in ( select id from dossier_template ); +alter table watermark_configuration add constraint watermark_dossier_template_id_fk FOREIGN KEY (dossier_template_id) REFERENCES dossier_template (id); +-- add the link to watermark_configuration to dossier table and the foreign key contraints +alter table dossier add column watermark_id BIGINT; +alter table dossier add column preview_watermark_id BIGINT; +alter table dossier add constraint watermark_id_fk FOREIGN KEY (watermark_id) REFERENCES watermark_configuration (id); +alter table dossier add constraint preview_watermark_id_fk FOREIGN KEY (preview_watermark_id) REFERENCES watermark_configuration (id); +-- update the dossier table with the corresponding watermark based on the dossier template given +update dossier d set watermark_id = (select id from watermark_configuration w where w.dossier_template_id = d.dossier_template_id) where d.watermark_enabled = true; +update dossier d set preview_watermark_id = (select id from watermark_configuration w where w.dossier_template_id = d.dossier_template_id) where d.watermark_preview_enabled = true; +-- remove the previous columns, not needed anymore +alter table dossier drop column watermark_enabled; +alter table dossier drop column watermark_preview_enabled; \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java index 26eda785b..3d5ecab04 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/service/DossierTesterAndProvider.java @@ -54,7 +54,6 @@ public class DossierTesterAndProvider { if (dossierStatus != null) { cru.setDossierStatusId(dossierStatus.getId()); } - cru.setWatermarkEnabled(true); cru.setMemberIds(Sets.newHashSet("1")); cru.setOwnerId("1"); cru.setApproverIds(Sets.newHashSet("1")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index e47ca710c..e20d83620 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -207,15 +207,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .activeByDefault(true) .multiFileReport(false) .build()); - watermarkClient.saveWatermark(dossierTemplate.getId(), Watermark.builder() - .dossierTemplateId(dossierTemplate.getId()) - .fontSize(10) - .fontType("Arial") - .text("watermark") - .hexColor("#123456") - .opacity(1) - .orientation(WatermarkOrientation.HORIZONTAL) - .build()); var col = Colors.builder() .analysisColor("#111111") .defaultColor("#222222") @@ -268,7 +259,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { assertThat(reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()) .get(0) .getFileName()).isEqualTo(reportTemplateClient.getAvailableReportTemplates(clonedDT.getId()).get(0).getFileName()); - assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkClient.getWatermark(clonedDT.getId()).getText()); assertThat(dictionaryClient.getColors(dossierTemplate.getId()).getRequestAdd()).isEqualTo(dictionaryClient.getColors(clonedDT.getId()).getRequestAdd()); assertThat(dictionaryClient.getAllTypesForDossierTemplate(dossierTemplate.getId(), false) .get(0) 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 aa113e1b2..3d436d037 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 @@ -7,6 +7,9 @@ import java.time.OffsetDateTime; import java.util.List; import java.util.Set; +import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +47,9 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierStatusClient dossierStatusClient; + @Autowired + private WatermarkClient watermarkClient; + @Test public void testDossier() { @@ -51,6 +57,15 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { var dossier = dossierTesterAndProvider.provideTestDossier(); + 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.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dossier.getDossierTemplateId()); + + var watermarkConfig = watermarkClient.createOrUpdateWatermark(watermark); + var allDossiers = dossierClient.getAllDossiers(false, false); assertThat(allDossiers.size()).isEqualTo(1); assertThat(allDossiers.get(0)).isEqualTo(dossier); @@ -61,10 +76,10 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { // update CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDossierTemplateId(dossier.getId()); - cru.setWatermarkPreviewEnabled(true); + cru.setWatermarkId(watermarkConfig.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName("Dossier 1 Update"); - cru.setWatermarkPreviewEnabled(true); + cru.setPreviewWatermarkId(watermarkConfig.getId()); // Create dossier status CreateOrUpdateDossierStatusRequest crudsr = new CreateOrUpdateDossierStatusRequest(); crudsr.setName("name1"); @@ -78,7 +93,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { var updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo("Dossier 1 Update"); - assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getDossierStatusId()).isEqualTo(loadedDossierStatus.getId()); // put dossier status to null @@ -232,7 +247,17 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { @Test public void testDossierWithReportTemplates() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + 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.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dossier.getDossierTemplateId()); + + var watermarkConfig = watermarkClient.createOrUpdateWatermark(watermark); + String dossierName = "Dossier 1 Update"; var allDossiers = dossierClient.getAllDossiers(false, false); @@ -246,12 +271,12 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setDossierTemplateId(dossier.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName(dossierName); - cru.setWatermarkPreviewEnabled(true); + cru.setPreviewWatermarkId(watermarkConfig.getId()); cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId(), "id-does-not-exist-1", "id-does-not-exist-2")); var updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo(dossierName); - assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); @@ -270,12 +295,12 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setDossierTemplateId(dossier.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName(dossierName); - cru.setWatermarkPreviewEnabled(true); + cru.setPreviewWatermarkId(watermarkConfig.getId()); cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId())); updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo(dossierName); - assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId()); @@ -290,12 +315,12 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setDossierTemplateId(dossier.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName(dossierName); - cru.setWatermarkPreviewEnabled(true); + cru.setPreviewWatermarkId(watermarkConfig.getId()); cru.setReportTemplateIds(List.of(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId())); updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo(dossierName); - assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId()); @@ -310,12 +335,12 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { cru.setDossierTemplateId(dossier.getId()); BeanUtils.copyProperties(dossier, cru); cru.setDossierName(dossierName); - cru.setWatermarkPreviewEnabled(true); + cru.setPreviewWatermarkId(watermarkConfig.getId()); cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId())); updated = dossierClient.updateDossier(cru, dossier.getId()); assertThat(updated.getDossierName()).isEqualTo(dossierName); - assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getPreviewWatermarkId()).isEqualTo(watermarkConfig.getId()); assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 9be87eb59..7698178b9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -99,7 +99,7 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes .memberIds(dossier.getMemberIds()) .approverIds(dossier.getApproverIds()) .downloadFileTypes(dossier.getDownloadFileTypes()) - .watermarkEnabled(dossier.isWatermarkEnabled()) + .watermarkId(dossier.getWatermarkId()) .dueDate(dossier.getDueDate()) .dossierTemplateId(dossier.getDossierTemplateId()) .reportTemplateIds(availableTemplates.stream().map(a -> a.getTemplateId()).collect(Collectors.toList())) 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 b4fa6622a..fce23740a 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,37 +28,40 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); try { - watermarkClient.getWatermark(dossierTemplate.getId()); + watermarkClient.getWatermark(Long.valueOf(13)); } 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"); watermark.setHexColor("#dddddd"); watermark.setOpacity(20); watermark.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dossierTemplate.getId()); - var saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); - assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); + var saved = watermarkClient.createOrUpdateWatermark(watermark); + var loadedWatermark = watermarkClient.getWatermark(saved.getId()); + assertThat(loadedWatermark).isEqualTo(saved); watermark.setFontSize(14); - saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); - assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); + saved = watermarkClient.createOrUpdateWatermark(watermark); + loadedWatermark = watermarkClient.getWatermark(saved.getId()); + assertThat(loadedWatermark).isEqualTo(saved); // Delete first time - watermarkClient.deleteWatermark(dossierTemplate.getId()); + watermarkClient.deleteWatermark(saved.getId()); try { - watermarkClient.getWatermark(dossierTemplate.getId()); + watermarkClient.getWatermark(saved.getId()); } catch (FeignException.FeignClientException e) { assertThat(e.status()).isEqualTo(404); } - // Delete second time - watermarkClient.deleteWatermark(dossierTemplate.getId()); } @@ -70,6 +73,9 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var watermarkText = "This is not an ASCII text äöüÄÖÜéèê... \nand many more...\r May the force with you! "; Watermark watermark = new Watermark(); + watermark.setName("name"); + watermark.setEnabled(true); + watermark.setDossierTemplateId(dossierTemplate.getId()); watermark.setFontSize(12); watermark.setFontType("font"); watermark.setHexColor("#dddddd"); @@ -78,7 +84,7 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { watermark.setText(watermarkText); // Act - FeignException exception = assertThrows(FeignException.class, () -> watermarkClient.saveWatermark(dossierTemplate.getId(), watermark)); + FeignException exception = assertThrows(FeignException.class, () -> watermarkClient.createOrUpdateWatermark(watermark)); // Assert assertThat(exception.status()).isEqualTo(400); @@ -93,6 +99,9 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { var watermarkText = "We love ASCII!\n\nThis text contains only ASCII chars and newlines\r\r\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; Watermark watermark = new Watermark(); + watermark.setName("name"); + watermark.setEnabled(true); + watermark.setDossierTemplateId(dossierTemplate.getId()); watermark.setFontSize(12); watermark.setFontType("font"); watermark.setHexColor("#dddddd"); @@ -101,11 +110,12 @@ public class WatermarkTest extends AbstractPersistenceServerServiceTest { watermark.setText(watermarkText); // Act - var saved = watermarkClient.saveWatermark(dossierTemplate.getId(), watermark); + var saved = watermarkClient.createOrUpdateWatermark(watermark); + var loadedWatermarked = watermarkClient.getWatermark(saved.getId()); // Assert - assertThat(watermarkClient.getWatermark(dossierTemplate.getId())).isEqualTo(saved); - assertThat(watermarkClient.getWatermark(dossierTemplate.getId()).getText()).isEqualTo(watermarkText); + assertThat(loadedWatermarked).isEqualTo(saved); + assertThat(loadedWatermarked.getText()).isEqualTo(watermarkText); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java index d0f4c6b11..9407e4787 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/FilePerformanceTest.java @@ -3,11 +3,14 @@ package com.iqser.red.service.peristence.v1.server.integration.tests.performance import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatsClient; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; +import com.iqser.red.service.peristence.v1.server.integration.client.WatermarkClient; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.*; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.Watermark; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.configuration.WatermarkOrientation; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; @@ -17,7 +20,6 @@ import org.assertj.core.util.Sets; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DataIntegrityViolationException; import java.time.OffsetDateTime; import java.util.*; @@ -45,6 +47,9 @@ public class FilePerformanceTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierStatsClient dossierStatsClient; + @Autowired + private WatermarkClient watermarkClient; + @Before public void setupTest() { @@ -60,6 +65,15 @@ public class FilePerformanceTest extends AbstractPersistenceServerServiceTest { dte = dossierTemplateRepository.save(dte); + 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.setOrientation(WatermarkOrientation.DIAGONAL); + watermark.setDossierTemplateId(dte.getId()); + + var watermarkConfig = watermarkClient.createOrUpdateWatermark(watermark); + List fces = new ArrayList<>(); for (int i = 0; i < FILE_ATTRIBUTE_COUNT; i++) { FileAttributeConfigEntity fce = new FileAttributeConfigEntity(); @@ -122,7 +136,7 @@ public class FilePerformanceTest extends AbstractPersistenceServerServiceTest { d.setDossierTemplate(dte); d.setDueDate(OffsetDateTime.now()); d.setDescription("Lorem Ipsum"); - d.setWatermarkEnabled(true); + d.setWatermarkId(watermarkConfig.getId()); d.setStartDate(OffsetDateTime.now()); d.setApproverIds(Sets.newTreeSet("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")); d.setMemberIds(Sets.newTreeSet("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 366821724..a6b1fc58b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -196,7 +196,6 @@ public abstract class AbstractPersistenceServerServiceTest { dossierAttributeConfigRepository.deleteAll(); downloadStatusRepository.deleteAll(); fileAttributesRepository.deleteAll(); - watermarkRepository.deleteAll(); smtpRepository.deleteAll(); digitalSignatureRepository.deleteAll(); fileAttributesGeneralConfigurationRepository.deleteAll(); @@ -212,12 +211,12 @@ public abstract class AbstractPersistenceServerServiceTest { legalBasisChangeRepository.deleteAll(); imageRecategorizationRepository.deleteAll(); legalBasisMappingRepository.deleteAll(); - watermarkRepository.deleteAll(); ruleSetRepository.deleteAll(); smtpRepository.deleteAll(); fileRepository.deleteAll(); dossierRepository.deleteAll(); dossierStatusRepository.deleteAll(); + watermarkRepository.deleteAll(); dossierTemplateRepository.deleteAll(); notificationPreferencesRepository.deleteAll(); indexInformationRepository.deleteAll(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/migration/dossier_v4.json b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/migration/dossier_v4.json index 604b1451e..6d1253933 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/migration/dossier_v4.json +++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/migration/dossier_v4.json @@ -1 +1 @@ -[{"dossierId":"48c10c3e-9831-4165-a80e-6e96ba2c3e98","dossierTemplateId":"49156a1f-30cc-412f-8778-eb5bd842d709","dossierName":"Dom2","date":"2021-11-15T13:27:48Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["e37613cb-e093-49af-ae69-5678148c29b8"],"watermarkEnabled":true,"watermarkPreviewEnabled":false,"softDeletedTime":null,"hardDeletedTime":null},{"dossierId":"b2c9c4e5-5382-4862-9402-5b619c41a68c","dossierTemplateId":"49156a1f-30cc-412f-8778-eb5bd842d709","dossierName":"Dom1","date":"2021-11-15T13:27:19Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["75674b0f-7c70-4903-b30a-2a4aa330b6b1","87553a68-49e7-4bb6-9af7-263dcb81e964","e2eff609-1dbb-4f10-a1a2-de71f03e5875","e37613cb-e093-49af-ae69-5678148c29b8"],"watermarkEnabled":true,"watermarkPreviewEnabled":false,"softDeletedTime":null,"hardDeletedTime":null},{"dossierId":"d46267c1-bb19-44ca-8c0c-60fb5d5309c5","dossierTemplateId":"9b7bd575-4566-4408-984f-b26da1d2616e","dossierName":"Dom3","date":"2021-11-15T13:28:31Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["bb18db9e-2730-403c-90c0-d306aac06284"],"watermarkEnabled":true,"watermarkPreviewEnabled":false,"softDeletedTime":null,"hardDeletedTime":null}] \ No newline at end of file +[{"dossierId":"48c10c3e-9831-4165-a80e-6e96ba2c3e98","dossierTemplateId":"49156a1f-30cc-412f-8778-eb5bd842d709","dossierName":"Dom2","date":"2021-11-15T13:27:48Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["e37613cb-e093-49af-ae69-5678148c29b8"],"softDeletedTime":null,"hardDeletedTime":null},{"dossierId":"b2c9c4e5-5382-4862-9402-5b619c41a68c","dossierTemplateId":"49156a1f-30cc-412f-8778-eb5bd842d709","dossierName":"Dom1","date":"2021-11-15T13:27:19Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["75674b0f-7c70-4903-b30a-2a4aa330b6b1","87553a68-49e7-4bb6-9af7-263dcb81e964","e2eff609-1dbb-4f10-a1a2-de71f03e5875","e37613cb-e093-49af-ae69-5678148c29b8"],"softDeletedTime":null,"hardDeletedTime":null},{"dossierId":"d46267c1-bb19-44ca-8c0c-60fb5d5309c5","dossierTemplateId":"9b7bd575-4566-4408-984f-b26da1d2616e","dossierName":"Dom3","date":"2021-11-15T13:28:31Z","description":"","status":"ACTIVE","ownerId":"f8960240-9973-42e9-9b0f-ed096ff5a018","memberIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"approverIds":["f8960240-9973-42e9-9b0f-ed096ff5a018"],"downloadFileTypes":["PREVIEW","REDACTED"],"reportTypes":[],"dueDate":null,"reportTemplateIds":["bb18db9e-2730-403c-90c0-d306aac06284"],"softDeletedTime":null,"hardDeletedTime":null}] \ No newline at end of file diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index b0bc933fa..9a3007c32 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -27,7 +27,7 @@ 3.114.0 2.36.0 - 3.96.0 + 3.105.0 3.47.0