From 2a4ac35d782d283bfbd51e4eda99566a715b0eba Mon Sep 17 00:00:00 2001 From: devplant Date: Thu, 27 Jan 2022 09:55:06 +0200 Subject: [PATCH 1/8] RED-3240 - Dossier Status - add new entity DossierStatusEntity, add crud operations - update DossierEntity to add dossierStatus --- .../dossier/CreateOrUpdateDossierRequest.java | 1 + .../CreateOrUpdateDossierStatusRequest.java | 21 ++++++ .../dossiertemplate/dossier/Dossier.java | 1 + .../dossier/DossierStatusInfo.java | 26 ++++++++ .../api/resources/DossierStatusResource.java | 46 +++++++++++++ .../entity/dossier/DossierEntity.java | 7 ++ .../entity/dossier/DossierStatusEntity.java | 41 ++++++++++++ .../entity/dossier/DossierTemplateEntity.java | 4 ++ .../DossierPersistenceService.java | 8 +++ .../DossierStatusPersistenceService.java | 63 ++++++++++++++++++ .../repository/DossierStatusRepository.java | 13 ++++ .../controller/DossierStatusController.java | 48 ++++++++++++++ .../5-dossier-status-table.changelog.yaml | 64 +++++++++++++++++++ .../db/changelog/db.changelog-master.yaml | 2 + .../client/DossierStatusClient.java | 8 +++ .../integration/tests/DossierStatusTest.java | 40 ++++++++++++ 16 files changed, 393 insertions(+) create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java create mode 100644 persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-dossier-status-table.changelog.yaml create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatusClient.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java 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 621292a7c..34c405e21 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 @@ -46,5 +46,6 @@ public class CreateOrUpdateDossierRequest { private String requestingUser; + private String dossierStatusId; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java new file mode 100644 index 000000000..9b5518410 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/CreateOrUpdateDossierStatusRequest.java @@ -0,0 +1,21 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CreateOrUpdateDossierStatusRequest { + + private String dossierStatusId; + + private String name; + + private String description; + + private String dossierTemplateId; +} 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 437900d0f..f0524deaf 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 @@ -36,5 +36,6 @@ public class Dossier { private OffsetDateTime dueDate; private OffsetDateTime archivedTime; private String dossierTemplateId; + private String dossierStatusId; } diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java new file mode 100644 index 000000000..14110b1c2 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java @@ -0,0 +1,26 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplate; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DossierStatusInfo { + + @JsonProperty("dossierStatusId") + private String id; + private String name; + private String description; + private String dossierTemplateId; +// private DossierTemplate dossierTemplate; +// private List dossierList = new ArrayList<>(); +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java new file mode 100644 index 000000000..02aa9e1a6 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java @@ -0,0 +1,46 @@ +package com.iqser.red.service.persistence.service.v1.api.resources; + +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +public interface DossierStatusResource { + + String DOSSIER_STATUS_PATH = "/dossier-status"; + + String DOSSIER_TEMPLATE_ID = "dossierTemplateId"; + String DOSSIER_TEMPLATE_ID_PATH_VARIABLE = "/{" + DOSSIER_TEMPLATE_ID + "}"; + + String DOSSIER_STATUS_ID = "dossierStatusId"; + String DOSSIER_STATUS_ID_PATH_VARIABLE = "/{" + DOSSIER_STATUS_ID + "}"; + + @ResponseBody + @ResponseStatus(HttpStatus.ACCEPTED) + @PostMapping(value = DOSSIER_STATUS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) + DossierStatusInfo createOrUpdateDossierStatus(@RequestBody CreateOrUpdateDossierStatusRequest dossierStatusRequest); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = DOSSIER_STATUS_PATH, produces = MediaType.APPLICATION_JSON_VALUE) + List getAllDossierStatus(); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + List getAllDossierStatusForTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId); + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId); + + @ResponseBody + @ResponseStatus(value = HttpStatus.NO_CONTENT) + @DeleteMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE) + void deleteDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId); + +} 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 2b7103299..6b5c50971 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 @@ -98,4 +98,11 @@ public class DossierEntity { @OneToMany(cascade = CascadeType.ALL, mappedBy = "dossier") private List dossierAttributes = new ArrayList<>(); + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + private DossierStatusEntity dossierStatus; + + @Column(updatable = false, insertable = false, name = "dossier_status_id") + private String dossierStatusId; + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java new file mode 100644 index 000000000..9193f23b7 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java @@ -0,0 +1,41 @@ +package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Data +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "dossier_status") +public class DossierStatusEntity { + + @Id + private String id; + + @Column + private String name; + + @Column + private String description; + // un dossierTemplate, ( dossierTemplate are o lista de DossierStatus -> one to many ) + @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + private DossierTemplateEntity dossierTemplate; + + @Column(updatable = false, insertable = false, name = "dossier_template_id") + private String dossierTemplateId; + +//// si o lista de dossiers care sunt in acest status ( 0..n) +// @JsonIgnore +// @OneToMany(mappedBy = "dossierStatus") +// private List dossiers = new ArrayList<>(); +} 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 a993094a4..c9398f5e6 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 @@ -87,4 +87,8 @@ public class DossierTemplateEntity { @Transient private DossierTemplateStatus dossierTemplateStatus; + @JsonIgnore + @OneToMany(mappedBy = "dossierTemplate") + private List dossierStatusList = new ArrayList<>(); + } 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 f0e8ccf3c..a1e8b52d5 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 @@ -34,6 +34,7 @@ public class DossierPersistenceService { private final FileRepository fileRepository; private final DossierTemplateRepository dossierTemplateRepository; private final ReportTemplateRepository reportTemplateRepository; + private final DossierStatusPersistenceService dossierStatusPersistenceService; public DossierEntity insert(CreateOrUpdateDossierRequest createOrUpdateDossierRequest) { @@ -45,6 +46,10 @@ public class DossierPersistenceService { dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); + if(createOrUpdateDossierRequest.getDossierStatusId() != null) { + //TODO: make other verifications that the dossierStatus matches the dossierTemplateId? + dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId())); + } var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); reportTemplates.forEach(r -> r.getDossiers().add(dossier)); dossier.setReportTemplates(reportTemplates); @@ -71,6 +76,9 @@ public class DossierPersistenceService { } }); dossier.setReportTemplates(reportTemplates); + if (createOrUpdateDossierRequest.getDossierStatusId() != null) { + dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId())); + } }); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java new file mode 100644 index 000000000..03141bd71 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java @@ -0,0 +1,63 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class DossierStatusPersistenceService { + + public static final String DOSSIER_STATUS_NOT_FOUND_MESSAGE = "Dossier Status with Id %s not found."; + + private final DossierStatusRepository dossierStatusRepository; + private final DossierTemplatePersistenceService dossierTemplatePersistenceService; + + @Transactional + public DossierStatusEntity createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest createOrUpdateDossierStatusRequest) { + if (createOrUpdateDossierStatusRequest.getDossierStatusId() != null) { //update + Optional dossierStatus = dossierStatusRepository.findById(createOrUpdateDossierStatusRequest.getDossierStatusId()); + if (dossierStatus.isPresent()) { + + BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus.get()); + return dossierStatus.get(); + } else { + throw new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, createOrUpdateDossierStatusRequest.getDossierStatusId())); + } + } else { + DossierStatusEntity dossierStatus = new DossierStatusEntity(); + dossierStatus.setId(UUID.randomUUID().toString()); + BeanUtils.copyProperties(createOrUpdateDossierStatusRequest, dossierStatus); + var dossierTemplate = dossierTemplatePersistenceService.getDossierTemplate(createOrUpdateDossierStatusRequest.getDossierTemplateId()); + var loadedDossierStatus = dossierStatusRepository.save(dossierStatus); + loadedDossierStatus.setDossierTemplate(dossierTemplate); + + return loadedDossierStatus; + } + } + + public List getAllDossierStatus() { + return dossierStatusRepository.findAll(); + } + + public List getAllDossierStatusForTemplate(String dossierTemplateId) { + return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId); + } + + public DossierStatusEntity getDossierStatus(String dossierStatusId) { + return dossierStatusRepository.findById(dossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))); + } + + public void deleteDossierStatus(String dossierStatusId) { + dossierStatusRepository.deleteById(dossierStatusId); + } +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java new file mode 100644 index 000000000..a992eced4 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java @@ -0,0 +1,13 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; + +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +public interface DossierStatusRepository extends JpaRepository { + + @Query("select s from DossierStatusEntity s where s.dossierTemplateId = :dossierTemplateId") + List getAllDossierStatusForDossierTemplate(String dossierTemplateId); +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java new file mode 100644 index 000000000..3dc5fea2d --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java @@ -0,0 +1,48 @@ +package com.iqser.red.service.peristence.v1.server.controller; + +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierStatusPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; +import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusResource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + + +@Slf4j +@RestController +@RequiredArgsConstructor +public class DossierStatusController implements DossierStatusResource { + + private final DossierStatusPersistenceService dossierStatusPersistenceService; + @Override + public DossierStatusInfo createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest dossierStatusRequest) { + return convert(dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest), DossierStatusInfo.class); + } + + @Override + public List getAllDossierStatus() { + + return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class); + } + + @Override + public List getAllDossierStatusForTemplate(String dossierTemplateId) { + return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class); + } + + @Override + public DossierStatusInfo getDossierStatus(String dossierStatusId) { + + return convert(dossierStatusPersistenceService.getDossierStatus(dossierStatusId), DossierStatusInfo.class); + } + + @Override + public void deleteDossierStatus(String dossierStatusId) { + dossierStatusPersistenceService.deleteDossierStatus(dossierStatusId); + } +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-dossier-status-table.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-dossier-status-table.changelog.yaml new file mode 100644 index 000000000..6b31a05be --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/5-dossier-status-table.changelog.yaml @@ -0,0 +1,64 @@ +databaseChangeLog: + - changeSet: + id: dossier-status-1 + author: generated + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + primaryKey: true + primaryKeyName: dossier_status_pkey + name: id + type: VARCHAR(255) + - column: + name: name + type: VARCHAR(255) + - column: + name: descriptiom + type: VARCHAR(255) + - column: + name: dossier_template_id + type: VARCHAR(255) + tableName: dossier_status + - changeSet: + id: dossier-status-2 + author: + changes: + - addColumn: + columns: + - column: + name: dossier_status_id + type: VARCHAR(255) + tableName: dossier + - changeSet: + id: dossier-status-3 + author: generated + changes: + - addForeignKeyConstraint: + baseColumnNames: dossier_template_id + baseTableName: dossier_status + constraintName: dossier_status_dossier_template_id + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: dossier_template + validate: true + - changeSet: + id: dossier-status-4 + author: generated + changes: + - addForeignKeyConstraint: + baseColumnNames: dossier_status_id + baseTableName: dossier + constraintName: dossier_dossier_status + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: dossier_status + validate: true \ No newline at end of file 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 c8f2287f7..8004c2773 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 @@ -7,3 +7,5 @@ databaseChangeLog: file: db/changelog/3-added-annotation-modification-date.changelog.yaml - include: file: db/changelog/4-archived-dossier.changelog.yaml + - include: + file: db/changelog/5-dossier-status-table.changelog.yaml diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatusClient.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatusClient.java new file mode 100644 index 000000000..f49fb0189 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/client/DossierStatusClient.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.peristence.v1.server.integration.client; + +import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusResource; +import org.springframework.cloud.openfeign.FeignClient; + +@FeignClient(name = "DossierStatusClient", url = "http://localhost:${server.port}") +public interface DossierStatusClient extends DossierStatusResource { +} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java new file mode 100644 index 000000000..43e593a42 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -0,0 +1,40 @@ +package com.iqser.red.service.peristence.v1.server.integration.tests; + +import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatusClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DossierStatusTest extends AbstractPersistenceServerServiceTest { + + @Autowired + private DossierStatusClient dossierStatusClient; + + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @Test + public void testDossierStatus() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var allDossierStatus = dossierStatusClient.getAllDossierStatus(); + + assertThat(allDossierStatus.size()).isZero(); + + CreateOrUpdateDossierStatusRequest cru = new CreateOrUpdateDossierStatusRequest(); + cru.setName("name1"); + cru.setDescription("description1"); + cru.setDossierTemplateId(dossierTemplate.getId()); + + var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(cru); + assertThat(loadedDossierStatus).isNotNull(); + + allDossierStatus = dossierStatusClient.getAllDossierStatus(); + assertThat(allDossierStatus.size()).isEqualTo(1); + } + +} From d1ff64310bb67a576c63bd1fb798d3f317d490a4 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:10:54 +0200 Subject: [PATCH 2/8] Fixed changelog and tests --- .../entity/dossier/DossierEntity.java | 1 - .../entity/dossier/DossierStatusEntity.java | 11 +-- .../src/test/resources/application.yml | 10 -- .../src/main/resources/application.yml | 5 - .../7-dossier-status-table.changelog.yaml | 96 +++++++++---------- .../AbstractPersistenceServerServiceTest.java | 3 + 6 files changed, 55 insertions(+), 71 deletions(-) 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 6b5c50971..b13273cab 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 @@ -98,7 +98,6 @@ public class DossierEntity { @OneToMany(cascade = CascadeType.ALL, mappedBy = "dossier") private List dossierAttributes = new ArrayList<>(); - @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) private DossierStatusEntity dossierStatus; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java index 9193f23b7..bf748095c 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/dossier/DossierStatusEntity.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.management.v1.processor.entity.dossier; -import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,16 +25,14 @@ public class DossierStatusEntity { @Column private String description; - // un dossierTemplate, ( dossierTemplate are o lista de DossierStatus -> one to many ) - @JsonIgnore + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "dossier_template_id") private DossierTemplateEntity dossierTemplate; @Column(updatable = false, insertable = false, name = "dossier_template_id") private String dossierTemplateId; -//// si o lista de dossiers care sunt in acest status ( 0..n) -// @JsonIgnore -// @OneToMany(mappedBy = "dossierStatus") -// private List dossiers = new ArrayList<>(); + @OneToMany(mappedBy = "dossierStatus") + private List dossiers = new ArrayList<>(); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml b/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml index be5849a82..e69de29bb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml +++ b/persistence-service-v1/persistence-service-processor-v1/src/test/resources/application.yml @@ -1,10 +0,0 @@ -cassandra: - keyspace-name: file_management_service - migrations-location: 'classpath:cassandra/migrations/*.cql' - - -spring: - test: - context: - cache: - maxSize: 60 \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml index 5570b2b13..e96efe5fd 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yml @@ -52,11 +52,6 @@ management: metrics.export.prometheus.enabled: ${monitoring.enabled:false} -cassandra: - keyspace-name: file_management_service - migrations-location: 'classpath:cassandra/migrations/*.cql' - - storage: signer-type: 'AWSS3V4SignerType' bucket-name: 'redaction' diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/7-dossier-status-table.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/7-dossier-status-table.changelog.yaml index 6b31a05be..6e9a8a535 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/7-dossier-status-table.changelog.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/7-dossier-status-table.changelog.yaml @@ -1,45 +1,45 @@ databaseChangeLog: - changeSet: - id: dossier-status-1 - author: generated - changes: - - createTable: - columns: - - column: - constraints: - nullable: false - primaryKey: true - primaryKeyName: dossier_status_pkey - name: id - type: VARCHAR(255) - - column: - name: name - type: VARCHAR(255) - - column: - name: descriptiom - type: VARCHAR(255) - - column: - name: dossier_template_id - type: VARCHAR(255) - tableName: dossier_status + id: 1643616110560-1 + author: corina (generated) + changes: + - createTable: + columns: + - column: + constraints: + nullable: false + primaryKey: true + primaryKeyName: dossier_status_pkey + name: id + type: VARCHAR(255) + - column: + name: description + type: VARCHAR(255) + - column: + name: dossier_template_id + type: VARCHAR(255) + - column: + name: name + type: VARCHAR(255) + tableName: dossier_status - changeSet: - id: dossier-status-2 - author: - changes: - - addColumn: - columns: - - column: - name: dossier_status_id - type: VARCHAR(255) - tableName: dossier + id: 1643616110560-4 + author: corina (generated) + changes: + - addColumn: + columns: + - column: + name: dossier_status_id + type: VARCHAR(255) + tableName: dossier - changeSet: - id: dossier-status-3 - author: generated + id: 1643616110560-2 + author: corina (generated) changes: - addForeignKeyConstraint: baseColumnNames: dossier_template_id baseTableName: dossier_status - constraintName: dossier_status_dossier_template_id + constraintName: fk6ao9oeuqkx147xofcjt17c1vx deferrable: false initiallyDeferred: false onDelete: NO ACTION @@ -48,17 +48,17 @@ databaseChangeLog: referencedTableName: dossier_template validate: true - changeSet: - id: dossier-status-4 - author: generated - changes: - - addForeignKeyConstraint: - baseColumnNames: dossier_status_id - baseTableName: dossier - constraintName: dossier_dossier_status - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: dossier_status - validate: true \ No newline at end of file + id: 1643616110560-3 + author: corina (generated) + changes: + - addForeignKeyConstraint: + baseColumnNames: dossier_status_id + baseTableName: dossier + constraintName: fknssxyrv28hjvshbrvb4wm9hbn + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: dossier_status + validate: true 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 4dd8cd27f..7a94ebabd 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 @@ -108,6 +108,8 @@ public abstract class AbstractPersistenceServerServiceTest { private DossierAttributeConfigRepository dossierAttributeConfigRepository; @Autowired private NotificationPreferencesRepository notificationPreferencesRepository; + @Autowired + private DossierStatusRepository dossierStatusRepository; @Before public void setupOptimize() { @@ -166,6 +168,7 @@ public abstract class AbstractPersistenceServerServiceTest { ruleSetRepository.deleteAll(); smtpRepository.deleteAll(); fileRepository.deleteAll(); + dossierStatusRepository.deleteAll(); dossierRepository.deleteAll(); dossierTemplateRepository.deleteAll(); notificationPreferencesRepository.deleteAll(); From db4a31180a891dc882b1520822718fe7f954df06 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:12:10 +0200 Subject: [PATCH 3/8] liquibase convenience for docker --- .dev/liquibase.properties | 5 +++++ .dev/liquibase.sh | 1 + 2 files changed, 6 insertions(+) create mode 100644 .dev/liquibase.properties create mode 100644 .dev/liquibase.sh diff --git a/.dev/liquibase.properties b/.dev/liquibase.properties new file mode 100644 index 000000000..7d2f68b4a --- /dev/null +++ b/.dev/liquibase.properties @@ -0,0 +1,5 @@ +url=jdbc:postgresql://localhost:5432/redaction +username=redaction +password=redaction +driver=org.postgresql.Driver +outputChangeLogFile=changelog.yaml \ No newline at end of file diff --git a/.dev/liquibase.sh b/.dev/liquibase.sh new file mode 100644 index 000000000..aaad233d6 --- /dev/null +++ b/.dev/liquibase.sh @@ -0,0 +1 @@ +liquibase generateChangeLog --changelog-file=changelog.yaml From 4162efe2904b2be9727b0e0a4ab6621e17e24396 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:20:33 +0200 Subject: [PATCH 4/8] added code to prevent status association with wrong template --- .../DossierPersistenceService.java | 22 +++++++++++++------ .../controller/DossierStatusController.java | 1 + 2 files changed, 16 insertions(+), 7 deletions(-) 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 a1e8b52d5..20458903a 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 @@ -46,13 +46,10 @@ public class DossierPersistenceService { dossier.setDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); - if(createOrUpdateDossierRequest.getDossierStatusId() != null) { - //TODO: make other verifications that the dossierStatus matches the dossierTemplateId? - dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId())); - } var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); reportTemplates.forEach(r -> r.getDossiers().add(dossier)); dossier.setReportTemplates(reportTemplates); + this.handleDossierStatus(createOrUpdateDossierRequest, dossier); return dossierRepository.save(dossier); @@ -76,13 +73,24 @@ public class DossierPersistenceService { } }); dossier.setReportTemplates(reportTemplates); - if (createOrUpdateDossierRequest.getDossierStatusId() != null) { - dossier.setDossierStatus(dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId())); - } + this.handleDossierStatus(createOrUpdateDossierRequest, dossier); }); } + private void handleDossierStatus(CreateOrUpdateDossierRequest createOrUpdateDossierRequest, DossierEntity dossier) { + if (createOrUpdateDossierRequest.getDossierStatusId() != null) { + var dossierStatus = dossierStatusPersistenceService.getDossierStatus(createOrUpdateDossierRequest.getDossierStatusId()); + if (dossierStatus.getDossierTemplateId().equals(createOrUpdateDossierRequest.getDossierTemplateId())) { + dossier.setDossierStatus(dossierStatus); + } else { + throw new BadRequestException("Invalid Dossier Status"); + } + } else { + dossier.setDossierStatus(null); + } + } + public DossierEntity getAndValidateDossier(String dossierId) { // check whether the dossierId exists and is not deleted diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java index 3dc5fea2d..69960e37f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java @@ -19,6 +19,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma public class DossierStatusController implements DossierStatusResource { private final DossierStatusPersistenceService dossierStatusPersistenceService; + @Override public DossierStatusInfo createOrUpdateDossierStatus(CreateOrUpdateDossierStatusRequest dossierStatusRequest) { return convert(dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest), DossierStatusInfo.class); From 71945fcdfaa5b011810f3c82de3cf68ff73a47de Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:23:33 +0200 Subject: [PATCH 5/8] dossier status cleanup --- .../api/model/dossiertemplate/dossier/DossierStatusInfo.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java index 14110b1c2..9843fb475 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/dossier/DossierStatusInfo.java @@ -21,6 +21,5 @@ public class DossierStatusInfo { private String name; private String description; private String dossierTemplateId; -// private DossierTemplate dossierTemplate; -// private List dossierList = new ArrayList<>(); + } From 1d7d0fe285893e10b0b26c2fae4a9c9bd7112284 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:31:53 +0200 Subject: [PATCH 6/8] added integration-test for dossier status --- .../service/DossierTesterAndProvider.java | 35 ++++-------- .../integration/tests/DossierStatusTest.java | 34 ++++++++++-- .../server/integration/tests/DossierTest.java | 54 ++++++++++--------- 3 files changed, 67 insertions(+), 56 deletions(-) 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 2844361fb..d0073d517 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 @@ -6,7 +6,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Do import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; -import org.assertj.core.api.AssertionsForClassTypes; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,36 +29,18 @@ public class DossierTesterAndProvider { return provideTestDossier(testTemplate, "Dossier1"); } - public Dossier provideTestDossier(String testTemplateId, String dossierName) { - CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); - cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); - cru.setDossierName(dossierName); - cru.setDescription(dossierName); - cru.setWatermarkEnabled(true); - cru.setMemberIds(Sets.newHashSet("1")); - cru.setOwnerId("1"); - cru.setApproverIds(Sets.newHashSet("1")); - cru.setRequestingUser("1"); - cru.setDueDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); - cru.setDossierTemplateId(testTemplateId); - cru.setReportTemplateIds(List.of("reportTemplate1", "reportTemplate2")); - - Dossier result = dossierClient.addDossier(cru); - - assertThat(result.getDossierName()).isEqualTo(dossierName); - - Dossier loadedDossier = dossierClient.getDossierById(result.getId(),false, false); - - assertThat(loadedDossier).isEqualTo(result); - - return loadedDossier; + public Dossier provideTestDossier(DossierTemplate testTemplate, String dossierName) { + return provideTestDossier(testTemplate, dossierName, null); } - public Dossier provideTestDossier(DossierTemplate testTemplate, String dossierName) { + public Dossier provideTestDossier(DossierTemplate testTemplate, String dossierName, DossierStatusInfo dossierStatus) { CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); cru.setDownloadFileTypes(Sets.newHashSet(DownloadFileType.ORIGINAL)); cru.setDossierName(dossierName); cru.setDescription(dossierName); + if (dossierStatus != null) { + cru.setDossierStatusId(dossierStatus.getId()); + } cru.setWatermarkEnabled(true); cru.setMemberIds(Sets.newHashSet("1")); cru.setOwnerId("1"); @@ -72,13 +54,14 @@ public class DossierTesterAndProvider { assertThat(result.getDossierName()).isEqualTo(dossierName); - Dossier loadedDossier = dossierClient.getDossierById(result.getId(),false, false); + Dossier loadedDossier = dossierClient.getDossierById(result.getId(), false, false); assertThat(loadedDossier).isEqualTo(result); return loadedDossier; } + public Dossier provideTestDossier() { var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java index 43e593a42..cae060d1e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -1,10 +1,14 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierStatusClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; import org.junit.Test; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; @@ -14,9 +18,15 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierStatusClient dossierStatusClient; + @Autowired + private DossierClient dossierClient; + @Autowired private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired + private DossierTesterAndProvider dossierTesterAndProvider; + @Test public void testDossierStatus() { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); @@ -25,16 +35,30 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { assertThat(allDossierStatus.size()).isZero(); - CreateOrUpdateDossierStatusRequest cru = new CreateOrUpdateDossierStatusRequest(); - cru.setName("name1"); - cru.setDescription("description1"); - cru.setDossierTemplateId(dossierTemplate.getId()); + CreateOrUpdateDossierStatusRequest crudsr = new CreateOrUpdateDossierStatusRequest(); + crudsr.setName("name1"); + crudsr.setDescription("description1"); + crudsr.setDossierTemplateId(dossierTemplate.getId()); - var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(cru); + var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); assertThat(loadedDossierStatus).isNotNull(); allDossierStatus = dossierStatusClient.getAllDossierStatus(); assertThat(allDossierStatus.size()).isEqualTo(1); + + var testDossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "1", allDossierStatus.iterator().next()); + + assertThat(testDossier.getDossierStatusId()).isEqualTo(allDossierStatus.iterator().next().getId()); + + // update + CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); + cru.setDossierTemplateId(testDossier.getId()); + cru.setDossierStatusId(null); + BeanUtils.copyProperties(testDossier, cru); + + var updated = dossierClient.updateDossier(cru, testDossier.getId()); + assertThat(updated.getDossierStatusId()).isNull(); + } } 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 cdf987a64..e017255b6 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 @@ -1,34 +1,36 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.google.common.collect.Sets; +import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; +import feign.FeignException; +import org.junit.Test; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import java.time.OffsetDateTime; import java.util.List; import java.util.Set; -import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; -import org.junit.Test; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; - -import com.google.common.collect.Sets; -import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; -import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; -import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; -import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; - -import feign.FeignException; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class DossierTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierTesterAndProvider dossierTesterAndProvider; + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + @Autowired private DossierClient dossierClient; @@ -62,7 +64,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); - var loadedTemplate = dossierClient.getDossierById(updated.getId(),false, false); + var loadedTemplate = dossierClient.getDossierById(updated.getId(), false, false); assertThat(loadedTemplate).isEqualTo(updated); @@ -99,9 +101,11 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { @Test public void testArchiveDossier() { + var template = dossierTemplateTesterAndProvider.provideTestTemplate(); + // Arrange - var dossier1 = dossierTesterAndProvider.provideTestDossier("dossier1"); - var dossier2 = dossierTesterAndProvider.provideTestDossier(dossier1.getDossierTemplateId(), "dossier2"); + var dossier1 = dossierTesterAndProvider.provideTestDossier(template, "dossier1"); + var dossier2 = dossierTesterAndProvider.provideTestDossier(template, "dossier2"); // Act & Assert 1 assertThat(dossierClient.getAllDossiers(false, false)).hasSize(2); @@ -224,7 +228,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); - var loadedTemplate = dossierClient.getDossierById(dossier.getId(),false, false); + var loadedTemplate = dossierClient.getDossierById(dossier.getId(), false, false); assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(1); @@ -248,7 +252,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId()); - loadedTemplate = dossierClient.getDossierById(dossier.getId(),false, false); + loadedTemplate = dossierClient.getDossierById(dossier.getId(), false, false); assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(2); @@ -268,7 +272,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId()); - loadedTemplate = dossierClient.getDossierById(dossier.getId(),false, false); + loadedTemplate = dossierClient.getDossierById(dossier.getId(), false, false); assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(2); @@ -288,7 +292,7 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); - loadedTemplate = dossierClient.getDossierById(dossier.getId(),false, false); + loadedTemplate = dossierClient.getDossierById(dossier.getId(), false, false); assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(1); From 03bcfb8cc3ca7291af62f52d7e875b5256b769e8 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:33:37 +0200 Subject: [PATCH 7/8] added integration-test for dossier status --- .../v1/server/integration/tests/DossierStatusTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java index cae060d1e..8d8093584 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -52,9 +52,9 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { // update CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); + BeanUtils.copyProperties(testDossier, cru); cru.setDossierTemplateId(testDossier.getId()); cru.setDossierStatusId(null); - BeanUtils.copyProperties(testDossier, cru); var updated = dossierClient.updateDossier(cru, testDossier.getId()); assertThat(updated.getDossierStatusId()).isNull(); From f1181177d4a269300706a5cf42bf149ac6f315e9 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 31 Jan 2022 10:54:23 +0200 Subject: [PATCH 8/8] fixed tests and cleanup on dossier status removal --- .../api/resources/DossierStatusResource.java | 5 ++++- .../DossierStatusPersistenceService.java | 21 ++++++++++++++++++- .../controller/DossierStatusController.java | 10 +++++---- .../service/DossierTesterAndProvider.java | 4 ++-- .../integration/tests/DossierStatusTest.java | 2 +- .../AbstractPersistenceServerServiceTest.java | 2 +- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java index 02aa9e1a6..31e1a9129 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierStatusResource.java @@ -18,6 +18,8 @@ public interface DossierStatusResource { String DOSSIER_STATUS_ID = "dossierStatusId"; String DOSSIER_STATUS_ID_PATH_VARIABLE = "/{" + DOSSIER_STATUS_ID + "}"; + String DOSSIER_STATUS_REPLACE_ID = "replaceDossierStatusId"; + @ResponseBody @ResponseStatus(HttpStatus.ACCEPTED) @PostMapping(value = DOSSIER_STATUS_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @@ -41,6 +43,7 @@ public interface DossierStatusResource { @ResponseBody @ResponseStatus(value = HttpStatus.NO_CONTENT) @DeleteMapping(value = DOSSIER_STATUS_PATH + DOSSIER_STATUS_ID_PATH_VARIABLE) - void deleteDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId); + void deleteDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId, + @RequestParam(value = DOSSIER_STATUS_REPLACE_ID, required = false) String replaceDossierStatusId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java index 03141bd71..1af464ca5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java @@ -1,6 +1,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; @@ -57,7 +58,25 @@ public class DossierStatusPersistenceService { return dossierStatusRepository.findById(dossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, dossierStatusId))); } - public void deleteDossierStatus(String dossierStatusId) { + @Transactional + public void deleteDossierStatus(String dossierStatusId, String replaceDossierStatusId) { + + + dossierStatusRepository.findById(dossierStatusId).ifPresent(toDeleteDossierStatus -> { + + DossierStatusEntity replaceDossierStatusEntity = null; + if (replaceDossierStatusId != null) { + replaceDossierStatusEntity = dossierStatusRepository.findById(replaceDossierStatusId).orElseThrow(() -> new NotFoundException("Dossier Status not found: " + replaceDossierStatusId)); + } + + if (replaceDossierStatusEntity != null && !replaceDossierStatusEntity.getDossierTemplateId().equals(toDeleteDossierStatus.getDossierTemplateId())) { + throw new BadRequestException("Cannot replace with dossier status from different template"); + } + + for (var dossier : toDeleteDossierStatus.getDossiers()) { + dossier.setDossierStatus(replaceDossierStatusEntity); + } + }); dossierStatusRepository.deleteById(dossierStatusId); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java index 69960e37f..eee80dcc9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierStatusController.java @@ -6,6 +6,8 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do import com.iqser.red.service.persistence.service.v1.api.resources.DossierStatusResource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -32,18 +34,18 @@ public class DossierStatusController implements DossierStatusResource { } @Override - public List getAllDossierStatusForTemplate(String dossierTemplateId) { + public List getAllDossierStatusForTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId) { return convert(dossierStatusPersistenceService.getAllDossierStatus(), DossierStatusInfo.class); } @Override - public DossierStatusInfo getDossierStatus(String dossierStatusId) { + public DossierStatusInfo getDossierStatus(@PathVariable(DOSSIER_STATUS_ID) String dossierStatusId) { return convert(dossierStatusPersistenceService.getDossierStatus(dossierStatusId), DossierStatusInfo.class); } @Override - public void deleteDossierStatus(String dossierStatusId) { - dossierStatusPersistenceService.deleteDossierStatus(dossierStatusId); + public void deleteDossierStatus(String dossierStatusId, @RequestParam(value = DOSSIER_STATUS_REPLACE_ID, required = false) String replaceDossierStatusId) { + dossierStatusPersistenceService.deleteDossierStatus(dossierStatusId,replaceDossierStatusId); } } 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 d0073d517..a24ff0a96 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 @@ -69,11 +69,11 @@ public class DossierTesterAndProvider { return provideTestDossier(testTemplate, "Dossier1"); } - public Dossier provideTestDossier(String filename) { + public Dossier provideTestDossier(String dossierName) { var testTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); - return provideTestDossier(testTemplate, filename); + return provideTestDossier(testTemplate, dossierName); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java index 8d8093584..a24fa2d44 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -53,7 +53,7 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { // update CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); BeanUtils.copyProperties(testDossier, cru); - cru.setDossierTemplateId(testDossier.getId()); + cru.setDossierTemplateId(testDossier.getDossierTemplateId()); cru.setDossierStatusId(null); var updated = dossierClient.updateDossier(cru, testDossier.getId()); 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 7a94ebabd..eb816e23a 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 @@ -168,8 +168,8 @@ public abstract class AbstractPersistenceServerServiceTest { ruleSetRepository.deleteAll(); smtpRepository.deleteAll(); fileRepository.deleteAll(); - dossierStatusRepository.deleteAll(); dossierRepository.deleteAll(); + dossierStatusRepository.deleteAll(); dossierTemplateRepository.deleteAll(); notificationPreferencesRepository.deleteAll(); }