RED-8480: differenciate between recategorize and legal basis change

This commit is contained in:
Ali Oezyetimoglu 2024-04-16 16:58:37 +02:00
parent 544e188e9b
commit 0a7108c152
11 changed files with 72 additions and 28 deletions

View File

@ -6,6 +6,9 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION;
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -20,6 +23,7 @@ import com.iqser.red.service.persistence.management.v1.processor.model.ManualCha
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
import com.iqser.red.service.persistence.management.v1.processor.service.CommentService; import com.iqser.red.service.persistence.management.v1.processor.service.CommentService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService; import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService;
@ -27,17 +31,12 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.service.v1.api.external.resource.ManualRedactionResource; import com.iqser.red.service.persistence.service.v1.api.external.resource.ManualRedactionResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory; import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ForceRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.LegalBasisChangeRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualAddResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualAddResponse;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RecategorizationRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RemoveRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ResizeRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel;
@ -69,6 +68,7 @@ public class ManualRedactionController implements ManualRedactionResource {
AccessControlService accessControlService; AccessControlService accessControlService;
CommentService commentService; CommentService commentService;
FileStatusManagementService fileStatusManagementService; FileStatusManagementService fileStatusManagementService;
EntityLogService entityLogService;
@Override @Override
@ -257,6 +257,12 @@ public class ManualRedactionController implements ManualRedactionResource {
accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyFileIsNotApproved(dossierId, fileId);
accessControlService.verifyUserIsMemberOrApprover(dossierId); accessControlService.verifyUserIsMemberOrApprover(dossierId);
return handleLegalBasisChanges(dossierId, fileId, legalBasisChangeRequests);
}
private List<ManualAddResponse> handleLegalBasisChanges(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests); List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests);
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
@ -266,7 +272,6 @@ public class ManualRedactionController implements ManualRedactionResource {
.message("Legal basis reason was changed") .message("Legal basis reason was changed")
.details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId())) .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId()))
.build())); .build()));
return responseList; return responseList;
} }
@ -282,11 +287,42 @@ public class ManualRedactionController implements ManualRedactionResource {
accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyFileIsNotApproved(dossierId, fileId);
accessControlService.verifyUserIsMemberOrApprover(dossierId); accessControlService.verifyUserIsMemberOrApprover(dossierId);
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId, EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
fileId,
recategorizationRequests, Set<RecategorizationRequestModel> recategorizations = new HashSet<>();
dossier.getDossierTemplateId(), Set<LegalBasisChangeRequestModel> legalBasisChanges = new HashSet<>();
includeUnprocessed);
recategorizationRequests.forEach(recategorizationRequestModel -> {
var entry = entityLog.getEntityLogEntry()
.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(recategorizationRequestModel.getAnnotationId()))
.findFirst();
if (entry.isPresent()) {
if (manualRedactionService.isLegalBasisChangeRequest(recategorizationRequestModel, entry.get())) {
LegalBasisChangeRequestModel legalBasisChange = manualRedactionService.convertRecategorizationToLegalBasisChange(recategorizationRequestModel);
legalBasisChanges.add(legalBasisChange);
} else {
recategorizations.add(recategorizationRequestModel);
}
}
});
List<ManualAddResponse> responseList = new ArrayList<>();
responseList.addAll(handleLegalBasisChanges(dossierId, fileId, legalBasisChanges));
responseList.addAll(handleRectegorizations(dossierId, fileId, recategorizations, includeUnprocessed, dossier.getDossierTemplateId()));
return responseList;
}
private List<ManualAddResponse> handleRectegorizations(String dossierId,
String fileId,
Set<RecategorizationRequestModel> recategorizationRequests,
boolean includeUnprocessed,
String dossierTemplateId) {
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId, fileId, recategorizationRequests, dossierTemplateId, includeUnprocessed);
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
.userId(KeycloakSecurity.getUserId()) .userId(KeycloakSecurity.getUserId())

View File

@ -14,7 +14,6 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@Deprecated(forRemoval = true)
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor

View File

