RED-8480: differenciate between recategorize and legal basis change
This commit is contained in:
parent
11dcb2fb93
commit
c066495df7
@ -6,6 +6,8 @@ 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.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 +22,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,6 +30,7 @@ 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.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;
|
||||||
@ -63,6 +67,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
AccessControlService accessControlService;
|
AccessControlService accessControlService;
|
||||||
CommentService commentService;
|
CommentService commentService;
|
||||||
FileStatusManagementService fileStatusManagementService;
|
FileStatusManagementService fileStatusManagementService;
|
||||||
|
EntityLogService entityLogService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -251,6 +256,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()
|
||||||
@ -260,7 +271,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,11 +286,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, includeUnprocessed);
|
||||||
fileId,
|
|
||||||
dossier.getDossierTemplateId(),
|
Set<RecategorizationRequestModel> recategorizations = new HashSet<>();
|
||||||
recategorizationRequests,
|
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, dossierTemplateId, recategorizationRequests, includeUnprocessed);
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -138,7 +138,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,
|
||||||
|
|||||||
@ -13,6 +13,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;
|
||||||
@ -230,7 +231,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) {
|
||||||
|
|
||||||
@ -239,6 +239,8 @@ public class ManualRedactionService {
|
|||||||
var requests = manualRedactionMapper.toLegalBasisChangeRequestList(dossierId, fileId, legalBasisChangeRequests, getEntityLogEntryConsumer(fileId));
|
var requests = manualRedactionMapper.toLegalBasisChangeRequestList(dossierId, fileId, legalBasisChangeRequests, 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,
|
||||||
@ -538,4 +540,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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -197,3 +197,5 @@ databaseChangeLog:
|
|||||||
file: db/changelog/tenant/124-create-migration-required-status-for-each-present-file.yaml
|
file: db/changelog/tenant/124-create-migration-required-status-for-each-present-file.yaml
|
||||||
- include:
|
- include:
|
||||||
file: db/changelog/tenant/sql/207-acl-migration-cleanup.sql
|
file: db/changelog/tenant/sql/207-acl-migration-cleanup.sql
|
||||||
|
- include:
|
||||||
|
file: db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
databaseChangeLog:
|
||||||
|
- changeSet:
|
||||||
|
id: add-legal-basis-change-to-manual-recategorization
|
||||||
|
author: ali
|
||||||
|
changes:
|
||||||
|
- modifyDataType:
|
||||||
|
columnName: legal_basis
|
||||||
|
newDataType: VARCHAR(4000)
|
||||||
|
tableName: manual_legal_basis_change
|
||||||
@ -38,6 +38,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;
|
||||||
@ -113,6 +114,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() {
|
||||||
@ -2355,4 +2359,30 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
assertTrue(errorMessage.contains("Redaction value can not exceed 4000 characters"));
|
assertTrue(errorMessage.contains("Redaction value can not exceed 4000 characters"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConvertRecategorizeToLegalBasisChange() {
|
||||||
|
|
||||||
|
RecategorizationRequestModel r = RecategorizationRequestModel.builder()
|
||||||
|
.annotationId("id")
|
||||||
|
.type("type 1")
|
||||||
|
.comment("Kommi")
|
||||||
|
.addToDictionary(false)
|
||||||
|
.addToAllDossiers(false)
|
||||||
|
.section("here")
|
||||||
|
.legalBasis("some legal basis")
|
||||||
|
.value("val")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
LegalBasisChangeRequestModel l = manualRedactionService.convertRecategorizationToLegalBasisChange(r);
|
||||||
|
|
||||||
|
assertEquals(r.getAnnotationId(), l.getAnnotationId());
|
||||||
|
assertEquals(r.getComment(), l.getComment());
|
||||||
|
assertEquals(r.getLegalBasis(), l.getLegalBasis());
|
||||||
|
assertEquals(r.getSection(), l.getSection());
|
||||||
|
assertEquals(r.getValue(), l.getValue());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user