Pull request #475: RED-4527: Store information of generated reports in storage
Merge in RED/persistence-service from RED-4527 to master * commit 'a775d52cad4890b3d1be3ff942617a8dc8d6bf42': RED-4527: Store information of generated reports in storage
This commit is contained in:
commit
ea6d359d13
@ -23,10 +23,8 @@ import org.hibernate.annotations.FetchMode;
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONDownloadFileTypeConverter;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONStoredFileInformationConverter;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue;
|
import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadStatusValue;
|
||||||
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
|
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@ -74,8 +72,4 @@ public class DownloadStatusEntity {
|
|||||||
@Convert(converter = JSONDownloadFileTypeConverter.class)
|
@Convert(converter = JSONDownloadFileTypeConverter.class)
|
||||||
Set<DownloadFileType> downloadFileTypes = new HashSet<>();
|
Set<DownloadFileType> downloadFileTypes = new HashSet<>();
|
||||||
|
|
||||||
@Builder.Default
|
|
||||||
@Column(columnDefinition = "text", name = "generated_reports_information")
|
|
||||||
@Convert(converter = JSONStoredFileInformationConverter.class)
|
|
||||||
Set<StoredFileInformation> generatedReportsInformation = new HashSet<>();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package com.iqser.red.service.peristence.v1.server.service.download;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -15,6 +14,7 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionMessage;
|
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionMessage;
|
||||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail;
|
import com.iqser.red.service.pdftron.redaction.v1.api.model.RedactionResultDetail;
|
||||||
@ -41,6 +41,7 @@ import com.iqser.red.storage.commons.service.StorageService;
|
|||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -66,8 +67,6 @@ public class DownloadPreparationService {
|
|||||||
public void createDownload(ReportResultMessage reportResultMessage) throws JsonProcessingException {
|
public void createDownload(ReportResultMessage reportResultMessage) throws JsonProcessingException {
|
||||||
|
|
||||||
DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
||||||
downloadStatus.setGeneratedReportsInformation(new HashSet<>(reportResultMessage.getStoredFileInformation()));
|
|
||||||
downloadStatusPersistenceService.updateStatusEntity(downloadStatus);
|
|
||||||
|
|
||||||
DossierEntity dossier = downloadStatus.getDossier();
|
DossierEntity dossier = downloadStatus.getDossier();
|
||||||
|
|
||||||
@ -112,10 +111,12 @@ public class DownloadPreparationService {
|
|||||||
|
|
||||||
DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(reportResultMessage.getDownloadId());
|
||||||
|
|
||||||
|
var storedFileInformations = getStoredFileInformation(reportResultMessage.getDownloadId());
|
||||||
|
|
||||||
try (FileSystemBackedArchiver fileSystemBackedArchiver = new FileSystemBackedArchiver()) {
|
try (FileSystemBackedArchiver fileSystemBackedArchiver = new FileSystemBackedArchiver()) {
|
||||||
|
|
||||||
generateAndAddFiles(downloadStatus, reportResultMessage, fileSystemBackedArchiver);
|
generateAndAddFiles(downloadStatus, reportResultMessage, fileSystemBackedArchiver);
|
||||||
addReports(downloadStatus, fileSystemBackedArchiver);
|
addReports(reportResultMessage.getDownloadId(), storedFileInformations, fileSystemBackedArchiver);
|
||||||
storeZipFile(downloadStatus, fileSystemBackedArchiver);
|
storeZipFile(downloadStatus, fileSystemBackedArchiver);
|
||||||
|
|
||||||
downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatusValue.READY, fileSystemBackedArchiver.getContentLength());
|
downloadStatusPersistenceService.updateStatus(downloadStatus.getStorageId(), DownloadStatusValue.READY, fileSystemBackedArchiver.getContentLength());
|
||||||
@ -130,7 +131,7 @@ public class DownloadPreparationService {
|
|||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadReportCleanupService.deleteTmpReportFiles(downloadStatus.getGeneratedReportsInformation()
|
downloadReportCleanupService.deleteTmpReportFiles(storedFileInformations
|
||||||
.stream()
|
.stream()
|
||||||
.map(StoredFileInformation::getStorageId)
|
.map(StoredFileInformation::getStorageId)
|
||||||
.collect(Collectors.toSet()));
|
.collect(Collectors.toSet()));
|
||||||
@ -210,11 +211,11 @@ public class DownloadPreparationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void addReports(DownloadStatusEntity downloadStatus, FileSystemBackedArchiver fileSystemBackedArchiver) {
|
private void addReports(String downloadId, List<StoredFileInformation> storedFileInformations, FileSystemBackedArchiver fileSystemBackedArchiver) {
|
||||||
|
|
||||||
long addReportsStart = System.currentTimeMillis();
|
long addReportsStart = System.currentTimeMillis();
|
||||||
|
|
||||||
for (StoredFileInformation storedFileInformation : downloadStatus.getGeneratedReportsInformation()) {
|
for (StoredFileInformation storedFileInformation : storedFileInformations) {
|
||||||
|
|
||||||
FileEntity fileStatus = null;
|
FileEntity fileStatus = null;
|
||||||
|
|
||||||
@ -227,10 +228,17 @@ public class DownloadPreparationService {
|
|||||||
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), addSuffix(createFileName(fileStatus, reportTemplate), "justification"), report));
|
fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel(removeExtension(reportTemplate.getFileName()) + (reportTemplate.isMultiFileReport() ? " (multifile)" : ""), addSuffix(createFileName(fileStatus, reportTemplate), "justification"), report));
|
||||||
|
|
||||||
}
|
}
|
||||||
log.info("Successfully added {} reports for downloadId {}, took {}", downloadStatus.getGeneratedReportsInformation()
|
log.info("Successfully added {} reports for downloadId {}, took {}", storedFileInformations.size(), downloadId, System.currentTimeMillis() - addReportsStart);
|
||||||
.size(), downloadStatus.getStorageId(), System.currentTimeMillis() - addReportsStart);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
private List<StoredFileInformation> getStoredFileInformation(String downloadId){
|
||||||
|
|
||||||
|
var storageId = downloadId.substring(0, downloadId.length() - 3) + "/REPORT_INFO.json";
|
||||||
|
|
||||||
|
return objectMapper.readValue(fileManagementStorageService.getStoredObjectBytes(storageId), new TypeReference<>() {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private String createFileName(FileEntity fileStatus, ReportTemplateEntity reportTemplate) {
|
private String createFileName(FileEntity fileStatus, ReportTemplateEntity reportTemplate) {
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
databaseChangeLog:
|
||||||
|
- changeSet:
|
||||||
|
id: remove-reports-information-column
|
||||||
|
author: dom
|
||||||
|
changes:
|
||||||
|
- removeColumn:
|
||||||
|
columns:
|
||||||
|
- column:
|
||||||
|
name: generated_reports_information
|
||||||
|
tableName: download_status
|
||||||
@ -85,3 +85,7 @@ databaseChangeLog:
|
|||||||
file: db/changelog/34-add-reports-information-column.changelog.yaml
|
file: db/changelog/34-add-reports-information-column.changelog.yaml
|
||||||
- include:
|
- include:
|
||||||
file: db/changelog/sql/35-update-skipped-color-existing-types.sql
|
file: db/changelog/sql/35-update-skipped-color-existing-types.sql
|
||||||
|
- include:
|
||||||
|
file: db/changelog/36-revert-reports-information-column.changelog.yaml
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,15 @@
|
|||||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient;
|
||||||
@ -10,7 +20,6 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
|
|||||||
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||||
import com.iqser.red.service.peristence.v1.server.service.download.DownloadReportMessageReceiver;
|
import com.iqser.red.service.peristence.v1.server.service.download.DownloadReportMessageReceiver;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest;
|
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.CreateOrUpdateDossierRequest;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||||
@ -19,21 +28,7 @@ import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage;
|
|||||||
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
|
import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation;
|
||||||
import com.iqser.red.storage.commons.service.StorageService;
|
import com.iqser.red.storage.commons.service.StorageService;
|
||||||
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.junit.Test;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
public class DownloadPreparationTest extends AbstractPersistenceServerServiceTest {
|
public class DownloadPreparationTest extends AbstractPersistenceServerServiceTest {
|
||||||
|
|
||||||
@ -132,7 +127,6 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes
|
|||||||
ReportResultMessage reportResultMessage = new ReportResultMessage();
|
ReportResultMessage reportResultMessage = new ReportResultMessage();
|
||||||
reportResultMessage.setUserId("1");
|
reportResultMessage.setUserId("1");
|
||||||
reportResultMessage.setDownloadId(statuses.iterator().next().getStorageId());
|
reportResultMessage.setDownloadId(statuses.iterator().next().getStorageId());
|
||||||
reportResultMessage.setStoredFileInformation(sivList);
|
|
||||||
|
|
||||||
downloadReportMessageReceiver.receive(objectMapper.writeValueAsString(reportResultMessage));
|
downloadReportMessageReceiver.receive(objectMapper.writeValueAsString(reportResultMessage));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
<redaction-service.version>3.114.0</redaction-service.version>
|
<redaction-service.version>3.114.0</redaction-service.version>
|
||||||
<search-service.version>2.36.0</search-service.version>
|
<search-service.version>2.36.0</search-service.version>
|
||||||
<pdftron-redaction-service.version>3.112.0</pdftron-redaction-service.version>
|
<pdftron-redaction-service.version>3.112.0</pdftron-redaction-service.version>
|
||||||
<redaction-report-service.version>3.47.0</redaction-report-service.version>
|
<redaction-report-service.version>3.52.0</redaction-report-service.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user