diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUpdateRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUpdateRequest.java new file mode 100644 index 000000000..d9efaaa72 --- /dev/null +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/ReportTemplateUpdateRequest.java @@ -0,0 +1,16 @@ +package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate; + +import lombok.*; + + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ReportTemplateUpdateRequest { + @NonNull + private String fileName; + + private boolean multiFileReport; + private boolean activeByDefault; +} diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java index 8b840581d..de357551a 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/ReportTemplateResource.java @@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.service.v1.api.resources; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateDownload; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -19,6 +20,7 @@ public interface ReportTemplateResource { String TEMPLATE_ID_PATH_VARIABLE = "/{" + TEMPLATE_ID + "}"; String DOWNLOAD_PATH = "download"; + String UPDATE_PATH = "update"; @PostMapping(value = REPORT_TEMPLATE_UPLOAD_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = @@ -37,5 +39,8 @@ public interface ReportTemplateResource { @DeleteMapping(value = REPORT_TEMPLATE_UPLOAD_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + TEMPLATE_ID_PATH_VARIABLE) void deleteTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId); + @PutMapping(value = REPORT_TEMPLATE_UPLOAD_PATH + UPDATE_PATH + DOSSIER_TEMPLATE_ID_PATH_VARIABLE + TEMPLATE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) + void updateTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, @PathVariable(TEMPLATE_ID) String templateId, + @RequestBody ReportTemplateUpdateRequest reportTemplateUpdateRequest); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java index 39e8f9933..9ada1d890 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/ReportTemplatePersistenceService.java @@ -4,6 +4,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier. import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -51,5 +52,14 @@ public class ReportTemplatePersistenceService { } + @Transactional + public void updateTemplate(String dossierTemplateId, String templateId, ReportTemplateUpdateRequest updateRequest) { + int countUpdate = reportTemplateRepository.updateReportTemplate(dossierTemplateId, templateId, updateRequest.getFileName(), + updateRequest.isMultiFileReport(), updateRequest.isActiveByDefault()); + if (countUpdate == 0) { + throw new NotFoundException("Report Template not found for dossier template Id: " + dossierTemplateId + " and templateId: " + templateId); + } + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java index 472c49015..9e0e1035d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/ReportTemplateRepository.java @@ -2,9 +2,16 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import java.util.List; public interface ReportTemplateRepository extends JpaRepository { List findAllByDossierTemplateId(String dossierTemplateId); + + @Modifying + @Query("update ReportTemplateEntity r set r.fileName = :fileName, r.multiFileReport = :multiFileReport, r.activeByDefault = :activeByDefault " + + "where r.templateId = :templateId and r.dossierTemplateId = :dossierTemplateId") + int updateReportTemplate(String dossierTemplateId, String templateId, String fileName, boolean multiFileReport, boolean activeByDefault); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 160fc341e..790df9999 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.util.List; import java.util.UUID; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.PathVariable; @@ -94,4 +95,11 @@ public class ReportTemplateController implements ReportTemplateResource { } + + public void updateTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId, + @PathVariable(TEMPLATE_ID) String templateId, + @RequestBody ReportTemplateUpdateRequest reportTemplateUpdateRequest) { + reportTemplatePersistenceService.updateTemplate(dossierTemplateId, templateId, reportTemplateUpdateRequest); + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 6f67c7608..b4e9c2913 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -3,6 +3,9 @@ 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.catchThrowable; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest; +import feign.FeignException; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -427,4 +430,48 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + /* + * Update report + */ + @Test + public void testReportTemplateUpdate() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); + + String filenameUpdate = "reportUpdated.xlsx"; + var updateRequest = new ReportTemplateUpdateRequest(filenameUpdate, true, true); + reportTemplateClient.updateTemplate(dossierTemplate.getId(), firstTemplate.getTemplateId(), updateRequest); + + var templateUpdated = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), firstTemplate.getTemplateId()); + assertThat(templateUpdated.getFileName()).isEqualTo(filenameUpdate); + assertThat(templateUpdated.isMultiFileReport()).isTrue(); + assertThat(templateUpdated.isActiveByDefault()).isTrue(); + + try { + reportTemplateClient.updateTemplate("123wrongDossier", firstTemplate.getTemplateId(), updateRequest); + } catch(FeignException e) { + assertThat(e.status()).isEqualTo(404); + } + } + }