diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java index 2578b3c8a..c05366f0d 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/EntityLogController.java @@ -32,7 +32,7 @@ public class EntityLogController implements EntityLogResource { @PreAuthorize("hasAuthority('" + READ_REDACTION_LOG + "')") public EntityLogResponse getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "excludedTypes", required = false) List excludedTypes, + @RequestParam(value = "excludedTypes", required = false, defaultValue = "") List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed) { accessControlService.checkViewPermissionsToDossier(dossierId); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java index 3c6e402a3..81f88b481 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/EntityLogResource.java @@ -40,7 +40,7 @@ public interface EntityLogResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The dossier / file / entity log is not found.")}) EntityLogResponse getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "excludedTypes", required = false) List excludedTypes, + @RequestParam(value = "excludedTypes", required = false, defaultValue = "") List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed); diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java index 5f9fc547b..a313be400 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/EntityLogInternalController.java @@ -22,7 +22,7 @@ public class EntityLogInternalController implements EntityLogResource { @Override public EntityLog getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "excludedType", required = false) List excludedTypes, + @RequestParam(value = "excludedType", required = false, defaultValue = "") List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed) { return entityLogService.getEntityLog(dossierId, fileId, excludedTypes, includeUnprocessed); diff --git a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java index 9275439bf..1760d7c67 100644 --- a/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java +++ b/persistence-service-v1/persistence-service-internal-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/internal/resources/EntityLogResource.java @@ -30,7 +30,7 @@ public interface EntityLogResource { @GetMapping(value = InternalApi.BASE_PATH + ENTITY_LOG_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) EntityLog getEntityLog(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "excludedType", required = false) List excludedTypes, + @RequestParam(value = "excludedType", required = false, defaultValue = "") List excludedTypes, @RequestParam(value = "includeUnprocessed", required = false, defaultValue = FALSE) boolean includeUnprocessed); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java index 23f792688..8c3e32608 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileManagementStorageService.java @@ -140,7 +140,7 @@ public class FileManagementStorageService { @SneakyThrows public void saveEntityLog(String dossierId, String fileId, EntityLog entityLog) { - entityLogMongoService.upsertEntityLog(dossierId, fileId, entityLog); + entityLogMongoService.saveEntityLog(dossierId, fileId, entityLog); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMongoServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMongoServiceTest.java index 8867fc416..416498115 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMongoServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/EntityLogMongoServiceTest.java @@ -46,7 +46,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLog entityLogToStore = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE1_ID, entityLogToStore); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE1_ID, entityLogToStore); var optionalEntityLog = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE1_ID); assertTrue(optionalEntityLog.isPresent()); @@ -63,7 +63,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT file = new ClassPathResource(String.format(ENTITY_LOG2)); entityLogToStore = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE2_ID, entityLogToStore); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE2_ID, entityLogToStore); optionalEntityLog = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE2_ID); assertTrue(optionalEntityLog.isPresent()); @@ -89,7 +89,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLog entityLogToStore = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE1_ID, entityLogToStore); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE1_ID, entityLogToStore); var optionalEntityLog = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE1_ID); assertTrue(optionalEntityLog.isPresent()); @@ -115,7 +115,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLog entityLog = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); Optional found = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE3_ID); assertTrue(found.isPresent()); @@ -217,7 +217,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLogEntry entityLogEntry = objectMapper.readValue(NEW_ENTITY_LOG_ENTRY, EntityLogEntry.class); - entityLogMongoService.insertEntityLogEntries(TEST_DOSSIER_ID, TEST_FILE3_ID, List.of(entityLogEntry)); + entityLogMongoService.saveEntityLogEntries(TEST_DOSSIER_ID, TEST_FILE3_ID, List.of(entityLogEntry)); found = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE3_ID); assertTrue(found.isPresent()); @@ -236,7 +236,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLog entityLog = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); Optional found = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE3_ID); assertTrue(found.isPresent()); @@ -247,7 +247,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT entityLog = objectMapper.readValue(file.getInputStream(), EntityLog.class); entityLog.setAnalysisNumber(entityLog.getAnalysisNumber() + 1); - entityLogMongoService.upsertEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); found = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE3_ID); assertTrue(found.isPresent()); @@ -257,7 +257,6 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT } - @Test @SneakyThrows public void testUpdateEntityLogWithoutEntries() { @@ -268,7 +267,7 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT EntityLog entityLog = objectMapper.readValue(file.getInputStream(), EntityLog.class); - entityLogMongoService.insertEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE3_ID, entityLog); Optional found = entityLogMongoService.findEntityLogByDossierIdAndFileId(TEST_DOSSIER_ID, TEST_FILE3_ID); assertTrue(found.isPresent()); @@ -288,4 +287,22 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT } + + @Test + @SneakyThrows + public void testGetWithNullExcludedTypes() { + + var file = new ClassPathResource(String.format(ENTITY_LOG1)); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.registerModule(new JavaTimeModule()); + + EntityLog entityLogToStore = objectMapper.readValue(file.getInputStream(), EntityLog.class); + + entityLogMongoService.saveEntityLog(TEST_DOSSIER_ID, TEST_FILE1_ID, entityLogToStore); + + var optionalEntityLog = entityLogMongoService.findEntityLogWithoutExcludedEntryTypes(TEST_DOSSIER_ID, TEST_FILE1_ID, null); + assertTrue(optionalEntityLog.isPresent()); + + } + } diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/EntityLogMongoService.java b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/EntityLogMongoService.java index a0f609b42..c9210a05f 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/EntityLogMongoService.java +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/service/EntityLogMongoService.java @@ -48,6 +48,17 @@ public class EntityLogMongoService { } + public void saveEntityLog(String dossierId, String fileId, EntityLog entityLog) { + + EntityLogDocument entityLogDocument = entityLogDocumentRepository.save(mapper.toLogDocument(dossierId, fileId, entityLog)); + + entityLogEntryDocumentRepository.saveAll(entityLog.getEntityLogEntry() + .stream() + .map(entityLogEntry -> mapper.toLogEntryDocument(entityLogDocument.getId(), entityLogEntry)) + .toList()); + } + + // this does everything : insert when not found and update if found public void upsertEntityLog(String dossierId, String fileId, EntityLog entityLog) { @@ -106,6 +117,23 @@ public class EntityLogMongoService { entityLogDocumentRepository.save(entityLogDocument); } + public void saveEntityLogEntries(String dossierId, String fileId, List entityLogEntries) { + + String entityLogId = mapper.getLogId(dossierId, fileId); + + EntityLogDocument entityLogDocument = getEntityLogDocument(entityLogId); + + List entityLogEntryDocuments = entityLogEntries.stream() + .map(entityLogEntry -> mapper.toLogEntryDocument(entityLogId, entityLogEntry)) + .toList(); + + entityLogDocument.getEntityLogEntryDocuments().addAll(entityLogEntryDocuments); + + entityLogEntryDocumentRepository.saveAll(entityLogEntryDocuments); + entityLogDocumentRepository.save(entityLogDocument); + } + + public void updateEntityLogEntries(String dossierId, String fileId, List entityLogEntries) { @@ -236,11 +264,12 @@ public class EntityLogMongoService { public Optional findEntityLogWithoutExcludedEntryTypes(String dossierId, String fileId, List excludedTypes) { + var excludedTypesNonNull = excludedTypes == null ? new ArrayList() : excludedTypes; String entityLogId = mapper.getLogId(dossierId, fileId); Optional optionalEntityLog = entityLogDocumentRepository.findEntityLogDocumentWithoutEntriesById(entityLogId) .map(mapper::fromLogDocument); optionalEntityLog.ifPresent(entityLog -> entityLog.getEntityLogEntry() - .addAll(entityLogEntryDocumentRepository.findEntityLogDocumentByIdAndExcludedTypes(entityLogId, excludedTypes) + .addAll(entityLogEntryDocumentRepository.findEntityLogDocumentByIdAndExcludedTypes(entityLogId, excludedTypesNonNull) .stream() .map(mapper::fromLogEntryDocument) .toList()));