RED-3287: Improve RedactionLog Controller to allow incremental calls

This commit is contained in:
aoezyetimoglu 2022-03-31 12:10:23 +02:00
parent a2727246e1
commit b13c4623b4
5 changed files with 53 additions and 28 deletions

View File

@ -0,0 +1,21 @@
package com.iqser.red.service.persistence.service.v1.api.model.redactionlog;
import java.time.OffsetDateTime;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class FilteredRedactionLogRequest {
private List<String> excludedTypes;
private boolean withManualRedactions;
private boolean includeFalsePositives;
private OffsetDateTime specifiedDate;
}

View File

@ -7,9 +7,12 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import com.iqser.red.service.persistence.service.v1.api.model.redactionlog.FilteredRedactionLogRequest;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
@ -35,11 +38,8 @@ public interface RedactionLogResource {
@GetMapping(value = SECTION_GRID_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE)
SectionGrid getSectionGrid(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId);
@GetMapping(value = REDACTION_LOG_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/filtered", produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = REDACTION_LOG_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE + "/filtered", produces = MediaType.APPLICATION_JSON_VALUE)
RedactionLog getFilteredRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = "excludedType", required = false) List<String> excludedTypes,
@RequestParam(value = "withManualRedactions", required = false, defaultValue = "true") boolean withManualRedactions,
@RequestParam(value = "includeFalsePositives", required = false, defaultValue = "false") boolean includeFalsePositives,
@RequestParam(value = "specifiedDate") OffsetDateTime specifiedDate);
@RequestBody FilteredRedactionLogRequest filteredRedactionLogRequest);
}

View File

@ -4,10 +4,12 @@ import java.time.OffsetDateTime;
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.peristence.v1.server.service.RedactionLogService;
import com.iqser.red.service.persistence.service.v1.api.model.redactionlog.FilteredRedactionLogRequest;
import com.iqser.red.service.persistence.service.v1.api.resources.RedactionLogResource;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
@ -37,11 +39,8 @@ public class RedactionLogController implements RedactionLogResource {
}
public RedactionLog getFilteredRedactionLog(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = "excludedType", required = false) List<String> excludedTypes,
@RequestParam(value = "withManualRedactions", required = false, defaultValue = "true") boolean withManualRedactions,
@RequestParam(value = "includeFalsePositives", required = false, defaultValue = "false") boolean includeFalsePositives,
@RequestParam(value = "specifiedDate") OffsetDateTime specifiedDate) {
return redactionLogService.getFilteredRedactionLog(dossierId, fileId, excludedTypes, withManualRedactions, includeFalsePositives, specifiedDate);
@RequestBody FilteredRedactionLogRequest filteredRedactionLogRequest) {
return redactionLogService.getFilteredRedactionLog(dossierId, fileId, filteredRedactionLogRequest);
}
}

View File

