diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/AsyncMigrationStarterService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/AsyncMigrationStarterService.java index 572af8252..73e7f9a2f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/AsyncMigrationStarterService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/AsyncMigrationStarterService.java @@ -1,22 +1,40 @@ package com.iqser.red.service.persistence.management.v1.processor.migration; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.acl.custom.initializer.ACLInitializer; import com.iqser.red.service.persistence.management.v1.processor.service.job.AutomaticAnalysisJob; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.DevDataProvider; +import com.knecon.fforesight.tenantcommons.TenantProvider; +import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j @Service -@RequiredArgsConstructor public class AsyncMigrationStarterService { private final AutomaticAnalysisJob automaticAnalysisJob; private final MigrationStarterService migrationStarterService; private final ACLInitializer aclInitializer; + private final TenantProvider tenantProvider; + private final DevDataProvider devDataProvider; + + + public AsyncMigrationStarterService(AutomaticAnalysisJob automaticAnalysisJob, + MigrationStarterService migrationStarterService, + ACLInitializer aclInitializer, + TenantProvider tenantProvider, + @Autowired(required = false) DevDataProvider devDataProvider) { + + this.automaticAnalysisJob = automaticAnalysisJob; + this.migrationStarterService = migrationStarterService; + this.aclInitializer = aclInitializer; + this.tenantProvider = tenantProvider; + this.devDataProvider = devDataProvider; + } @Async @@ -27,6 +45,13 @@ public class AsyncMigrationStarterService { migrationStarterService.runForTenant(tenantId); aclInitializer.run(); automaticAnalysisJob.setSchedulingStopped(false); + + tenantProvider.updateDetails(tenantId, UpdateDetailsRequest.builder().key("persistence-service-ready").value(true).build()); + + if (devDataProvider != null) { + devDataProvider.importDossierTemplatesToTenant(tenantId); + } + } catch (Exception e) { automaticAnalysisJob.setSchedulingStopped(false); throw e; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java index f0ae93c44..451c5fb25 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/MigrationStarterService.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.MigrationPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -29,11 +30,15 @@ public class MigrationStarterService { private final TenantProvider tenantProvider; - @EventListener(ApplicationReadyEvent.class) + @EventListener(ApplicationReadyEvent.class) public void migrate() { tenantProvider.getTenants().forEach(tenant -> { + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } + TenantContext.setTenantId(tenant.getTenantId()); //This is always running on startup @@ -45,6 +50,10 @@ public class MigrationStarterService { tenantProvider.getTenants().forEach(tenant -> { + if (!TenantUtils.isTenantReadyForPersistence(tenant)) { + return; + } + runForTenant(tenant.getTenantId()); }); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java index 11e0eb4dc..fe0984568 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/KeyCloakUserSyncService.java @@ -9,6 +9,7 @@ import com.iqser.red.service.persistence.management.v1.processor.acl.custom.doss import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient; import com.iqser.red.service.persistence.management.v1.processor.service.users.model.User; import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -30,6 +31,10 @@ public class KeyCloakUserSyncService { public void syncUsersWithKC() { tenantProvider.getTenants().forEach(tenant -> { + if(!TenantUtils.isTenantReadyForPersistence(tenant)){ + return; + } + TenantContext.setTenantId(tenant.getTenantId()); var allUsers = usersClient.getAllUsers(true); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java index 7b54535ad..f782fb779 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/AutomaticAnalysisJob.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -43,7 +44,10 @@ public class AutomaticAnalysisJob implements Job { } tenantProvider.getTenants().forEach(tenant -> { - tenantProvider.updateDetails(tenant.getTenantId(), UpdateDetailsRequest.builder().key("persistence-service-ready").value(true).build()); + + if(!TenantUtils.isTenantReadyForPersistence(tenant)){ + return; + } TenantContext.setTenantId(tenant.getTenantId()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java index b1cb42dfe..7f9e45623 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DeletedFilesCleanupJob.java @@ -12,6 +12,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Applica import com.iqser.red.service.persistence.management.v1.processor.service.DossierService; import com.iqser.red.service.persistence.management.v1.processor.service.FileService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -35,6 +36,10 @@ public class DeletedFilesCleanupJob implements Job { tenantProvider.getTenants().forEach(tenant -> { + if(!TenantUtils.isTenantReadyForPersistence(tenant)){ + return; + } + TenantContext.setTenantId(tenant.getTenantId()); var now = OffsetDateTime.now(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java index 866728660..c742932bc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/DownloadCleanupJob.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.entity.download.DownloadStatusEntity; import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -34,6 +35,10 @@ public class DownloadCleanupJob implements Job { tenantProvider.getTenants().forEach(tenant -> { + if(!TenantUtils.isTenantReadyForPersistence(tenant)){ + return; + } + TenantContext.setTenantId(tenant.getTenantId()); var now = OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java index 41f8f8219..3bf389f5e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/job/SendNotificationEmailJob.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationEmailService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.utils.TenantUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.EmailNotificationType; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; @@ -34,6 +35,10 @@ public class SendNotificationEmailJob implements Job { tenantProvider.getTenants().forEach(tenant -> { + if(!TenantUtils.isTenantReadyForPersistence(tenant)){ + return; + } + TenantContext.setTenantId(tenant.getTenantId()); var allConfiguredPreferences = notificationPreferencesPersistenceService.findAll(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java index 384567b54..e9f6557f6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java @@ -20,32 +20,30 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest; import com.knecon.fforesight.tenantcommons.TenantContext; +import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @Slf4j @Service @Profile("dev") +@RequiredArgsConstructor public class DevDataProvider { - @Autowired - private AsyncMigrationStarterService asyncMigrationStarterService; + private final DossierTemplateImportService dossierTemplateImportService; + + private final DossierTemplateRepository dossierTemplateRepository; - public void importDossierTemplatesToTenant(String tenantId){ + public void importDossierTemplatesToTenant(String tenantId) { + TenantContext.setTenantId(tenantId); - asyncMigrationStarterService.runForTenant(tenantId); - if(dossierTemplateRepository.count() == 0) { + if (dossierTemplateRepository.count() == 0) { executeImport(); } TenantContext.clear(); } - @Autowired - private DossierTemplateImportService dossierTemplateImportService; - - @Autowired - private DossierTemplateRepository dossierTemplateRepository; public byte[] pack(String sourceDirPath) throws IOException { @@ -71,14 +69,14 @@ public class DevDataProvider { } + @SneakyThrows private void executeImport() { var importDir = new File("/Users/timobejan/work/dossier-templates-v2/dev"); - for (var file : importDir.listFiles()) { - if(file.isDirectory()){ + if (file.isDirectory()) { var archive = pack(file.getAbsolutePath()); log.info("Importing file: " + file.getName() + " " + " with size: " + archive.length); var request = new ImportDossierTemplateRequest(); @@ -89,4 +87,5 @@ public class DevDataProvider { } } } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java index 245f9f784..69ff299c3 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java @@ -59,21 +59,18 @@ public class TenantManagementService { private final AsyncMigrationStarterService asyncMigrationStarterService; private final TenantProvider tenantProvider; private final EncryptionDecryptionService encryptionDecryptionService; - private final DevDataProvider devDataProvider; public TenantManagementService(@Qualifier("tenantLiquibaseProperties") LiquibaseProperties liquibaseProperties, ResourceLoader resourceLoader, EncryptionDecryptionService encryptionDecryptionService, AsyncMigrationStarterService asyncMigrationStarterService, - TenantProvider tenantProvider, - @Autowired(required = false) DevDataProvider devDataProvider){ + TenantProvider tenantProvider){ this.liquibaseProperties = liquibaseProperties; this.resourceLoader = resourceLoader; this.encryptionDecryptionService = encryptionDecryptionService; this.asyncMigrationStarterService = asyncMigrationStarterService; this.tenantProvider = tenantProvider; - this.devDataProvider = devDataProvider; } @@ -98,13 +95,6 @@ public class TenantManagementService { asyncMigrationStarterService.runForTenant(tenantRequest.getTenantId()); - tenantProvider.updateDetails(tenantRequest.getTenantId(), UpdateDetailsRequest.builder().key("persistence-service-ready").value(true).build()); - - if(devDataProvider!=null) { - devDataProvider.importDossierTemplatesToTenant(tenantRequest.getTenantId()); - } - - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TenantUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TenantUtils.java new file mode 100644 index 000000000..1d5637559 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/TenantUtils.java @@ -0,0 +1,12 @@ +package com.iqser.red.service.persistence.management.v1.processor.utils; + +import com.knecon.fforesight.tenantcommons.model.TenantResponse; + +public class TenantUtils { + + public static boolean isTenantReadyForPersistence(TenantResponse tenantResponse){ + return tenantResponse.getDetails()!=null && + tenantResponse.getDetails().getOrDefault("persistence-service-ready",false).equals(true); + } + +}