Pull request #547: RED-5097 - ocr status updates

Merge in RED/persistence-service from RED-5097 to master

* commit '7d42753bf291819e4ece872274d3222c1fae646e':
  RED-5097 - ocr status updates
This commit is contained in:
Timo Bejan 2022-10-07 15:19:30 +02:00
commit 4cc2e40250
15 changed files with 190 additions and 98 deletions

View File

@ -51,7 +51,10 @@ public class FileModel {
private OffsetDateTime approvalDate;
private OffsetDateTime lastUploaded;
private long analysisDuration;
private OffsetDateTime lastOCRTime;
private OffsetDateTime ocrStartTime;
private Integer numberOfPagesToOCR;
private Integer numberOfOCRedPages;
private OffsetDateTime ocrEndTime;
private boolean hasAnnotationComments;
private boolean excluded;
private boolean excludedFromAutomaticAnalysis;

View File

@ -1,35 +1,22 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.dossier;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.iqser.red.service.persistence.management.v1.processor.utils.JSONIntegerSetConverter;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@ -124,8 +111,17 @@ public class FileEntity {
@Column
private long analysisDuration;
@Column
private OffsetDateTime lastOCRTime;
@Column(name = "ocr_start_time")
private OffsetDateTime ocrStartTime;
@Column(name = "number_of_pages_to_ocr")
private Integer numberOfPagesToOCR;
@Column(name = "number_of_ocred_pages")
private Integer numberOfOCRedPages;
@Column(name = "ocr_end_time")
private OffsetDateTime ocrEndTime;
@Column
private boolean hasAnnotationComments;
@ -172,6 +168,10 @@ public class FileEntity {
@Column
private Integer processingErrorCounter;
public OffsetDateTime getLastOCRTime() {
return this.ocrStartTime;
}
public boolean isSoftDeleted() {
return deleted != null;
}

View File

@ -0,0 +1,20 @@
package com.iqser.red.service.persistence.management.v1.processor.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OCRStatusUpdateResponse {
private String fileId;
private int numberOfPagesToOCR;
private int numberOfOCRedPages;
private boolean ocrFinished;
}

View File

@ -1,5 +1,21 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
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.model.OCRStatusUpdateResponse;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
@ -8,24 +24,6 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
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.FileAttributesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
@ -132,12 +130,12 @@ public class FileStatusPersistenceService {
@Transactional
public void updateLastOCRTime(String fileId, OffsetDateTime time) {
public void updateOCRStartTime(String fileId, OffsetDateTime time) {
if (isFileDeleted(fileId)) {
return;
}
fileRepository.updateLastOCRTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), time);
fileRepository.updateOCRStartTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), time);
fileRepository.updateFileModificationDate(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
}
@ -445,4 +443,7 @@ public class FileStatusPersistenceService {
}).collect(Collectors.toList());
}
public void updateOCRStatus(OCRStatusUpdateResponse response) {
fileRepository.updateOCRStatus(response.getFileId(), response.getNumberOfPagesToOCR(), response.getNumberOfOCRedPages(), response.isOcrFinished() ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null);
}
}

View File

@ -1,19 +1,19 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FilePageCountsProjection;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileProcessingStatusProjection;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.projection.FileWorkflowStatusProjection;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Set;
public interface FileRepository extends JpaRepository<FileEntity, String> {
@ -89,8 +89,8 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Modifying
@Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.lastOCRTime = :lastOCRTime where f.id = :fileId")
void updateLastOCRTime(String fileId, OffsetDateTime lastUpdated, OffsetDateTime lastOCRTime);
@Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.ocrStartTime = :ocrStartTime where f.id = :fileId")
void updateOCRStartTime(String fileId, OffsetDateTime lastUpdated, OffsetDateTime ocrStartTime);
@Modifying
@ -144,7 +144,7 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Modifying(clearAutomatically = true)
@Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " +
"f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, " +
"f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " +
"f.ocrEndTime = null, f.ocrStartTime = null, f.numberOfPagesToOCR = null, f.numberOfOCRedPages = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " +
"f.assignee = null, f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null, " +
"f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " +
"f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " +
@ -235,6 +235,11 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
"d.softDeletedTime is null and d.hardDeletedTime is null and d.archivedTime is null")
int countActiveFiles(String dossierTemplateId);
@Transactional
@Modifying(clearAutomatically = true)
@Query(value = "update FileEntity f set f.numberOfOCRedPages = :numberOfOCRedPages, f.numberOfPagesToOCR = :numberOfPagesToOCR, f.ocrEndTime = :ocrEndTime where f.id = :fileId")
void updateOCRStatus(String fileId, int numberOfPagesToOCR, int numberOfOCRedPages, OffsetDateTime ocrEndTime);
}

View File