@ -13,6 +13,7 @@ import com.iqser.red.service.peristence.v1.server.controller.DictionaryControlle
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.Comment;
import com.iqser.red.service.persistence.service.v1.api.model.redactionlog.FilteredRedactionLogRequest;
import com.iqser.red.service.redaction.v1.model.Change;
import com.iqser.red.service.redaction.v1.model.ManualChange;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
@ -93,10 +94,13 @@ public class RedactionLogService {
}
public RedactionLog getFilteredRedactionLog(String dossierId, String fileId, List<String> excludedTypes, boolean withManualRedactions, boolean includeFalsePositives,
OffsetDateTime specifiedDate) {
public RedactionLog getFilteredRedactionLog(String dossierId, String fileId, FilteredRedactionLogRequest filteredRedactionLogRequest) {
var redactionLog = getRedactionLog(dossierId, fileId, excludedTypes, withManualRedactions, includeFalsePositives);
if(filteredRedactionLogRequest.getSpecifiedDate() == null) {
filteredRedactionLogRequest.setSpecifiedDate(OffsetDateTime.MIN);
}
var redactionLog = getRedactionLog(dossierId, fileId, filteredRedactionLogRequest.getExcludedTypes(), filteredRedactionLogRequest.isWithManualRedactions(), filteredRedactionLogRequest.isIncludeFalsePositives());
List<RedactionLogEntry> filteredRedactionLogEntries = new ArrayList<>();
RedactionLog filteredRedactionLog = new RedactionLog(redactionLog.getAnalysisVersion(), redactionLog.getAnalysisNumber(), filteredRedactionLogEntries, redactionLog.getLegalBasis(), redactionLog.getDictionaryVersion(), redactionLog.getDossierDictionaryVersion(), redactionLog.getRulesVersion(), redactionLog.getLegalBasisVersion());
@ -135,7 +139,7 @@ public class RedactionLogService {
var changes = redactionLogEntry.getChanges();
List<Change> filteredChanges = new ArrayList<>();
for (var change : changes) {
if (change.getDateTime().isAfter(specifiedDate)) {
if (change.getDateTime().isAfter(filteredRedactionLogRequest.getSpecifiedDate())) {
filteredChanges.add(change);
}
}
@ -144,7 +148,7 @@ public class RedactionLogService {
var manualChanges = redactionLogEntry.getManualChanges();
List<ManualChange> filteredManualChanges = new ArrayList<>();
for (var manualChange: manualChanges){
if(manualChange.getProcessedDate().isAfter(specifiedDate)) {
if(manualChange.getProcessedDate().isAfter(filteredRedactionLogRequest.getSpecifiedDate())) {
filteredManualChanges.add(manualChange);
}
}
@ -152,12 +156,14 @@ public class RedactionLogService {
var comments = redactionLogEntry.getComments();
List<Comment> filteredComments = new ArrayList<>();
for (var comment: comments) {
if(comment.getSoftDeletedTime() != null && comment.getSoftDeletedTime().isAfter(specifiedDate) || comment.getDate().isAfter(specifiedDate)) {
filteredComments.add(comment);
if(comments != null) {
for (var comment : comments) {
if (comment.getSoftDeletedTime() != null && comment.getSoftDeletedTime().isAfter(filteredRedactionLogRequest.getSpecifiedDate()) || comment.getDate().isAfter(filteredRedactionLogRequest.getSpecifiedDate())) {
filteredComments.add(comment);
}
}
frle.setComments(filteredComments);
}
frle.setComments(filteredComments);
filteredRedactionLogEntries.add(frle);
}

View File

@ -11,6 +11,7 @@ import com.iqser.red.service.peristence.v1.server.integration.client.RedactionLo
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
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.persistence.service.v1.api.model.redactionlog.FilteredRedactionLogRequest;
public class RedactionLogTest extends AbstractPersistenceServerServiceTest {
@ -23,6 +24,7 @@ public class RedactionLogTest extends AbstractPersistenceServerServiceTest {
@Autowired
private RedactionLogClient redactionLogClient;
@Test
public void testRedactionLog() {
@ -32,15 +34,12 @@ public class RedactionLogTest extends AbstractPersistenceServerServiceTest {
assertThat(redactionLogClient.getSectionGrid(dossier.getId(), file.getId())).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null, true, false)).isNotNull();
assertThat(redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null, false, false)).isNotNull();
assertThat(redactionLogClient.getFilteredRedactionLog(dossier.getId(), file.getId(), null, true, false, OffsetDateTime.now())).isNotNull();
assertThat(redactionLogClient.getFilteredRedactionLog(dossier.getId(), file.getId(), FilteredRedactionLogRequest.builder()
.excludedTypes(null)
.withManualRedactions(true)
.includeFalsePositives(false)
.specifiedDate(OffsetDateTime.now().minusDays(30))
.build())).isNotNull();
}
@Test
public void testFilteredRedactionLog() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
}
}