From 62a0a74abeb17aa15b58fa2befd858dcb46ac3eb Mon Sep 17 00:00:00 2001 From: aoezyetimoglu Date: Fri, 4 Mar 2022 15:03:45 +0100 Subject: [PATCH] RED-3246: As an admin I want to clone a dossier template --- .../resources/DossierTemplateResource.java | 7 +++ .../DossierTemplatePersistenceService.java | 47 +++++++++++++++---- .../controller/DossierTemplateController.java | 5 ++ .../tests/DossierTemplateTest.java | 21 +++++++++ 4 files changed, 70 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/DossierTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java index 1377947bd..b17bfb955 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/DossierTemplateResource.java @@ -17,6 +17,8 @@ public interface DossierTemplateResource { String USER_ID_PARAM = "userId"; + String NAME_OF_CLONED_TOSSIER_TEMPLATE = "nameOfClonedDossierTemplate"; + @ResponseBody @ResponseStatus(HttpStatus.ACCEPTED) @PostMapping(value = DOSSIER_TEMPLATE_PATH, consumes = MediaType.APPLICATION_JSON_VALUE) @@ -37,4 +39,9 @@ public interface DossierTemplateResource { @DeleteMapping(value = DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE) void deleteDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(USER_ID_PARAM) String deletingUserId); + @ResponseBody + @ResponseStatus(HttpStatus.OK) + @PostMapping(value = DOSSIER_TEMPLATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + "/clone", produces = MediaType.APPLICATION_JSON_VALUE) + DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(value = NAME_OF_CLONED_TOSSIER_TEMPLATE) String nameOfClonedDossierTemplate, @RequestParam(USER_ID_PARAM) String cloningUserId); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java index 05c43b7b1..33d83c0bc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierTemplatePersistenceService.java @@ -1,5 +1,16 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import javax.transaction.Transactional; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; @@ -7,17 +18,8 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CreateOrUpdateDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DossierTemplateStatus; + import lombok.RequiredArgsConstructor; -import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Service; - -import javax.transaction.Transactional; -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.Optional; -import java.util.UUID; - @Service @RequiredArgsConstructor @@ -130,4 +132,29 @@ public class DossierTemplatePersistenceService { } + public DossierTemplateEntity cloneDossierTemplate(String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { + + validateDossierTemplateNameIsUnique(nameOfClonedDossierTemplate); + + DossierTemplateEntity clonedDossierTemplate = new DossierTemplateEntity(); + + dossierTemplateRepository.findById(dossierTemplateId).ifPresentOrElse((dossierTemplate) -> { + BeanUtils.copyProperties(dossierTemplate, clonedDossierTemplate); + OffsetDateTime now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); + clonedDossierTemplate.setId(UUID.randomUUID().toString()); + clonedDossierTemplate.setName(nameOfClonedDossierTemplate); + clonedDossierTemplate.setCreatedBy(cloningUserId); + clonedDossierTemplate.setModifiedBy(cloningUserId); + clonedDossierTemplate.setDateAdded(now); + clonedDossierTemplate.setDateModified(now); + clonedDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(computeDossierTemplateStatus(clonedDossierTemplate).name())); + + dossierTemplateRepository.save(clonedDossierTemplate); + + }, () -> { + throw new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)); + }); + return clonedDossierTemplate; + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java index 01c8e6aba..64bdfb8da 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java @@ -42,4 +42,9 @@ public class DossierTemplateController implements DossierTemplateResource { public void deleteDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @RequestParam(USER_ID_PARAM) String deletingUserId) { dossierTemplatePersistenceService.deleteDossierTemplate(dossierTemplateId, deletingUserId); } + + @Override + public DossierTemplate cloneDossierTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, String nameOfClonedDossierTemplate, String cloningUserId) { + return convert(dossierTemplatePersistenceService.cloneDossierTemplate(dossierTemplateId, nameOfClonedDossierTemplate, cloningUserId), DossierTemplate.class); + } } 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 47d3e8f25..0705a649b 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 @@ -88,5 +88,26 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testCloneDossierTemplate() { + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + var allTemplates = dossierTemplateClient.getAllDossierTemplates(); + assertThat(allTemplates.size()).isEqualTo(1); + assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); + + var clonedDT = dossierTemplateClient.cloneDossierTemplate(dossierTemplate.getId(), "Clone of " + dossierTemplate.getName(), "user"); + assertThat(clonedDT.getName()).isEqualTo("Clone of " + dossierTemplate.getName()); + + var loadedTemplate = dossierTemplateClient.getDossierTemplate(clonedDT.getId()); + assertThat(loadedTemplate).isEqualTo(clonedDT); + assertThat(loadedTemplate.getId()).isEqualTo(clonedDT.getId()); + assertThat(loadedTemplate.getDescription()).isEqualTo(dossierTemplate.getDescription()); + assertThat(loadedTemplate.getValidFrom()).isEqualTo(dossierTemplate.getValidFrom()); + assertThat(loadedTemplate.getValidTo()).isEqualTo(dossierTemplate.getValidTo()); + assertThat(loadedTemplate.getDownloadFileTypes()).isEqualTo(dossierTemplate.getDownloadFileTypes()); + assertThat(loadedTemplate.getModifiedBy()).isEqualTo("user"); + assertThat(loadedTemplate.getCreatedBy()).isEqualTo("user"); + } }