RED-2372
This commit is contained in:
parent
dbc6063e8c
commit
c8f81d5e52
@ -1,10 +1,12 @@
|
||||
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.service.persistence.repository.DossierRepository;
|
||||
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.FileStatus;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -14,7 +16,9 @@ import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Service
|
||||
@ -23,7 +27,9 @@ public class FileStatusPersistenceService {
|
||||
|
||||
private final FileRepository fileRepository;
|
||||
private final DossierRepository dossierRepository;
|
||||
|
||||
private final FileAttributesRepository fileAttributesRepository;
|
||||
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
|
||||
private final DossierPersistenceService dossierService;
|
||||
|
||||
public void createStatus(String dossierId, String fileId, String filename, String uploader) {
|
||||
|
||||
@ -181,14 +187,18 @@ public class FileStatusPersistenceService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void setFileAttributes(String fileId, List<FileAttributeEntity> fileAttributes) {
|
||||
public void setFileAttributes(String dossierId, String fileId, Map<String, String> fileAttributes) {
|
||||
|
||||
fileAttributesRepository.deleteByFileId(fileId);
|
||||
|
||||
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
|
||||
var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes);
|
||||
file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setFileAttributes(fileAttributes);
|
||||
file.setFileAttributes(fileAttributeEntities);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ -327,8 +337,21 @@ public class FileStatusPersistenceService {
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
});
|
||||
}
|
||||
|
||||
private List<FileAttributeEntity> convertFileAttributes(String dossierId, FileEntity file, Map<String, String> fileAttributesMap) {
|
||||
var dossier = dossierService.getAndValidateDossier(dossierId);
|
||||
List<FileAttributeConfigEntity> configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId());
|
||||
|
||||
return fileAttributesMap.entrySet().stream().map(entry -> {
|
||||
var fa = new FileAttributeEntity();
|
||||
fa.setFileAttributeId(new FileAttributeEntity.FileAttributeEntityId());
|
||||
fa.setFile(file);
|
||||
fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() ->
|
||||
new BadRequestException("Invalid File Attribute Id")));
|
||||
fa.setValue(entry.getValue());
|
||||
return fa;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -11,4 +11,7 @@ public interface FileAttributesRepository extends JpaRepository<FileAttributeEnt
|
||||
@Query("DELETE FROM FileAttributeEntity f where f.fileAttributeId.fileAttributeConfigId = :fileAttributeConfigId")
|
||||
void deleteByFileAttributeConfigId(String fileAttributeConfigId);
|
||||
|
||||
@Modifying
|
||||
@Query("DELETE FROM FileAttributeEntity f where f.fileAttributeId.fileId = :fileId")
|
||||
void deleteByFileId(String fileId);
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import com.iqser.red.service.peristence.v1.server.service.FileStatusService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
|
||||
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.service.persistence.FileAttributeConfigPersistenceService;
|
||||
@ -111,7 +110,7 @@ public class FileAttributesController implements FileAttributesResource {
|
||||
|
||||
String fileId = fileStatusByFilename.get(fileStatusMappingColumn.trim()).getId();
|
||||
|
||||
fileStatusPersistenceService.setFileAttributes(fileId, convertFileAttributes(dossierId, fileId, attributeIdToValue));
|
||||
fileStatusPersistenceService.setFileAttributes(dossierId, fileId, attributeIdToValue);
|
||||
affectedFileIds.add(fileId);
|
||||
}
|
||||
|
||||
@ -123,23 +122,7 @@ public class FileAttributesController implements FileAttributesResource {
|
||||
public void setFileAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@PathVariable(FILE_ID) String fileId, @RequestBody Map<String, String> fileAttributesMap) {
|
||||
|
||||
fileStatusPersistenceService.setFileAttributes(fileId, convertFileAttributes(dossierId, fileId, fileAttributesMap));
|
||||
}
|
||||
|
||||
private List<FileAttributeEntity> convertFileAttributes(String dossierId, String fileId, Map<String, String> fileAttributesMap) {
|
||||
var dossier = dossierService.getDossierById(dossierId);
|
||||
var file = fileStatusService.getStatus(fileId);
|
||||
List<FileAttributeConfigEntity> configuration = fileAttributeConfigPersistenceService.getFileAttributes(dossier.getDossierTemplateId());
|
||||
|
||||
return fileAttributesMap.entrySet().stream().map(entry -> {
|
||||
var fa = new FileAttributeEntity();
|
||||
fa.setFileAttributeId(new FileAttributeEntity.FileAttributeEntityId());
|
||||
fa.setFile(file);
|
||||
fa.setFileAttributeConfig(configuration.stream().filter(c -> c.getId().equals(entry.getKey())).findAny().orElseThrow(() ->
|
||||
new BadRequestException("Invalid File Attribute Id")));
|
||||
fa.setValue(entry.getValue());
|
||||
return fa;
|
||||
}).collect(Collectors.toList());
|
||||
fileStatusPersistenceService.setFileAttributes(dossierId, fileId, fileAttributesMap);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,13 +2,10 @@ package com.iqser.red.service.peristence.v1.server.service;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@ -18,22 +15,12 @@ public class ExcludeFromAnalysisService {
|
||||
private final static Set<FileStatus> VALID_STATES_FOR_EXCLUSION = Sets.newHashSet(FileStatus.UNASSIGNED, FileStatus.UNDER_REVIEW, FileStatus.UNDER_APPROVAL);
|
||||
|
||||
private final FileStatusService fileStatusService;
|
||||
private final FileManagementStorageService fileManagementStorageService;
|
||||
|
||||
private final LegalBasisChangePersistenceService legalBasisChangePersistenceService;
|
||||
private final ImageRecategorizationPersistenceService imageRecategorizationPersistenceService;
|
||||
private final CommentPersistenceService commentPersistenceService;
|
||||
private final ForceRedactionPersistenceService forceRedactionPersistenceService;
|
||||
private final RemoveRedactionPersistenceService removeRedactionPersistenceService;
|
||||
private final AddRedactionPersistenceService addRedactionPersistenceService;
|
||||
private final FileStatusPersistenceService fileStatusPersistenceService;
|
||||
|
||||
public void toggleExclusion(String dossierId, String fileId, boolean excluded) {
|
||||
|
||||
var status = fileStatusService.getStatus(fileId);
|
||||
|
||||
OffsetDateTime now = OffsetDateTime.now();
|
||||
|
||||
if (!VALID_STATES_FOR_EXCLUSION.contains(status.getStatus())) {
|
||||
throw new BadRequestException("Files in status " + status.getStatus() + " cannot be excluded/included");
|
||||
}
|
||||
@ -45,39 +32,9 @@ public class ExcludeFromAnalysisService {
|
||||
// if file has been re-enabled - process it
|
||||
fileStatusService.setStatusFullReprocess(dossierId, fileId, 2);
|
||||
} else {
|
||||
// remove everything related to redaction
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.REDACTION_LOG);
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.TEXT);
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.SECTION_GRID);
|
||||
|
||||
// wipe comments
|
||||
var comments = commentPersistenceService.findCommentsByFileID(fileId, false);
|
||||
comments.forEach((key, value) -> value.forEach(comment ->
|
||||
commentPersistenceService.softDelete(comment.getId(), now)));
|
||||
|
||||
// wipe force redactions
|
||||
var forceRedactions = forceRedactionPersistenceService.findForceRedactions(fileId, false);
|
||||
forceRedactions.forEach(f -> forceRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe add manual redactions
|
||||
var addRedactions = addRedactionPersistenceService.findAddRedactions(fileId, false);
|
||||
addRedactions.forEach(f -> addRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe removeRedactions
|
||||
var removeRedactions = removeRedactionPersistenceService.findRemoveRedactions(fileId, false);
|
||||
removeRedactions.forEach(f -> removeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe image recat
|
||||
var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false);
|
||||
imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe legal basis changes
|
||||
var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false);
|
||||
legalBasisChanges.forEach(f -> legalBasisChangePersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
fileStatusPersistenceService.updateHasComments(fileId, false);
|
||||
|
||||
fileStatusService.wipeFileData(dossierId, fileId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -9,9 +9,9 @@ import com.iqser.red.service.peristence.v1.server.controller.RulesController;
|
||||
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.UserNotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeRequest;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -38,6 +38,15 @@ public class FileStatusService {
|
||||
private final RulesController rulesController;
|
||||
private final ManualRedactionProviderService manualRedactionProviderService;
|
||||
|
||||
private final FileManagementStorageService fileManagementStorageService;
|
||||
|
||||
private final LegalBasisChangePersistenceService legalBasisChangePersistenceService;
|
||||
private final ImageRecategorizationPersistenceService imageRecategorizationPersistenceService;
|
||||
private final CommentPersistenceService commentPersistenceService;
|
||||
private final ForceRedactionPersistenceService forceRedactionPersistenceService;
|
||||
private final RemoveRedactionPersistenceService removeRedactionPersistenceService;
|
||||
private final AddRedactionPersistenceService addRedactionPersistenceService;
|
||||
|
||||
|
||||
public List<FileEntity> getDossierStatus(String dossierId) {
|
||||
|
||||
@ -265,6 +274,7 @@ public class FileStatusService {
|
||||
public void overwriteFile(String dossierId, String fileId, String uploader, String filename, int length) {
|
||||
|
||||
fileStatusPersistenceService.overwriteFile(fileId, uploader, filename);
|
||||
wipeFileData(dossierId,fileId);
|
||||
setStatusFullReprocess(dossierId, fileId, length);
|
||||
}
|
||||
|
||||
@ -275,6 +285,43 @@ public class FileStatusService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void wipeFileData(String dossierId, String fileId){
|
||||
OffsetDateTime now = OffsetDateTime.now();
|
||||
// remove everything related to redaction
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.REDACTION_LOG);
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.TEXT);
|
||||
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.SECTION_GRID);
|
||||
|
||||
// wipe comments
|
||||
var comments = commentPersistenceService.findCommentsByFileID(fileId, false);
|
||||
comments.forEach((key, value) -> value.forEach(comment ->
|
||||
commentPersistenceService.softDelete(comment.getId(), now)));
|
||||
|
||||
// wipe force redactions
|
||||
var forceRedactions = forceRedactionPersistenceService.findForceRedactions(fileId, false);
|
||||
forceRedactions.forEach(f -> forceRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe add manual redactions
|
||||
var addRedactions = addRedactionPersistenceService.findAddRedactions(fileId, false);
|
||||
addRedactions.forEach(f -> addRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe removeRedactions
|
||||
var removeRedactions = removeRedactionPersistenceService.findRemoveRedactions(fileId, false);
|
||||
removeRedactions.forEach(f -> removeRedactionPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe image recat
|
||||
var imageRecategorizations = imageRecategorizationPersistenceService.findRecategorizations(fileId, false);
|
||||
imageRecategorizations.forEach(f -> imageRecategorizationPersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
// wipe legal basis changes
|
||||
var legalBasisChanges = legalBasisChangePersistenceService.findLegalBasisChanges(fileId, false);
|
||||
legalBasisChanges.forEach(f -> legalBasisChangePersistenceService.softDelete(fileId, f.getId().getAnnotationId(), now));
|
||||
|
||||
fileStatusPersistenceService.updateHasComments(fileId, false);
|
||||
}
|
||||
|
||||
|
||||
private List<com.iqser.red.service.redaction.v1.model.FileAttribute> convert(
|
||||
List<FileAttributeEntity> fileAttributes) {
|
||||
|
||||
|
||||
@ -121,7 +121,13 @@ public class FileAttributeTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
|
||||
fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
|
||||
assertThat(fileAttributes.size()).isEqualTo(3);
|
||||
assertThat(fileAttributes.size()).isEqualTo(2);
|
||||
|
||||
fileAttributes.put(fileAttributes.keySet().iterator().next(), "changed");
|
||||
fileAttributeClient.setFileAttributes(dossier.getId(), file.getId(), fileAttributes);
|
||||
|
||||
fileAttributes = fileClient.getFileStatus(dossier.getId(), file.getId()).getFileAttributes();
|
||||
assertThat(fileAttributes.size()).isEqualTo(2);
|
||||
|
||||
|
||||
fileAttributeConfigClient.setFileAttributesConfig(dossier.getDossierTemplateId(), Lists.newArrayList());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user