From db495d17b3ea5687378e525706ffc47f44ea9b48 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Mon, 11 Nov 2024 12:30:02 +0100 Subject: [PATCH] RED-10196: Backend adaptions for RM/DM unification --- build.gradle.kts | 4 ++-- .../api/internal/InternalTenantsResource.java | 11 +++++++++-- .../internal/InternalTenantsController.java | 9 ++++++++- .../tenantusermanagement/entity/TenantEntity.java | 8 +++++++- .../model/CreateTenantRequest.java | 4 ++++ .../repository/TenantRepository.java | 5 +++++ .../service/TenantManagementService.java | 15 ++++++++++----- ...stractTenantUserManagementIntegrationTest.java | 9 +++++++++ .../utils/TestTenantService.java | 2 ++ 9 files changed, 56 insertions(+), 11 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index bd39fd7..9c10eb7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -94,12 +94,12 @@ configurations { } } -val persistenceServiceVersion = "2.561.0" +val persistenceServiceVersion = "2.589.1-RED10196.2" dependencies { implementation("com.iqser.red.service:persistence-service-internal-api-v1:${persistenceServiceVersion}") - implementation("com.knecon.fforesight:database-tenant-commons:0.24.0") + implementation("com.knecon.fforesight:database-tenant-commons:0.28.0-RED10196.0") implementation("com.knecon.fforesight:keycloak-commons:0.28.0") implementation("com.knecon.fforesight:swagger-commons:0.7.0") implementation("com.knecon.fforesight:tracing-commons:0.5.0") diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/api/internal/InternalTenantsResource.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/api/internal/InternalTenantsResource.java index a679525..16edf02 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/api/internal/InternalTenantsResource.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/api/internal/InternalTenantsResource.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; import com.fasterxml.jackson.databind.JsonNode; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantcommons.model.TenantResponse; import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest; import com.knecon.fforesight.tenantusermanagement.model.DeploymentKeyResponse; @@ -43,13 +44,13 @@ public interface InternalTenantsResource { @GetMapping(value = "/tenants", produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Gets all existing tenant", description = "None") + @Operation(summary = "Gets all existing tenants", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List getTenants(); @GetMapping(value = "/tenants/{tenantId}", produces = MediaType.APPLICATION_JSON_VALUE) - @Operation(summary = "Gets all existing tenant", description = "None") + @Operation(summary = "Get the given tenant", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) TenantResponse getTenant(@PathVariable("tenantId") String tenantId); @@ -77,4 +78,10 @@ public interface InternalTenantsResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) void syncTenant(@PathVariable("tenantId") String tenantId, @RequestBody JsonNode payload); + + @GetMapping(value = {"/tenants/{tenantId}/application-type"}, produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "Gets the application type of the given tenant", description = "None") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + TenantApplicationType getTenantApplicationType(@PathVariable("tenantId") String tenantId); + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/internal/InternalTenantsController.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/internal/InternalTenantsController.java index 245af8d..28251d4 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/internal/InternalTenantsController.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/controller/internal/InternalTenantsController.java @@ -9,13 +9,14 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; import com.fasterxml.jackson.databind.JsonNode; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantcommons.model.TenantResponse; import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest; import com.knecon.fforesight.tenantusermanagement.api.internal.InternalResource; import com.knecon.fforesight.tenantusermanagement.api.internal.InternalTenantsResource; +import com.knecon.fforesight.tenantusermanagement.model.CreateTenantRequest; import com.knecon.fforesight.tenantusermanagement.model.DeploymentKeyResponse; import com.knecon.fforesight.tenantusermanagement.model.SimpleTenantResponse; -import com.knecon.fforesight.tenantusermanagement.model.CreateTenantRequest; import com.knecon.fforesight.tenantusermanagement.model.UpdateTenantRequest; import com.knecon.fforesight.tenantusermanagement.service.DeploymentKeyService; import com.knecon.fforesight.tenantusermanagement.service.TenantManagementService; @@ -86,4 +87,10 @@ public class InternalTenantsController implements InternalTenantsResource, Inter } + + public TenantApplicationType getTenantApplicationType(@PathVariable(TENANT_ID_PARAM) String tenantId) { + + return tenantManagementService.getTenantApplicationType(tenantId); + } + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/entity/TenantEntity.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/entity/TenantEntity.java index 0eb4f34..e6a8f3c 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/entity/TenantEntity.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/entity/TenantEntity.java @@ -3,6 +3,7 @@ package com.knecon.fforesight.tenantusermanagement.entity; import java.util.HashMap; import java.util.Map; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantusermanagement.utils.JSONMapConverter; import jakarta.persistence.Basic; @@ -10,6 +11,8 @@ import jakarta.persistence.Column; import jakarta.persistence.Convert; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.Id; import jakarta.persistence.Table; @@ -53,6 +56,9 @@ public class TenantEntity { @Convert(converter = JSONMapConverter.class) @Builder.Default private Map details = new HashMap<>(); + @Column - private String applicationType; + @Enumerated(EnumType.STRING) + private TenantApplicationType applicationType; + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/model/CreateTenantRequest.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/model/CreateTenantRequest.java index 3283f2f..7c592d6 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/model/CreateTenantRequest.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/model/CreateTenantRequest.java @@ -3,6 +3,7 @@ package com.knecon.fforesight.tenantusermanagement.model; import java.util.ArrayList; import java.util.List; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantcommons.model.AzureStorageConnection; import com.knecon.fforesight.tenantcommons.model.DatabaseConnection; import com.knecon.fforesight.tenantcommons.model.S3StorageConnection; @@ -48,4 +49,7 @@ public class CreateTenantRequest { @Schema(description = "Parameter containing a list of users of the tenant.") private List defaultUsers = new ArrayList<>(); + @Schema(description = "Parameter containing the application type of the tenant.") + private TenantApplicationType applicationType; + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/repository/TenantRepository.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/repository/TenantRepository.java index a88ecd9..369bbb2 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/repository/TenantRepository.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/repository/TenantRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantusermanagement.entity.TenantEntity; import jakarta.transaction.Transactional; @@ -16,10 +17,14 @@ public interface TenantRepository extends JpaRepository { @Query("select t from TenantEntity t where t.tenantId = :tenantId") Optional findByTenantId(@Param("tenantId") String tenantId); + @Transactional @Modifying(clearAutomatically = true, flushAutomatically = true) @Query("delete from TenantEntity t where t.id = :tenantId ") void deleteByQuery(String tenantId); + @Query("select t.applicationType from TenantEntity t where t.tenantId = :tenantId") + Optional findApplicationTypeByTenantId(@Param("tenantId") String tenantId); + } diff --git a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java index a483c11..cee4606 100644 --- a/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java +++ b/src/main/java/com/knecon/fforesight/tenantusermanagement/service/TenantManagementService.java @@ -43,6 +43,7 @@ import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.blob.models.BlobItem; import com.fasterxml.jackson.databind.JsonNode; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; import com.knecon.fforesight.tenantcommons.model.AzureStorageConnection; @@ -111,10 +112,6 @@ public class TenantManagementService implements TenantProvider { @Value("${fforesight.tenant-exchange.name}") private String tenantExchangeName; - @Value("${FFORESIGHT_TENANT_USER_MANAGEMENT_APPLICATION_NAME:RedactManager}") - private String applicationType; - - @SneakyThrows public TenantResponse createTenant(CreateTenantRequest tenantRequest) { @@ -143,6 +140,7 @@ public class TenantManagementService implements TenantProvider { .tenantId(tenantRequest.getTenantId()) .displayName(tenantRequest.getDisplayName()) .guid(UUID.randomUUID().toString()) + .applicationType(tenantRequest.getApplicationType() != null ? tenantRequest.getApplicationType() : TenantApplicationType.RedactManager) .databaseConnection(DatabaseConnectionEntity.builder() .driver(databaseConnection.getDriver()) .host(databaseConnection.getHost()) @@ -218,7 +216,6 @@ public class TenantManagementService implements TenantProvider { log.info("Created default SMTP configuration."); - tenantEntity.setApplicationType(applicationType); var saved = tenantPersistenceService.save(tenantEntity); log.info("Persisted tenant: {}", tenantRequest.getTenantId()); @@ -824,6 +821,13 @@ public class TenantManagementService implements TenantProvider { } + public TenantApplicationType getTenantApplicationType(String tenantId) { + + return tenantRepository.findApplicationTypeByTenantId(tenantId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Tenant does not exist")); + } + + public TenantResponse removePasswords(TenantResponse tenantResponse) { if (tenantResponse.getDatabaseConnection() != null) { @@ -863,6 +867,7 @@ public class TenantManagementService implements TenantProvider { .guid(entity.getGuid()) .authDetails(authDetails) .details(entity.getDetails()) + .applicationType(entity.getApplicationType()) .databaseConnection(DatabaseConnection.builder() .driver(entity.getDatabaseConnection().getDriver()) .host(entity.getDatabaseConnection().getHost()) diff --git a/src/test/java/com/knecon/fforesight/tenantusermanagement/AbstractTenantUserManagementIntegrationTest.java b/src/test/java/com/knecon/fforesight/tenantusermanagement/AbstractTenantUserManagementIntegrationTest.java index 21fb024..533264e 100644 --- a/src/test/java/com/knecon/fforesight/tenantusermanagement/AbstractTenantUserManagementIntegrationTest.java +++ b/src/test/java/com/knecon/fforesight/tenantusermanagement/AbstractTenantUserManagementIntegrationTest.java @@ -6,7 +6,9 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; @@ -26,6 +28,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.license.Fea import com.iqser.red.service.persistence.service.v1.api.shared.model.license.FeatureType; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.License; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.RedactionLicenseModel; +import com.knecon.fforesight.tenantcommons.queue.TenantMessagingConfiguration; import com.knecon.fforesight.tenantusermanagement.client.LicenseClient; import com.knecon.fforesight.tenantusermanagement.feigntestclients.external.TenantsClient; import com.knecon.fforesight.tenantusermanagement.feigntestclients.internal.InternalTenantsClient; @@ -57,6 +60,12 @@ public class AbstractTenantUserManagementIntegrationTest { protected TokenService tokenService; @MockBean protected LicenseClient licenseClient; + @MockBean + protected RabbitAdmin rabbitAdmin; + @MockBean + protected RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry; + @MockBean + protected TenantMessagingConfiguration tenantMessagingConfiguration; @BeforeEach diff --git a/src/test/java/com/knecon/fforesight/tenantusermanagement/utils/TestTenantService.java b/src/test/java/com/knecon/fforesight/tenantusermanagement/utils/TestTenantService.java index 3b72b71..cf461f8 100644 --- a/src/test/java/com/knecon/fforesight/tenantusermanagement/utils/TestTenantService.java +++ b/src/test/java/com/knecon/fforesight/tenantusermanagement/utils/TestTenantService.java @@ -11,6 +11,7 @@ import java.util.UUID; import org.springframework.stereotype.Service; +import com.knecon.fforesight.tenantcommons.TenantApplicationType; import com.knecon.fforesight.tenantcommons.model.MongoDBConnection; import com.knecon.fforesight.tenantusermanagement.feigntestclients.external.TenantsClient; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -70,6 +71,7 @@ public class TestTenantService { .password("secret") .email("admin@knecon.com") .build())) + .applicationType(TenantApplicationType.RedactManager) .databaseConnection(DatabaseConnection.builder() .driver("postgresql") .host(SpringPostgreSQLTestContainer.getInstance().getHost())