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 e60cd303c..2578b3c8a 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 @@ -55,7 +55,7 @@ public class EntityLogController implements EntityLogResource { @PreAuthorize("hasAuthority('" + READ_REDACTION_LOG + "')") public EntityLogResponse getEntityLogWithEntriesOnPages(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestParam(value = "pageNumbers") List pageNumbers) { + @RequestParam(value = "pageNumbers", defaultValue = "") List pageNumbers) { accessControlService.checkViewPermissionsToDossier(dossierId); accessControlService.validateFileResourceExistence(fileId); 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 06d0c8774..3c6e402a3 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 @@ -55,7 +55,7 @@ public interface EntityLogResource { @GetMapping(value = ENTITY_LOG_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE + "/pages", produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Gets the entity log for a fileId with all entities found on the given page numbers", description = "None") @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 getEntityLogWithEntriesOnPages(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = "pageNumbers") List pageNumbers); + EntityLogResponse getEntityLogWithEntriesOnPages(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = "pageNumbers", defaultValue = "") List pageNumbers); @GetMapping(value = ENTITY_LOG_PATH + DOSSIER_ID_PATH_VARIABLE + FILE_ID_PATH_VARIABLE + ANALYSIS_NUMBER_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts b/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts index 7ceec0874..ced472f2b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts @@ -36,8 +36,8 @@ dependencies { exclude(group = "com.iqser.red.service", module = "persistence-service-shared-api-v1") } api("com.knecon.fforesight:jobs-commons:0.10.0") - api("com.knecon.fforesight:database-tenant-commons:0.23.0") - api("com.knecon.fforesight:keycloak-commons:0.27.0") + api("com.knecon.fforesight:database-tenant-commons:0.24.0") + api("com.knecon.fforesight:keycloak-commons:0.28.0") api("com.knecon.fforesight:tracing-commons:0.5.0") api("com.knecon.fforesight:swagger-commons:0.7.0") api("com.giffing.bucket4j.spring.boot.starter:bucket4j-spring-boot-starter:0.4.0") diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index a8d1153d1..acfeca435 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -47,7 +47,6 @@ import com.knecon.fforesight.databasetenantcommons.DatabaseTenantCommonsAutoConf import com.knecon.fforesight.jobscommons.JobsAutoConfiguration; import com.knecon.fforesight.keycloakcommons.DefaultKeyCloakCommonsAutoConfiguration; import com.knecon.fforesight.mongo.database.commons.MongoDatabaseCommonsAutoConfiguration; -import com.knecon.fforesight.mongo.database.commons.liquibase.EnableMongoLiquibase; import com.knecon.fforesight.swaggercommons.SpringDocAutoConfiguration; import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration; import com.knecon.fforesight.tenantcommons.MultiTenancyMessagingConfiguration; @@ -68,7 +67,6 @@ import lombok.extern.slf4j.Slf4j; @EnableCaching @EnableConfigurationProperties({FileManagementServiceSettings.class}) @EnableMongoRepositories(basePackages = "com.iqser.red.service.persistence") -@EnableMongoLiquibase @ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, DatabaseTenantCommonsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class, MongoDatabaseCommonsAutoConfiguration.class}) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class, MongoAutoConfiguration.class, MongoDataAutoConfiguration.class}) @Import({PersistenceServiceExternalApiConfigurationV2.class, PersistenceServiceExternalApiConfiguration.class, PersistenceServiceInternalApiConfiguration.class, PersistenceServiceExternalApiCacheConfiguration.class, MultiTenancyWebConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, MultiTenancyMessagingConfiguration.class}) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 5ebbac32e..d5bcde7b5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -108,6 +108,8 @@ import com.iqser.red.storage.commons.utils.FileSystemBackedStorageService; import com.knecon.fforesight.databasetenantcommons.providers.TenantCreatedListener; import com.knecon.fforesight.databasetenantcommons.providers.events.TenantCreatedEvent; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; +import com.knecon.fforesight.mongo.database.commons.liquibase.MongoTenantCreatedEvent; +import com.knecon.fforesight.mongo.database.commons.liquibase.MongoTenantCreatedListener; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; @@ -237,6 +239,10 @@ public abstract class AbstractPersistenceServerServiceTest { protected EncryptionDecryptionService encryptionDecryptionService; @Autowired protected TenantCreatedListener tenantCreatedListener; + @Autowired + protected MongoTenantCreatedListener mongoTenantCreatedListener; + @Autowired + protected MongoTestConfig mongoTestConfig; @MockBean protected ReportTemplatePlaceholderClient reportTemplatePlaceholderClient; @@ -364,55 +370,55 @@ public abstract class AbstractPersistenceServerServiceTest { .build()); redactionTenant.setMongoDBConnection(MongoDBConnection.builder() - .host(mongoDbContainer.getHost()) - .port(String.valueOf(mongoDbContainer.getFirstMappedPort())) + .prefix("mongodb") .username(MONGO_USERNAME) .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) + .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) .database(MONGO_DATABASE) + .options("") .build()); + var redactionTenant2 = new TenantResponse(); + redactionTenant2.setTenantId("redaction2"); + redactionTenant2.setGuid("redaction2"); + redactionTenant2.setDisplayName("redaction2"); + redactionTenant2.setAuthDetails(new AuthDetails()); + redactionTenant2.setDatabaseConnection(DatabaseConnection.builder() + .driver("postgresql") + .host(postgreSQLContainerMaster.getHost()) + .port(port) + .database("integration-tests-db-master") + .schema("public") + .username("sa") + .password(encryptionDecryptionService.encrypt("sa")) + .build()); - var redactionTenant2 = new TenantResponse(); - redactionTenant2.setTenantId("redaction2"); - redactionTenant2.setGuid("redaction2"); - redactionTenant2.setDisplayName("redaction2"); - redactionTenant2.setAuthDetails(new AuthDetails()); - redactionTenant2.setDatabaseConnection(DatabaseConnection.builder() - .driver("postgresql") - .host(postgreSQLContainerMaster.getHost()) - .port(port) - .database("integration-tests-db-master") - .schema("public") - .username("sa") - .password(encryptionDecryptionService.encrypt("sa")) - .build()); + redactionTenant2.setSearchConnection(SearchConnection.builder() + .hosts(Set.of("elasticsearchHost")) + .port(9200) + .scheme("https") + .username("elastic") + .numberOfShards("1") + .numberOfReplicas("5") + .build()); - redactionTenant2.setSearchConnection(SearchConnection.builder() - .hosts(Set.of("elasticsearchHost")) - .port(9200) - .scheme("https") - .username("elastic") - .numberOfShards("1") - .numberOfReplicas("5") + redactionTenant2.setS3StorageConnection(S3StorageConnection.builder() + .key("key") + .secret("secret") + .signerType("signerType") + .bucketName("bucketName") + .region("eu") + .endpoint("endpoint") .build()); - redactionTenant2.setS3StorageConnection(S3StorageConnection.builder() - .key("key") - .secret("secret") - .signerType("signerType") - .bucketName("bucketName") - .region("eu") - .endpoint("endpoint") - .build()); - - redactionTenant2.setMongoDBConnection(MongoDBConnection.builder() - .host(mongoDbContainer.getHost()) - .port(String.valueOf(mongoDbContainer.getFirstMappedPort())) - .username(MONGO_USERNAME) - .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) - .database("redaction2") - .build()); - + redactionTenant2.setMongoDBConnection(MongoDBConnection.builder() + .prefix("mongodb") + .username(MONGO_USERNAME) + .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) + .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) + .database("redaction2") + .options("") + .build()); when(tenantsClient.getTenant("redaction")).thenReturn(redactionTenant); when(tenantsClient.getTenant("redaction2")).thenReturn(redactionTenant2); @@ -421,6 +427,8 @@ public abstract class AbstractPersistenceServerServiceTest { try { tenantCreatedListener.createTenant(new TenantCreatedEvent("redaction")); tenantCreatedListener.createTenant(new TenantCreatedEvent("redaction2")); + mongoTenantCreatedListener.createTenant(new MongoTenantCreatedEvent("redaction")); + mongoTenantCreatedListener.createTenant(new MongoTenantCreatedEvent("redaction2")); } catch (Exception e) { e.printStackTrace(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoTestConfig.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoTestConfig.java new file mode 100644 index 000000000..cecbb0990 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoTestConfig.java @@ -0,0 +1,11 @@ +package com.iqser.red.service.peristence.v1.server.integration.utils; + +import org.springframework.context.annotation.Configuration; + +import com.knecon.fforesight.mongo.database.commons.liquibase.EnableMongoLiquibase; + +@Configuration +@EnableMongoLiquibase +public class MongoTestConfig { + +} diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts index 5e9954834..d0e28ea0a 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api(project(":persistence-service-shared-api-v1")) api("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.0") api("com.google.guava:guava:31.1-jre") - api("com.knecon.fforesight:mongo-database-commons:0.7.0") + api("com.knecon.fforesight:mongo-database-commons:0.9.0") api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}") api("org.springframework.boot:spring-boot-starter-validation:3.1.3") testImplementation("com.iqser.red.commons:test-commons:2.1.0") diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/EntityLogEntryDocumentRepository.java b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/EntityLogEntryDocumentRepository.java index b7afc6026..91973285a 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/EntityLogEntryDocumentRepository.java +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/mongo/repository/EntityLogEntryDocumentRepository.java @@ -16,10 +16,6 @@ public interface EntityLogEntryDocumentRepository extends MongoRepository findByEntityLogIdAndManualChangesNotEmpty(String entityLogId); - @Query("{ 'entityLogId' : ?0, 'changes.analysisNumber' : ?1 }") - List findByEntityLogIdAndChangesAnalysisNumber(String entityLogId, int analysisNumber); - - @Query("{ 'entityLogId' : ?0, 'changes.analysisNumber' : ?1 }") List findByEntityLogIdAndChangesAnalysisNumberEquals(String entityLogId, Integer analysisNumber); 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 3e5b402a2..a0f609b42 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 @@ -175,13 +175,6 @@ public class EntityLogMongoService { } - public List findEntityLogEntriesByAnalysisNumber(String dossierId, String fileId, int analysisNumber) { - - return entityLogEntryDocumentRepository.findByEntityLogIdAndChangesAnalysisNumber(mapper.getLogId(dossierId, fileId), analysisNumber) - .stream() - .map(mapper::fromLogEntryDocument) - .toList(); - } public Set findFirstContainingNodeIdForEachEntry(String dossierId, String fileId, Collection entryIds) { @@ -268,6 +261,14 @@ public class EntityLogMongoService { return optionalEntityLog; } + public List findEntityLogEntriesByAnalysisNumber(String dossierId, String fileId, int analysisNumber) { + + return entityLogEntryDocumentRepository.findByEntityLogIdAndChangesAnalysisNumberEquals(mapper.getLogId(dossierId, fileId), analysisNumber) + .stream() + .map(mapper::fromLogEntryDocument) + .toList(); + } + public Optional findEntityLogWithEntriesByAnalysisNumber(String dossierId, String fileId, Integer analysisNumber) { String entityLogId = mapper.getLogId(dossierId, fileId);