@ -55,6 +55,9 @@ public class MessagingConfiguration {
public static final String CV_ANALYSIS_RESPONSE_QUEUE = "cv_analysis_response_queue";
public static final String CV_ANALYSIS_DLQ = "cv_analysis_dead_letter_queue";
public static final String OCR_STATUS_UPDATE_RESPONSE_QUEUE = "ocr_status_update_response_queue";
public static final String OCR_STATUS_UPDATE_RESPONSE_DQL = "ocr_status_update_response_dql";
@Bean
public Queue nerRequestQueue() {
@ -119,6 +122,21 @@ public class MessagingConfiguration {
}
@Bean
public Queue ocrStatusUpdateResponseQueue() {
return QueueBuilder.durable(OCR_STATUS_UPDATE_RESPONSE_QUEUE).withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", OCR_STATUS_UPDATE_RESPONSE_DQL).build();
}
@Bean
public Queue ocrStatusUpdateResponseDQL() {
return QueueBuilder.durable(OCR_STATUS_UPDATE_RESPONSE_DQL).build();
}
@Bean
public Queue redactionQueue() {

View File

@ -69,7 +69,7 @@ public class ReanalysisController implements ReanalysisResource {
var relevantFiles = getAllFilesForDossier(dossierId, true);
relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
relevantFiles.stream().filter(fileStatus -> fileStatus.getOcrStartTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
}
@ -77,7 +77,7 @@ public class ReanalysisController implements ReanalysisResource {
var relevantFiles = getRelevantFiles(dossierId, fileIds);
relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
relevantFiles.stream().filter(fileStatus -> fileStatus.getOcrStartTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId()));
}
@ -93,7 +93,7 @@ public class ReanalysisController implements ReanalysisResource {
if (dossierFile.isSoftOrHardDeleted() || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) {
throw new ConflictException("Cannot analyse a deleted/approved file");
}
if (dossierFile.getLastOCRTime() != null) {
if (dossierFile.getOcrStartTime() != null) {
throw new ConflictException("File already has been OCR processed");
}
ocrFiles(dossierId, Sets.newHashSet(fileId));

View File

@ -61,7 +61,7 @@ public class AdminInterfaceController {
@PostMapping("/ocr")
public void forceOCR(@RequestParam("dossierId") String dossierId, @RequestParam("fileId") String fileId) {
fileStatusService.updateLastOCRTime(fileId);
fileStatusService.updateOCRStartTime(fileId);
fileStatusService.setStatusOcrQueued(dossierId, fileId);
}
@ -82,16 +82,16 @@ public class AdminInterfaceController {
.filter(f -> !f.isExcluded())
.filter(f -> !f.isExcludedFromAutomaticAnalysis())
.filter(f -> !f.isSoftOrHardDeleted())
.filter(f -> f.getLastOCRTime() != null)
.filter(f -> f.getOcrStartTime() != null)
.filter(f -> f.getWorkflowStatus() != WorkflowStatus.APPROVED).collect(Collectors.toList());
for (var file : filesThatRequireOCR) {
log.info("Will OCR file: {} from dossier {} with status {} and processing status {} with last OCR time {}",
file.getId(), file.getDossierId(), file.getWorkflowStatus(), file.getProcessingStatus(), file.getLastOCRTime());
file.getId(), file.getDossierId(), file.getWorkflowStatus(), file.getProcessingStatus(), file.getOcrStartTime());
if (!dryRun) {
fileStatusService.updateLastOCRTime(file.getId());
fileStatusService.updateOCRStartTime(file.getId());
fileStatusService.setStatusOcrQueued(file.getDossierId(), file.getId());
}
@ -123,7 +123,7 @@ public class AdminInterfaceController {
for (var file : filesThatRequireTextReset) {
log.info("Will OCR file: {} from dossier {} with status {} and processing status {} with last OCR time {}",
file.getId(), file.getDossierId(), file.getWorkflowStatus(), file.getProcessingStatus(), file.getLastOCRTime());
file.getId(), file.getDossierId(), file.getWorkflowStatus(), file.getProcessingStatus(), file.getOcrStartTime());
if (!dryRun) {

View File

@ -1,5 +1,6 @@
package com.iqser.red.service.peristence.v1.server.service;
import com.iqser.red.service.persistence.management.v1.processor.model.OCRStatusUpdateResponse;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.web.bind.annotation.RestController;
@ -128,7 +129,7 @@ public class FileStatusProcessingUpdateService {
retryTemplate.execute(retryContext -> {
log.info("OCR Successful for dossier {} and file {}, Attempt to update status: {}", dossierId, fileId, retryContext.getRetryCount());
fileStatusService.updateLastOCRTime(fileId);
fileStatusService.updateOCRStatus(OCRStatusUpdateResponse.builder().fileId(fileId).ocrFinished(true).build());
fileStatusService.setStatusFullReprocess(dossierId, fileId, false, true);
return null;

View File

@ -1,19 +1,5 @@
package com.iqser.red.service.peristence.v1.server.service;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Sets;
@ -28,17 +14,12 @@ import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.InternalServerErrorException;
import com.iqser.red.service.persistence.management.v1.processor.model.OCRStatusUpdateResponse;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.AddRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.CommentPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ForceRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ImageRecategorizationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.LegalBasisChangePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RemoveRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
@ -46,10 +27,21 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
import com.iqser.red.service.redaction.v1.model.AnalyzeRequest;
import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
import com.iqser.red.service.redaction.v1.model.MessageType;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
@Slf4j
@Service
@ -454,10 +446,9 @@ public class FileStatusService {
}
public void updateOCRStartTime(String fileId) {
public void updateLastOCRTime(String fileId) {
fileStatusPersistenceService.updateLastOCRTime(fileId, OffsetDateTime.now());
fileStatusPersistenceService.updateOCRStartTime(fileId, OffsetDateTime.now());
}
@ -713,4 +704,7 @@ public class FileStatusService {
return fileAttributeList;
}
public void updateOCRStatus(OCRStatusUpdateResponse response) {
fileStatusPersistenceService.updateOCRStatus(response);
}
}

View File

@ -102,10 +102,10 @@ public class LicenseReportService {
reportData.setDeletedDate(fileStatus.getDeleted() == null ? null : fileStatus.getDeleted().toInstant());
reportData.setWorkflowStatus(fileStatus.getWorkflowStatus());
reportData.setNumberOfAnalyzedPages(fileStatus.getNumberOfPages());
reportData.setNumberOfOcrPages(fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0);
reportData.setNumberOfOcrPages(fileStatus.getOcrStartTime() != null ? fileStatus.getNumberOfPages() : 0);
reportData.setAnalysisCount(fileStatus.getNumberOfAnalyses());
result.totalPagesAnalyzed += fileStatus.getNumberOfPages();
result.totalOcrPages += fileStatus.getLastOCRTime() != null ? fileStatus.getNumberOfPages() : 0;
result.totalOcrPages += fileStatus.getOcrStartTime() != null ? fileStatus.getNumberOfPages() : 0;
result.totalNumberOfAnalyses += fileStatus.getNumberOfAnalyses();
result.data.add(reportData);
});

View File

@ -0,0 +1,43 @@
package com.iqser.red.service.peristence.v1.server.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.service.peristence.v1.server.configuration.MessagingConfiguration;
import com.iqser.red.service.persistence.management.v1.processor.model.OCRStatusUpdateResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class OCRProcessingMessageReceiver {
private final ObjectMapper objectMapper;
private final FileStatusService fileStatusService;
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE)
public void receive(String in) {
var response = objectMapper.readValue(in, OCRStatusUpdateResponse.class);
fileStatusService.updateOCRStatus(response);
log.info("Received message {} in {}", response, MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE);
}
@SneakyThrows
@RabbitListener(queues = MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_DQL)
public void handleDLQMessage(Message failedMessage) {
var response = objectMapper.readValue(failedMessage.getBody(), OCRStatusUpdateResponse.class);
log.info("Received message {} in {}", response, MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_DQL);
}
}

View File

@ -100,4 +100,6 @@ databaseChangeLog:
- include:
file: db/changelog/tenant/release-3.3.14/1-bump-rules-version.sql
- include:
file: db/changelog/tenant/40-remove-quartz.changelog.yaml
file: db/changelog/tenant/40-remove-quartz.changelog.yaml
- include:
file: db/changelog/tenant/sql/41-update-ocr-file-columns.sql

View File

@ -0,0 +1,5 @@
ALTER TABLE file RENAME COLUMN lastocrtime TO ocr_start_time;
ALTER TABLE file ADD COLUMN ocr_end_time TIMESTAMP WITHOUT TIME ZONE;
update file set ocr_end_time = ocr_start_time;
ALTER TABLE FILE ADD COLUMN number_of_pages_to_ocr BIGINT;
ALTER TABLE FILE ADD COLUMN number_of_ocred_pages BIGINT;

View File

@ -44,7 +44,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
var file = fileTesterAndProvider.testAndProvideFile(dossier);
assertThat(file.getLastOCRTime()).isNull();
assertThat(file.getOcrStartTime()).isNull();
fileProcessingClient.analysisFailed(dossier.getId(), file.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
@ -68,7 +68,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
fileProcessingClient.ocrSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.FULL_PROCESSING);
assertThat(loadedFile.getLastOCRTime()).isNotNull();
assertThat(loadedFile.getOcrEndTime()).isNotNull();
fileProcessingClient.indexing(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
@ -94,7 +94,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
var file = fileTesterAndProvider.testAndProvideFile(dossier);
assertThat(file.getLastOCRTime()).isNull();
assertThat(file.getOcrStartTime()).isNull();
fileProcessingClient.analysisFailed(dossier.getId(), file.getId());
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());