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/ApplicationConfigurationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
index 46fa872cc..2526597c0 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ApplicationConfigurationController.java
@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.ApplicationConfigurationResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
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/AuditController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
index fc5c4148b..b8b7f6476 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/AuditController.java
@@ -1,7 +1,7 @@
package com.iqser.red.persistence.service.v1.external.api.impl.controller;
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.SEARCH_AUDIT_LOG;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
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/DictionaryController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
index 7726f2c90..30d2e34c0 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java
@@ -27,7 +27,7 @@ import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
import com.iqser.red.service.persistence.management.v1.processor.utils.TypeValueMapper;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DictionaryResource;
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/DossierAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
index fbe041996..aeb4b4754 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierAttributesController.java
@@ -21,7 +21,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.AccessC
import com.iqser.red.service.persistence.management.v1.processor.service.DossierAttributesManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DossierAttributesResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierAttributes;
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/DossierStatusController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
index ebab0a2ad..74e87ce95 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DossierStatusController.java
@@ -18,7 +18,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.ColorUtils;
import com.iqser.red.service.persistence.management.v1.processor.utils.DossierStatusMapper;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.DossierStatusResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStatusRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest;
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/FileAttributesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
index f19db25c9..1a2255b80 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/FileAttributesController.java
@@ -23,7 +23,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.FileAtt
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.FileAttributesResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributes;
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/LegalBasisMappingController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
index be114b3d8..50e89cba3 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/LegalBasisMappingController.java
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.LegalBasisMappingResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
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/NotificationController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
index 7dce245d0..f3ef07499 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationController.java
@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.NotificationResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.NotificationResponse;
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
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/NotificationPreferencesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
index 4eaa9c0cd..08c00771f 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/NotificationPreferencesController.java
@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPreferencesPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.NotificationPreferencesResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationPreferences;
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/ReportTemplateController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
index aab701f12..445125f4e 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ReportTemplateController.java
@@ -37,7 +37,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.management.v1.processor.utils.StringEncodingUtils;
import com.iqser.red.service.persistence.service.v1.api.external.resource.ReportTemplateResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
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/ViewedPagesController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
index 630cddc41..88ba8d7e5 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ViewedPagesController.java
@@ -14,7 +14,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.AccessC
import com.iqser.red.service.persistence.management.v1.processor.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ViewedPagesPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.ViewedPagesResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPages;
import com.iqser.red.service.persistence.service.v1.api.shared.model.ViewedPagesRequest;
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/WatermarkController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
index 5f436f8e1..1e5eb88ba 100644
--- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
+++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/WatermarkController.java
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.external.resource.WatermarkResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java
index 2bc194475..028be7654 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DigitalSignatureInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DigitalSignatureInternalController.java
index 5cbafa265..027b2e8e2 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DigitalSignatureInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DigitalSignatureInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import org.springframework.web.bind.annotation.RestController;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesConfigInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesConfigInternalController.java
index 640fdd427..1a2cc25ce 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesConfigInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesConfigInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesInternalController.java
index 8c98167aa..3d1f3d2fb 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierAttributesInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java
index e38ae4f5a..76befe632 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DossierTemplateInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileAttributesConfigInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileAttributesConfigInternalController.java
index 79c5cc3dc..5024c7472 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileAttributesConfigInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/FileAttributesConfigInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/IndexInformationInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/IndexInformationInternalController.java
index 2a36cc066..1373b473f 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/IndexInformationInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/IndexInformationInternalController.java
@@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.iqser.red.service.persistence.management.v1.processor.entity.index.IndexInformationEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.IndexInformationPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.internal.resources.IndexInformationResource;
import com.iqser.red.service.persistence.service.v1.api.shared.model.index.IndexInformation;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
index c6ea5a75f..cc72f1671 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/LegalBasisMappingInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/ReportTemplateInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/ReportTemplateInternalController.java
index 9cfdab435..e35390c81 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/ReportTemplateInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/ReportTemplateInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/WatermarkInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/WatermarkInternalController.java
index 19ad0fb4f..d208b8104 100644
--- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/WatermarkInternalController.java
+++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/WatermarkInternalController.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.v1.internal.api.controller;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
diff --git a/persistence-service-v1/persistence-service-processor-v1/pom.xml b/persistence-service-v1/persistence-service-processor-v1/pom.xml
index bcd6fa7ed..8ae978b7d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/pom.xml
+++ b/persistence-service-v1/persistence-service-processor-v1/pom.xml
@@ -19,6 +19,7 @@
0.5.0
0.18.0
0.6.0
+ 0.3.0
@@ -28,6 +29,12 @@
${jobs-commons.version}
+
+ com.knecon.fforesight
+ database-tenant-commons
+ ${database-tenant-commons.version}
+
+
com.knecon.fforesight
keycloak-commons
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java
index 21585f6c2..93c32eff3 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/acl/ACLBeanConfiguration.java
@@ -20,7 +20,7 @@ import org.springframework.security.acls.jdbc.LookupStrategy;
import org.springframework.security.acls.model.PermissionGrantingStrategy;
import org.springframework.transaction.annotation.EnableTransactionManagement;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.MultiTenantDataSource;
+import com.knecon.fforesight.databasetenantcommons.providers.MultiTenantDataSource;
import lombok.RequiredArgsConstructor;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java
deleted file mode 100644
index 6c8eef759..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfiguration.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.configuration;
-
-
-import org.springframework.amqp.core.Binding;
-import org.springframework.amqp.core.BindingBuilder;
-import org.springframework.amqp.core.FanoutExchange;
-import org.springframework.amqp.core.Queue;
-import org.springframework.amqp.core.QueueBuilder;
-import org.springframework.amqp.core.TopicExchange;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import lombok.RequiredArgsConstructor;
-
-@Configuration
-@RequiredArgsConstructor
-public class TenantMessagingConfiguration {
-
- public static final String PERSISTENCE_SERVICE_TENANT_EVENTS_DQL = "persistence-service-tenant-events-dql";
- public static final String PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE = "persistence-service-tenant-created-queue";
-
-
- @Bean("persistenceServiceTenantCreatedQueue")
- public Queue persistenceServiceTenantCreatedQueue() {
- return QueueBuilder.durable(PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE)
- .withArgument("x-dead-letter-exchange", "").withArgument("x-dead-letter-routing-key", PERSISTENCE_SERVICE_TENANT_EVENTS_DQL).build();
- }
-
- @Bean
- public Queue persistenceServiceTenantDLQ() {
-
- return QueueBuilder.durable(PERSISTENCE_SERVICE_TENANT_EVENTS_DQL).build();
- }
-
-
- @Bean
- public Binding tenantExchangeBinding(@Qualifier("persistenceServiceTenantCreatedQueue") Queue persistenceServiceTenantCreatedQueue,
- @Qualifier("tenantExchange") TopicExchange tenantExchange) {
- return BindingBuilder.bind(persistenceServiceTenantCreatedQueue).to(tenantExchange).with("tenant.created");
- }
-
- @Bean(name = "tenantExchange")
- TopicExchange tenantExchange(@Value("${fforesight.tenant-exchange.name}") String tenantExchangeName) {
-
- return new TopicExchange(tenantExchangeName);
- }
-
-}
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/dev/DevDataProvider.java
similarity index 93%
rename from persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DevDataProvider.java
rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dev/DevDataProvider.java
index e9f6557f6..8c4dd35b6 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/dev/DevDataProvider.java
@@ -1,4 +1,5 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
+package com.iqser.red.service.persistence.management.v1.processor.dev;
+
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -10,11 +11,9 @@ import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
-import com.iqser.red.service.persistence.management.v1.processor.migration.AsyncMigrationStarterService;
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateImportService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
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 73e7f9a2f..efe873ea7 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
@@ -5,8 +5,9 @@ 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.dev.DevDataProvider;
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.databasetenantcommons.providers.MigrationService;
import com.knecon.fforesight.tenantcommons.TenantProvider;
import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest;
@@ -14,7 +15,7 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
-public class AsyncMigrationStarterService {
+public class AsyncMigrationStarterService implements MigrationService {
private final AutomaticAnalysisJob automaticAnalysisJob;
private final MigrationStarterService migrationStarterService;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java
deleted file mode 100644
index 35ab28f19..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantPersistenceConfig.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.persistence;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import jakarta.persistence.EntityManagerFactory;
-
-//import org.hibernate.MultiTenancyStrategy;
-import org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy;
-import org.hibernate.cfg.AvailableSettings;
-import org.hibernate.dialect.Dialect;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.context.annotation.Primary;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.hibernate5.SpringBeanContainer;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.CurrentTenantIdentifierResolverImpl;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.DynamicDataSourceBasedMultiTenantConnectionProvider;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ColorsRepository;
-import com.iqser.red.service.persistence.management.v1.processor.settings.TenantHikariSettings;
-import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
-import com.knecon.fforesight.tenantcommons.TenantProvider;
-
-import lombok.RequiredArgsConstructor;
-
-@Configuration
-@EnableJpaRepositories(basePackageClasses = ColorsRepository.class, entityManagerFactoryRef = "tenantEntityManagerFactory", transactionManagerRef = "tenantTransactionManager")
-@EnableConfigurationProperties({JpaProperties.class, TenantHikariSettings.class})
-@RequiredArgsConstructor
-public class TenantPersistenceConfig {
-
- private static final String entityPackages = "com.iqser.red.service.persistence.management.v1.processor.entity";
- private final ConfigurableListableBeanFactory beanFactory;
- private final JpaProperties jpaProperties;
-
-
- @Primary
- @Bean
- public LocalContainerEntityManagerFactoryBean tenantEntityManagerFactory(DynamicDataSourceBasedMultiTenantConnectionProvider connectionProvider,
- CurrentTenantIdentifierResolverImpl tenantResolver) {
-
- LocalContainerEntityManagerFactoryBean emfBean = new LocalContainerEntityManagerFactoryBean();
- emfBean.setPersistenceUnitName("tenant-persistence-unit");
- emfBean.setPackagesToScan(entityPackages);
- emfBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
- Map properties = new HashMap<>(this.jpaProperties.getProperties());
- properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY, "org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy");
- properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY, "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");
- properties.put(AvailableSettings.BEAN_CONTAINER, new SpringBeanContainer(this.beanFactory));
-// properties.put(AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE);
- properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, connectionProvider);
- properties.put(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, tenantResolver);
- properties.put(AvailableSettings.DIALECT, "org.hibernate.dialect.PostgreSQLDialect");
- properties.put("hibernate.temp.use_jdbc_metadata_defaults",false);
- emfBean.setJpaPropertyMap(properties);
-
- return emfBean;
- }
-
-
- @Primary
- @Bean
- public JpaTransactionManager tenantTransactionManager(@Qualifier("tenantEntityManagerFactory") EntityManagerFactory emf) {
-
- JpaTransactionManager tenantTransactionManager = new JpaTransactionManager();
- tenantTransactionManager.setEntityManagerFactory(emf);
- return tenantTransactionManager;
- }
-
-
- @Bean
- @ConfigurationProperties("multitenancy.tenant.liquibase")
- public LiquibaseProperties tenantLiquibaseProperties() {
-
- return new LiquibaseProperties();
- }
-
-
- @Bean
- public TenantSpringLiquibaseExecutor tenantLiquibase(EncryptionDecryptionService encryptionService,
- TenantProvider tenantProvider,
- LiquibaseProperties tenantLiquibaseProperties) {
-
- return new TenantSpringLiquibaseExecutor(encryptionService, tenantProvider, tenantLiquibaseProperties);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java
deleted file mode 100644
index bfec90d04..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/persistence/TenantSpringLiquibaseExecutor.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.multitenancy.persistence;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.util.List;
-
-import javax.sql.DataSource;
-
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
-import org.springframework.context.ResourceLoaderAware;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
-import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
-import com.knecon.fforesight.tenantcommons.TenantProvider;
-import com.knecon.fforesight.tenantcommons.model.TenantResponse;
-
-import liquibase.integration.spring.SpringLiquibase;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@RequiredArgsConstructor
-public class TenantSpringLiquibaseExecutor implements InitializingBean, ResourceLoaderAware {
-
- private final EncryptionDecryptionService encryptionService;
- private final TenantProvider tenantProvider;
-
- @Qualifier("tenantLiquibaseProperties")
- private final LiquibaseProperties tenantLiquibaseProperties;
-
- @Setter
- private ResourceLoader resourceLoader;
-
-
- @Override
- public void afterPropertiesSet() {
-
- log.info("DynamicDataSources based multi-tenancy enabled");
- this.runOnAllTenants(tenantProvider.getTenants());
- }
-
-
- @SneakyThrows
- protected void runOnAllTenants(List tenants) {
-
- for (var tenant : tenants) {
-
- var jdbcURL = JDBCUtils.buildJdbcUrlWithSchema(tenant.getDatabaseConnection());
- log.info("Initializing Liquibase for tenant {} / {}", tenant.getTenantId(), jdbcURL);
- try (Connection connection = DriverManager.getConnection(jdbcURL,
- tenant.getDatabaseConnection().getUsername(),
- encryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- SpringLiquibase liquibase = this.getSpringLiquibase(tenantDataSource);
- liquibase.setDefaultSchema(tenant.getDatabaseConnection().getSchema());
- liquibase.setLiquibaseSchema(tenant.getDatabaseConnection().getSchema());
- liquibase.afterPropertiesSet();
- } catch (Exception e) {
- log.error("Failed to run liquibase migration on tenant: {}", tenant.getTenantId());
- }
- log.info("Liquibase ran for tenant " + tenant.getTenantId());
- }
- }
-
-
- protected SpringLiquibase getSpringLiquibase(DataSource dataSource) {
-
- SpringLiquibase liquibase = new SpringLiquibase();
- liquibase.setResourceLoader(resourceLoader);
- liquibase.setDataSource(dataSource);
- liquibase.setChangeLog(tenantLiquibaseProperties.getChangeLog());
- liquibase.setContexts(tenantLiquibaseProperties.getContexts());
- return liquibase;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
index 98eb04b3d..e8480c70e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java
@@ -28,7 +28,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.Confl
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.management.v1.processor.utils.TextNormalizationUtilities;
import com.iqser.red.service.persistence.management.v1.processor.utils.TypeMapper;
import com.iqser.red.service.persistence.management.v1.processor.validation.DictionaryValidator;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
index 484168a83..5ee30a693 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java
@@ -36,7 +36,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.ColorUtils;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary;
import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeResponse;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
index 0c69a2c97..7fd16439e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DigitalSignatureService.java
@@ -10,7 +10,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignature;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.DigitalSignatureType;
import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java
index 2d0453b8c..bcb589bdb 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierAttributesManagementService.java
@@ -11,7 +11,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierAttributePersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttribute;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierAttributeType;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
index 50b5090ea..f143f1c01 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierManagementService.java
@@ -16,7 +16,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.DossierMapper;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierInformation;
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
index 28a9058e9..697b0321a 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateCloneService.java
@@ -31,7 +31,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplateStatus;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
index e4124d763..f6ef11e37 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateImportService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java
index 4d9cd97aa..d38885c72 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
index 04e128c20..e62c9d785 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DownloadService.java
@@ -21,7 +21,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DownloadStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
index 41fea2750..edb0c25b1 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusService.java
@@ -35,7 +35,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.management.v1.processor.utils.FileModelMapper;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionProviderService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionProviderService.java
index dc8745357..54511c53d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionProviderService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionProviderService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.HashMap;
import java.util.HashSet;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
index 135636e72..b50d21979 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java
@@ -41,7 +41,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.LegalBasisChangePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RemoveRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java
index 0f914ba5c..252560442 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/RedactionLogService.java
@@ -13,7 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionLogMergeService;
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.FilteredRedactionLogRequest;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
index 2b7e95dbe..be16d83e0 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReportTemplateService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.io.ByteArrayInputStream;
import java.util.List;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
index 89756d1ff..ceaaeec43 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/export/DossierTemplateExportService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service.export;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
index 278d5e103..d64cf174e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/EntryPersistenceService.java
@@ -16,8 +16,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCWriteUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.JDBCWriteUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
index 26616d99c..419124d2e 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/LegalBasisMappingPersistenceService.java
@@ -1,6 +1,6 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
-import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
+import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
index 87233efcb..31c1a88aa 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/NotificationPreferencesPersistenceService.java
@@ -17,7 +17,7 @@ import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.notification.NotificationPreferencesEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationPreferencesRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationPreferences;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ResizeRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ResizeRedactionPersistenceService.java
index ab7601881..c154122a8 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ResizeRedactionPersistenceService.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ResizeRedactionPersistenceService.java
@@ -13,7 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.annotati
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ResizeRedactionRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ResizeRedactionRequest;
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java
deleted file mode 100644
index b06f3222d..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/CurrentTenantIdentifierResolverImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
-import org.springframework.stereotype.Component;
-
-import com.knecon.fforesight.tenantcommons.TenantContext;
-
-@Component("currentTenantIdentifierResolver")
-public class CurrentTenantIdentifierResolverImpl implements CurrentTenantIdentifierResolver {
-
- @Override
- public String resolveCurrentTenantIdentifier() {
-
- String tenantId = TenantContext.getTenantId();
- if (tenantId != null && !tenantId.isEmpty()) {
- return tenantId;
- } else {
- // Allow bootstrapping the EntityManagerFactory, in which case no tenant is needed
- return "BOOTSTRAP";
- }
- }
-
-
- @Override
- public boolean validateExistingCurrentSessions() {
-
- return true;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java
deleted file mode 100644
index 7f7c9ae17..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/DynamicDataSourceBasedMultiTenantConnectionProvider.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-
-import jakarta.annotation.PostConstruct;
-import javax.sql.DataSource;
-
-import org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.cache.RemovalListener;
-import com.iqser.red.service.persistence.management.v1.processor.settings.TenantHikariSettings;
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
-import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
-import com.knecon.fforesight.tenantcommons.TenantProvider;
-import com.zaxxer.hikari.HikariDataSource;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class DynamicDataSourceBasedMultiTenantConnectionProvider extends AbstractDataSourceBasedMultiTenantConnectionProviderImpl {
-
- private static final String TENANT_POOL_NAME_SUFFIX = "DataSource";
-
- private final EncryptionDecryptionService encryptionService;
- private final TenantHikariSettings tenantHikariSettings;
- private final TenantProvider tenantProvider;
-
- @Value("${multitenancy.datasource-cache.maximumSize:100}")
- private Long maximumSize;
-
- @Value("${multitenancy.datasource-cache.expireAfterAccess:10}")
- private Integer expireAfterAccess;
-
- private LoadingCache connectionPerTenant;
-
- private LoadingCache dataSourcePerConnectionString;
-
-
- @PostConstruct
- protected void createCache() {
-
- connectionPerTenant = CacheBuilder.newBuilder().maximumSize(maximumSize).expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES).build(new CacheLoader<>() {
- public SchemaConnection load(String key) {
-
- var tenant = tenantProvider.getTenant(key);
- var jdbcUrl = JDBCUtils.buildJdbcUrl(tenant.getDatabaseConnection());
- return SchemaConnection.builder().jdbcUrl(jdbcUrl).databaseConnection(tenant.getDatabaseConnection()).build();
- }
- });
-
- dataSourcePerConnectionString = CacheBuilder.newBuilder()
- .maximumSize(maximumSize)
- .expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
- .removalListener((RemovalListener) removal -> {
- HikariDataSource ds = (HikariDataSource) removal.getValue();
- ds.close();
- log.info("Closed datasource: {}", ds.getPoolName());
- }
-
- )
- .build(new CacheLoader<>() {
- public DataSource load(SchemaConnection schemaConnection) {
-
- return createAndConfigureDataSource(schemaConnection);
- }
- });
- }
-
-
- private DataSource createAndConfigureDataSource(SchemaConnection connection) {
-
- String decryptedPassword = encryptionService.decrypt(connection.getDatabaseConnection().getPassword());
-
- tenantHikariSettings.setUsername(connection.getDatabaseConnection().getUsername());
- tenantHikariSettings.setPassword(decryptedPassword);
-
- var jdbcUrl = JDBCUtils.buildJdbcUrl(connection.getDatabaseConnection());
- tenantHikariSettings.setJdbcUrl(jdbcUrl);
- tenantHikariSettings.setPoolName(jdbcUrl + TENANT_POOL_NAME_SUFFIX);
-
- HikariDataSource ds = new HikariDataSource(tenantHikariSettings);
-
- log.info("Configured datasource: {}", ds.getPoolName());
- return ds;
- }
-
-
- @Override
- protected DataSource selectAnyDataSource() {
-
- return null;
- }
-
-
- @Override
- public DataSource selectDataSource(String tenantIdentifier) {
-
- try {
- var connection = connectionPerTenant.get(tenantIdentifier);
- return dataSourcePerConnectionString.get(connection);
- } catch (ExecutionException e) {
- throw new RuntimeException("Failed to load DataSource for tenant: " + tenantIdentifier);
- }
- }
-
-
- @Override
- public Connection getConnection(String tenantIdentifier) throws SQLException {
-
- try {
- var dataSource = selectDataSource(tenantIdentifier);
- Connection connection = dataSource.getConnection();
- connection.setSchema(connectionPerTenant.get(tenantIdentifier).getDatabaseConnection().getSchema());
- return connection;
- } catch (ExecutionException e) {
- throw new RuntimeException("No such tenant: " + tenantIdentifier);
- }
- }
-
-
- @Override
- public void releaseAnyConnection(Connection connection) throws SQLException {
-
- connection.close();
- }
-
-
- @Override
- public void releaseConnection(String tenantIdentifier, Connection connection) throws SQLException {
-
- connection.setSchema(null);
- releaseAnyConnection(connection);
- }
-
-
- @Override
- public boolean supportsAggressiveRelease() {
-
- return true;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java
deleted file mode 100644
index fc96bcbd7..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSource.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.sql.ConnectionBuilder;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.sql.ShardingKeyBuilder;
-import java.util.logging.Logger;
-
-import javax.sql.DataSource;
-
-import org.springframework.stereotype.Component;
-
-import com.knecon.fforesight.tenantcommons.TenantContext;
-
-import lombok.RequiredArgsConstructor;
-
-@Component
-@RequiredArgsConstructor
-public class MultiTenantDataSource implements DataSource {
-
- private final DynamicDataSourceBasedMultiTenantConnectionProvider dsd;
-
-
- private DataSource getActiveDataSource() {
-
- return dsd.selectDataSource(TenantContext.getTenantId());
- }
-
-
- @Override
- public Connection getConnection() throws SQLException {
-
- return dsd.getConnection(TenantContext.getTenantId());
- }
-
-
- @Override
- public Connection getConnection(String username, String password) throws SQLException {
-
- return getActiveDataSource().getConnection(username, password);
- }
-
-
- @Override
- public PrintWriter getLogWriter() throws SQLException {
-
- return getActiveDataSource().getLogWriter();
- }
-
-
- @Override
- public void setLogWriter(PrintWriter out) throws SQLException {
-
- getActiveDataSource().setLogWriter(out);
- }
-
-
- @Override
- public void setLoginTimeout(int seconds) throws SQLException {
-
- getActiveDataSource().setLoginTimeout(seconds);
- }
-
-
- @Override
- public int getLoginTimeout() throws SQLException {
-
- return getActiveDataSource().getLoginTimeout();
- }
-
-
- @Override
- public ConnectionBuilder createConnectionBuilder() throws SQLException {
-
- return DataSource.super.createConnectionBuilder();
- }
-
-
- @Override
- public Logger getParentLogger() throws SQLFeatureNotSupportedException {
-
- return getActiveDataSource().getParentLogger();
- }
-
-
- @Override
- public ShardingKeyBuilder createShardingKeyBuilder() throws SQLException {
-
- return DataSource.super.createShardingKeyBuilder();
- }
-
-
- @Override
- public T unwrap(Class iface) throws SQLException {
-
- return getActiveDataSource().unwrap(iface);
- }
-
-
- @Override
- public boolean isWrapperFor(Class> iface) throws SQLException {
-
- return getActiveDataSource().isWrapperFor(iface);
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java
deleted file mode 100644
index 9a77bed46..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/MultiTenantDataSourceHealthIndicator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.jdbc.DataSourceHealthIndicator;
-import org.springframework.stereotype.Component;
-
-@Component
-public class MultiTenantDataSourceHealthIndicator extends DataSourceHealthIndicator {
-
- @Autowired
- private MultiTenantDataSource multiTenantDataSource;
-
-
- @Override
- public void afterPropertiesSet() throws Exception {
-
- setDataSource(multiTenantDataSource);
- super.afterPropertiesSet();
- }
-
-
- @Override
- protected void doHealthCheck(Health.Builder builder) throws Exception {
-
- builder.up().withDetail("database", "multi-tenant-setup");
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java
deleted file mode 100644
index ac2c1b55b..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/SchemaConnection.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-
-import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-@Data
-@Builder
-@AllArgsConstructor
-@EqualsAndHashCode(onlyExplicitlyIncluded = true)
-public class SchemaConnection {
-
- @EqualsAndHashCode.Include
- private String jdbcUrl;
- private DatabaseConnection databaseConnection;
-
-}
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
deleted file mode 100644
index 69ff299c3..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/mulitenancy/TenantManagementService.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy;
-
-import static com.iqser.red.service.persistence.management.v1.processor.configuration.TenantMessagingConfiguration.PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE;
-import static com.iqser.red.service.persistence.management.v1.processor.configuration.UserMessagingConfiguration.PERSISTENCE_SERVICE_USER_CREATED_QUEUE;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.util.Set;
-
-import javax.sql.DataSource;
-
-import org.postgresql.util.PSQLException;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.StatementCallback;
-import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-import org.springframework.stereotype.Service;
-
-import com.iqser.red.service.persistence.management.v1.processor.migration.AsyncMigrationStarterService;
-import com.iqser.red.service.persistence.management.v1.processor.service.users.events.TenantCreatedEvent;
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCUtils;
-import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService;
-import com.knecon.fforesight.tenantcommons.TenantProvider;
-import com.knecon.fforesight.tenantcommons.model.TenantResponse;
-import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest;
-
-import jakarta.annotation.PostConstruct;
-import liquibase.exception.LiquibaseException;
-import liquibase.integration.spring.SpringLiquibase;
-import lombok.SneakyThrows;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-@Service
-@EnableConfigurationProperties(LiquibaseProperties.class)
-public class TenantManagementService {
-
- private static final Set SUPPORTED_DATABASES = Set.of("postgresql");
- private static final Set SQL_CONNECTION_ERROR_CODES = Set.of(
- // connection_exception
- "08000",
- // connection_does_not_exist
- "08003",
- // connection_failure
- "08006",
- // invalid_catalog_name
- "3D000");
-
-
- private final LiquibaseProperties liquibaseProperties;
- private final ResourceLoader resourceLoader;
- private final AsyncMigrationStarterService asyncMigrationStarterService;
- private final TenantProvider tenantProvider;
- private final EncryptionDecryptionService encryptionDecryptionService;
-
- public TenantManagementService(@Qualifier("tenantLiquibaseProperties") LiquibaseProperties liquibaseProperties,
- ResourceLoader resourceLoader,
- EncryptionDecryptionService encryptionDecryptionService,
- AsyncMigrationStarterService asyncMigrationStarterService,
- TenantProvider tenantProvider){
-
- this.liquibaseProperties = liquibaseProperties;
- this.resourceLoader = resourceLoader;
- this.encryptionDecryptionService = encryptionDecryptionService;
- this.asyncMigrationStarterService = asyncMigrationStarterService;
- this.tenantProvider = tenantProvider;
- }
-
-
- @SneakyThrows
- @RabbitListener(queues = PERSISTENCE_SERVICE_TENANT_CREATED_QUEUE)
- public void createTenant(TenantCreatedEvent tenantRequest) {
-
- var tenant = tenantProvider.getTenant(tenantRequest.getTenantId());
-
- createSchema(tenant);
-
- var jdbcUrl = JDBCUtils.buildJdbcUrlWithSchema(tenant.getDatabaseConnection());
- validateJdbcUrl(jdbcUrl);
-
- try (Connection connection = DriverManager.getConnection(jdbcUrl, tenant.getDatabaseConnection().getUsername(), encryptionDecryptionService.decrypt(tenant.getDatabaseConnection().getPassword()))) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- runLiquibase(tenantDataSource);
- } catch (PSQLException e) {
- handleClientException(e);
- handleInternalException(e);
- }
-
- asyncMigrationStarterService.runForTenant(tenantRequest.getTenantId());
-
- }
-
-
- private void createSchema(TenantResponse tenantRequest) {
-
- var jdbcUrl = JDBCUtils.buildJdbcUrl(tenantRequest.getDatabaseConnection());
- try (Connection connection = DriverManager.getConnection(jdbcUrl,
- tenantRequest.getDatabaseConnection().getUsername(),
- encryptionDecryptionService.decrypt(tenantRequest.getDatabaseConnection().getPassword()))) {
- DataSource tenantDataSource = new SingleConnectionDataSource(connection, false);
- JdbcTemplate jdbcTemplate = new JdbcTemplate(tenantDataSource);
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("CREATE SCHEMA " + tenantRequest.getDatabaseConnection().getSchema()));
- jdbcTemplate.execute((StatementCallback) stmt -> stmt.execute("GRANT USAGE ON SCHEMA " + tenantRequest.getDatabaseConnection()
- .getSchema() + " TO " + tenantRequest.getDatabaseConnection().getUsername()));
- } catch (Exception e) {
- log.info("Could not create schema, ignoring");
- }
- }
-
-
- @SneakyThrows
- private void validateJdbcUrl(String jdbcUrl) {
-
- try {
- // just create a URI object to check if the string is a valid URI
- var uri = new URI(jdbcUrl);
- var subUri = new URI(uri.getSchemeSpecificPart());
-
- if (uri.getScheme() == null || subUri.getScheme() == null || !uri.getScheme().equals("jdbc") || !SUPPORTED_DATABASES.contains(subUri.getScheme())) {
- throw new IllegalArgumentException("Your jdbcUrl is not valid.");
- }
- } catch (URISyntaxException e) {
- throw new IllegalArgumentException("Your jdbcUrl is not valid.", e);
- }
-
- }
-
-
- private void runLiquibase(DataSource dataSource) throws LiquibaseException {
-
- SpringLiquibase liquibase = getSpringLiquibase(dataSource);
- liquibase.afterPropertiesSet();
- }
-
-
- private void handleClientException(PSQLException e) {
-
- if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) {
- throw new IllegalArgumentException("Database credentials are not correct. Please check them.");
- }
- if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) {
- throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter.");
- }
- }
-
-
- private void handleInternalException(PSQLException e) {
-
- log.error(String.format("Connection to tenant DB failed with SQL state %s. Please check if the tenant DB is still running. " + //
- "If yes please check the connection configuration.", e.getSQLState()), e);
- throw new RuntimeException("Could not connect to the tenant DB. This is an internal error.", e);
- }
-
-
- protected SpringLiquibase getSpringLiquibase(DataSource dataSource) {
-
- SpringLiquibase liquibase = new SpringLiquibase();
- liquibase.setResourceLoader(resourceLoader);
- liquibase.setDataSource(dataSource);
- liquibase.setChangeLog(liquibaseProperties.getChangeLog());
- liquibase.setContexts(liquibaseProperties.getContexts());
- return liquibase;
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java
deleted file mode 100644
index 2836ec388..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/users/events/TenantCreatedEvent.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.service.users.events;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class TenantCreatedEvent {
-
- private String tenantId;
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java
deleted file mode 100644
index fd46cade2..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/MagicConverter.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.utils;
-
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.BiConsumer;
-
-import jakarta.persistence.EmbeddedId;
-
-import org.springframework.beans.BeanUtils;
-
-import com.google.common.collect.Lists;
-import com.iqser.red.service.persistence.service.v1.api.shared.model.common.Page;
-
-import lombok.SneakyThrows;
-
-public class MagicConverter {
-
- @SneakyThrows
- public static T convert(S source, Class target, BiConsumer deltaMapper) {
-
- if (deltaMapper != null) {
- var targetObject = convert(source, target);
- deltaMapper.accept(source, targetObject);
- return targetObject;
- } else {
- return convert(source, target);
- }
- }
-
-
- @SneakyThrows
- public static T convert(S source, Class target) {
-
- var noArgsConstructor = target.getConstructor();
- return convertOne(source, target, noArgsConstructor);
- }
-
-
- @SneakyThrows
- public static T convertOne(S source, Class target, Constructor constructor) {
-
- var newInstance = constructor.newInstance();
- BeanUtils.copyProperties(source, newInstance);
-
- for (var field : target.getDeclaredFields()) {
- if (field.getAnnotation(EmbeddedId.class) != null) {
- field.setAccessible(true);
- var id = field.getType().getConstructor().newInstance();
- BeanUtils.copyProperties(source, id);
- field.set(newInstance, id);
-
- }
- }
-
- for (var field : source.getClass().getDeclaredFields()) {
- if (field.getAnnotation(EmbeddedId.class) != null) {
- field.setAccessible(true);
- var sourceId = field.get(source);
- BeanUtils.copyProperties(sourceId, newInstance);
- }
- }
-
- return newInstance;
- }
-
-
- @SneakyThrows
- public static List convert(List sources, Class target, BiConsumer deltaMapper) {
-
- if (deltaMapper != null) {
- var targetList = convert(sources, target);
- for (int i = 0; i < targetList.size(); i++) {
- deltaMapper.accept(sources.get(i), targetList.get(i));
- }
- return targetList;
- } else {
- return convert(sources, target);
- }
-
- }
-
-
- @SneakyThrows
- public static List convert(List sources, Class target) {
-
- var noArgsConstructor = target.getConstructor();
-
- List targetList = new ArrayList<>();
- for (var s : sources) {
- targetList.add(convertOne(s, target, noArgsConstructor));
- }
- return targetList;
-
- }
-
-
- @SneakyThrows
- public static Page convert(org.springframework.data.domain.Page sources, Class target) {
-
- Page result = new Page<>();
- result.setElements(convert(Lists.newArrayList(sources), target));
- result.setPage(sources.getNumber());
- result.setPageSize(sources.getSize());
- result.setTotalHits(sources.getTotalElements());
- return result;
-
- }
-
-
- @SneakyThrows
- public static Set convert(Set sources, Class target) {
-
- var noArgsConstructor = target.getConstructor();
-
- Set targetList = new HashSet<>();
- for (var s : sources) {
- targetList.add(convertOne(s, target, noArgsConstructor));
- }
- return targetList;
-
- }
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualRedactionMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualRedactionMapper.java
index 642a22299..87a22ad80 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualRedactionMapper.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualRedactionMapper.java
@@ -5,6 +5,7 @@ import java.util.function.BiConsumer;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
public class ManualRedactionMapper implements BiConsumer {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualResizeRedactionMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualResizeRedactionMapper.java
index 14abae4cf..fd3eb589d 100644
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualResizeRedactionMapper.java
+++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ManualResizeRedactionMapper.java
@@ -5,6 +5,7 @@ import java.util.function.BiConsumer;
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualResizeRedactionEntity;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
public class ManualResizeRedactionMapper implements BiConsumer {
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java
deleted file mode 100644
index 19b95d652..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCUtils.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.utils.jdbc;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
-
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class JDBCUtils {
-
- private StringBuilder createJdbcConnectionStringBuilder(String driver, String host, String port, String database) {
-
- return new StringBuilder("jdbc:").append(driver).append("://").append(host).append(':').append(port).append('/').append(database);
- }
-
-
- public String buildJdbcUrl(DatabaseConnection databaseConnection) {
-
- StringBuilder sb = createJdbcConnectionStringBuilder(databaseConnection.getDriver(),
- databaseConnection.getHost(),
- databaseConnection.getPort(),
- databaseConnection.getDatabase());
- Map params = getConnectionParameters(databaseConnection);
- appendParams(sb, params);
- return sb.toString();
- }
-
-
- private void appendParams(StringBuilder sb, Map params) {
-
- if (!params.isEmpty()) {
- sb.append("?");
- List paramsAsStrings = params.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).toList();
- sb.append(String.join("&", paramsAsStrings));
- }
- }
-
-
- public String buildJdbcUrlWithSchema(DatabaseConnection databaseConnection) {
-
- return createJdbcConnectionString(databaseConnection.getDriver(),
- databaseConnection.getHost(),
- databaseConnection.getPort(),
- databaseConnection.getDatabase(),
- databaseConnection.getSchema(),
- getConnectionParameters(databaseConnection));
- }
-
-
- private static String createJdbcConnectionString(String driver, String host, String port, String database, String schema, Map connectionParameters) {
-
- StringBuilder sb = createJdbcConnectionStringBuilder(driver, host, port, database);
- connectionParameters.put("currentSchema", schema);
- appendParams(sb, connectionParameters);
- return sb.toString();
- }
-
-
- private Map getConnectionParameters(DatabaseConnection databaseConnection) {
-
- return Optional.ofNullable(databaseConnection.getParams()).orElseGet(HashMap::new);
- }
-
-
-}
diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java
deleted file mode 100644
index 6439933c2..000000000
--- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/jdbc/JDBCWriteUtils.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.iqser.red.service.persistence.management.v1.processor.utils.jdbc;
-
-import static org.apache.commons.lang3.StringUtils.capitalize;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.sql.PreparedStatement;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Table;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.core.env.Environment;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
-
-@Service
-@RequiredArgsConstructor
-public class JDBCWriteUtils {
-
- private static final String SQL_TEMPLATE = "INSERT INTO %s (%s) values (%s)";
-
- private final Map, EntityMetadata> entityMetadataMap = new HashMap<>();
-
- private final JdbcTemplate jdbcTemplate;
-
- private final Environment environment;
-
-
- @SneakyThrows
- @Transactional
- public void saveBatch(List entities) {
-
- if (entities.isEmpty()) {
- return;
- }
-
- var metadata = getEntityMetadata(entities.get(0).getClass());
-
- jdbcTemplate.batchUpdate(metadata.getSqlStatement(), entities, getBatchSize(), metadata::setValues);
- }
-
-
- private int getBatchSize() {
-
- return environment.getProperty("spring.jpa.properties.hibernate.jdbc.batch_size", int.class, 500);
- }
-
-
- private EntityMetadata getEntityMetadata(Class> entityClass) {
-
- var existingMetadata = entityMetadataMap.get(entityClass);
- if (existingMetadata != null) {
- return existingMetadata;
- }
-
- var tableName = getTableName(entityClass);
- var args = getArgs(entityClass);
- var sql = String.format(SQL_TEMPLATE, tableName, String.join(", ", args.keySet()), args.keySet().stream().map(a -> "?").collect(Collectors.joining(", ")));
-
- var metadata = new EntityMetadata(tableName, sql, args);
- entityMetadataMap.put(entityClass, metadata);
-
- return metadata;
- }
-
-
- private String getTableName(Class> entityClass) {
-
- var tableAnnot = entityClass.getDeclaredAnnotation(Table.class);
- return tableAnnot.name();
- }
-
-
- @SneakyThrows
- private Map getArgs(Class> entityClass) {
-
- var fields = entityClass.getDeclaredFields();
- Map entityMethodMap = new LinkedHashMap<>();
- for (var field : fields) {
- var annotations = field.getDeclaredAnnotations();
- for (var annotation : annotations) {
- if (annotation.annotationType().equals(Column.class)) {
- var columnAnnotation = (Column) annotation;
- var name = StringUtils.isEmpty(columnAnnotation.name()) ? toSnakeCase(field.getName()) : columnAnnotation.name();
- entityMethodMap.put(name, entityClass.getMethod(getMethodName(field)));
- }
- }
- }
- return entityMethodMap;
- }
-
-
- private String toSnakeCase(String name) {
-
- String ret = name.replaceAll("([A-Z]{1,100})([A-Z][a-z])", "$1_$2").replaceAll("([a-z])([A-Z])", "$1_$2");
- return ret.toLowerCase();
- }
-
-
- private String getMethodName(Field field) {
-
- var prefix = "get";
- if (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class)) {
- prefix = "is";
- }
- return prefix + capitalize(field.getName());
- }
-
-
- @Data
- @AllArgsConstructor
- public static class EntityMetadata {
-
- private String tableName;
- private String sqlStatement;
- private Map fieldMethodMap;
-
-
- @SneakyThrows
- public void setValues(PreparedStatement preparedStatement, Object entity) {
-
- int paramIndex = 1;
- for (var mapping : getFieldMethodMap().entrySet()) {
- preparedStatement.setObject(paramIndex++, mapping.getValue().invoke(entity));
- }
- }
-
- }
-
-}
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 63175a881..1f6fac123 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
@@ -18,6 +18,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService;
import com.iqser.red.persistence.service.v1.external.api.impl.PersistenceServiceExternalApiConfiguration;
@@ -27,6 +28,7 @@ import com.iqser.red.service.persistence.management.v1.processor.configuration.M
import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings;
import com.iqser.red.service.persistence.v1.internal.api.PersistenceServiceInternalApiConfiguration;
import com.iqser.red.storage.commons.StorageAutoConfiguration;
+import com.knecon.fforesight.databasetenantcommons.DatabaseTenantCommonsAutoConfiguration;
import com.knecon.fforesight.jobscommons.JobsAutoConfiguration;
import com.knecon.fforesight.keycloakcommons.DefaultKeyCloakCommonsAutoConfiguration;
import com.knecon.fforesight.swaggercommons.SpringDocAutoConfiguration;
@@ -45,7 +47,7 @@ import lombok.extern.slf4j.Slf4j;
@EnableScheduling
@EnableCaching
@EnableConfigurationProperties({FileManagementServiceSettings.class})
-@ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class})
+@ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, DatabaseTenantCommonsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class})
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class})
@Import({PersistenceServiceExternalApiConfiguration.class, PersistenceServiceInternalApiConfiguration.class, PersistenceServiceExternalApiCacheConfiguration.class, MultiTenancyWebConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, AsyncConfig.class, MultiTenancyMessagingConfiguration.class})
public class Application {
diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
index 113b0e009..f0879bc2e 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
+++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml
@@ -68,6 +68,9 @@ storage:
backend: 's3'
multitenancy:
+ packages:
+ repositories: 'com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository'
+ entities: 'com.iqser.red.service.persistence.management.v1.processor.entity'
datasource-cache:
maximumSize: 100
expireAfterAccess: 1
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
index 62fd76586..ac79e76cf 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java
@@ -27,7 +27,7 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers
import com.iqser.red.service.peristence.v1.server.integration.utils.MetricValidationUtils;
import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions;
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
index 279428af1..84990bb9c 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java
@@ -16,9 +16,9 @@ import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvid
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository;
-import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCWriteUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.JDBCWriteUtils;
import com.knecon.fforesight.tenantcommons.TenantContext;
import lombok.extern.slf4j.Slf4j;
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 249d84e6f..fc1516ba3 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
@@ -34,7 +34,6 @@ import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.StatementCallback;
import org.springframework.jdbc.datasource.SingleConnectionDataSource;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@@ -58,7 +57,6 @@ import com.iqser.red.service.persistence.management.v1.processor.client.tenantus
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService;
-import com.iqser.red.service.persistence.management.v1.processor.service.persistence.mulitenancy.TenantManagementService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository;
@@ -91,14 +89,15 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository;
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionLogMergeService;
import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService;
-import com.iqser.red.service.persistence.management.v1.processor.service.users.events.TenantCreatedEvent;
-import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter;
+import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig;
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
import com.iqser.red.storage.commons.service.StorageService;
+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.tenantcommons.EncryptionDecryptionService;
import com.knecon.fforesight.tenantcommons.TenantContext;
-import com.knecon.fforesight.tenantcommons.TenantProvider;
import com.knecon.fforesight.tenantcommons.TenantsClient;
import com.knecon.fforesight.tenantcommons.model.AuthDetails;
import com.knecon.fforesight.tenantcommons.model.DatabaseConnection;
@@ -213,7 +212,7 @@ public abstract class AbstractPersistenceServerServiceTest {
@Autowired
private EncryptionDecryptionService encryptionDecryptionService;
@Autowired
- private TenantManagementService tenantManagementService;
+ private TenantCreatedListener tenantCreatedListener;
private static String[] getAllRoles() {
@@ -323,7 +322,7 @@ public abstract class AbstractPersistenceServerServiceTest {
when(tenantsClient.getTenants()).thenReturn(List.of(redactionTenant));
try {
- tenantManagementService.createTenant(new TenantCreatedEvent("redaction"));
+ tenantCreatedListener.createTenant(new TenantCreatedEvent("redaction"));
} catch (Exception e) {
e.printStackTrace();
diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
index 29a77796b..329b7f543 100644
--- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
+++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yaml
@@ -78,6 +78,9 @@ management:
logging.level.root: info
multitenancy:
+ packages:
+ repositories: 'com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository'
+ entities: 'com.iqser.red.service.persistence.management.v1.processor.entity'
datasource-cache:
maximumSize: 100
expireAfterAccess: 1