@ -357,7 +357,6 @@ public class EntityLogMergeService {
} }
@Deprecated(forRemoval = true)
private void mergeLegalBasisChange(ManualLegalBasisChange manualLegalBasisChange, private void mergeLegalBasisChange(ManualLegalBasisChange manualLegalBasisChange,
EntityLogEntry entityLogEntry, EntityLogEntry entityLogEntry,
int analysisNumber) { int analysisNumber) {
@ -379,7 +378,6 @@ public class EntityLogMergeService {
} }
@Deprecated(forRemoval = true)
private Map<String, String> getPropertyChanges(ManualLegalBasisChange manualLegalBasisChange) { private Map<String, String> getPropertyChanges(ManualLegalBasisChange manualLegalBasisChange) {
Map<String, String> propertyChanges = new HashMap<>(); Map<String, String> propertyChanges = new HashMap<>();

View File

@ -137,7 +137,6 @@ public class ManualRedactionMapper {
} }
@Deprecated(forRemoval = true)
public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId, public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId,
String fileId, String fileId,
Set<LegalBasisChangeRequestModel> legalBasisChangeRequests, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests,

View File

@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import com.google.common.hash.HashFunction; import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing; import com.google.common.hash.Hashing;
@ -221,7 +222,6 @@ public class ManualRedactionService {
} }
@Deprecated(forRemoval = true)
@Transactional @Transactional
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) { public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
@ -233,6 +233,8 @@ public class ManualRedactionService {
getEntityLogEntryConsumer(fileId)); getEntityLogEntryConsumer(fileId));
for (var legalBasisChangeRequest : requests) { for (var legalBasisChangeRequest : requests) {
checkLegalBasisLength(legalBasisChangeRequest.getLegalBasis());
legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest); legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest);
Long commentId = commentService.addCommentAndGetId(fileId, Long commentId = commentService.addCommentAndGetId(fileId,
@ -318,8 +320,7 @@ public class ManualRedactionService {
List<ManualAddResponse> response = new ArrayList<>(); List<ManualAddResponse> response = new ArrayList<>();
List<ManualResizeRedactionEntity> manualResizeRedactionEntities = new ArrayList<>(); List<ManualResizeRedactionEntity> manualResizeRedactionEntities = new ArrayList<>();
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed); EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
List<ResizeRedactionRequest> requests = manualRedactionMapper.toResizeRedactionRequestList(resizeRedactionRequests, entityLog, List<ResizeRedactionRequest> requests = manualRedactionMapper.toResizeRedactionRequestList(resizeRedactionRequests, entityLog, getEntityLogEntryConsumer(fileId));
getEntityLogEntryConsumer(fileId));
for (ResizeRedactionRequest resizeRedactionRequest : requests) { for (ResizeRedactionRequest resizeRedactionRequest : requests) {
@ -540,4 +541,16 @@ public class ManualRedactionService {
return entry -> addManualRedactionEntry(fileId, entry); return entry -> addManualRedactionEntry(fileId, entry);
} }
public LegalBasisChangeRequestModel convertRecategorizationToLegalBasisChange(RecategorizationRequestModel recategorizationRequestModel) {
return MagicConverter.convert(recategorizationRequestModel, LegalBasisChangeRequestModel.class);
}
public boolean isLegalBasisChangeRequest(RecategorizationRequestModel requestModel, EntityLogEntry entry) {
return !ObjectUtils.isEmpty(requestModel.getLegalBasis()) && !requestModel.getLegalBasis().equals(entry.getLegalBasis());
}
} }

View File

@ -22,7 +22,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Deprecated(forRemoval = true)
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@ -12,7 +12,6 @@ import org.springframework.data.repository.query.Param;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity;
@Deprecated(forRemoval = true)
public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBasisChangeEntity, AnnotationEntityId>, AnnotationEntityRepository { public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBasisChangeEntity, AnnotationEntityId>, AnnotationEntityRepository {
@Modifying @Modifying

View File

@ -35,6 +35,7 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest; import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest;
@ -112,6 +113,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
@Autowired @Autowired
private FileProcessingClient fileProcessingClient; private FileProcessingClient fileProcessingClient;
@Autowired
private ManualRedactionService manualRedactionService;
@Test @Test
public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() { public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() {
@ -2098,14 +2102,14 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModel), false); manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModel), false);
var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true); var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
assertEquals(1, allManualRedactions.getRecategorizations().size()); assertEquals(1, allManualRedactions.getLegalBasisChanges().size());
assertTrue(allManualRedactions.getRecategorizations() assertTrue(allManualRedactions.getLegalBasisChanges()
.stream() .stream()
.anyMatch(entry -> entry.getAnnotationId().equals("annotationId"))); .anyMatch(entry -> entry.getAnnotationId().equals("annotationId")));
assertTrue(allManualRedactions.getRecategorizations() assertTrue(allManualRedactions.getLegalBasisChanges()
.stream() .stream()
.anyMatch(entry -> entry.getLegalBasis().equals("lb2"))); .anyMatch(entry -> entry.getLegalBasis().equals("lb2")));
assertTrue(allManualRedactions.getRecategorizations() assertTrue(allManualRedactions.getLegalBasisChanges()
.stream() .stream()
.anyMatch(entry -> entry.getSection().equals("section"))); .anyMatch(entry -> entry.getSection().equals("section")));
} }

View File

@ -5,7 +5,6 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@Deprecated(forRemoval = true)
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor

View File

@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
@Deprecated(forRemoval = true)
@Data @Data
@SuperBuilder @SuperBuilder
@NoArgsConstructor @NoArgsConstructor

View File

@ -6,7 +6,6 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.NonNull; import lombok.NonNull;
@Deprecated(forRemoval = true)
@Data @Data
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor