diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/Tenant.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/Tenant.java index 124ed10eb..e492d6125 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/Tenant.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/Tenant.java @@ -12,6 +12,8 @@ import lombok.NoArgsConstructor; public class Tenant { private String tenantId; + private String displayName; + private String guid; private String jdbcUrl; private String user; private String password; diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java index f967dabec..e526d7e82 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/resources/TenantsResource.java @@ -1,17 +1,24 @@ package com.iqser.red.service.persistence.service.v1.api.resources; +import java.util.List; + import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; import com.iqser.red.service.persistence.service.v1.api.model.multitenancy.Tenant; +@ResponseStatus(value = HttpStatus.OK) public interface TenantsResource { - @ResponseStatus(value = HttpStatus.OK) - @PostMapping("/tenants") + @PostMapping(value = "/tenants", consumes = MediaType.APPLICATION_JSON_VALUE) void createTenant(@RequestBody Tenant tenant); + @GetMapping(value = "/tenants", produces = MediaType.APPLICATION_JSON_VALUE) + List getTenants(); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java index f586d8f87..a32db923e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/multitenancy/entity/TenantEntity.java @@ -21,9 +21,13 @@ public class TenantEntity { @Id private String tenantId; @Column + private String displayName; + @Column + private String guid; + @Column private String jdbcUrl; - @Column(name = "username") - private String user; + @Column + private String username; @Column private String password; } \ No newline at end of file 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 index d4aac826c..f2ecd4818 100644 --- 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 @@ -92,7 +92,7 @@ public class DynamicDataSourceBasedMultiTenantConnectionProvider extends Abstrac .type(HikariDataSource.class) .build(); - ds.setUsername(tenant.getUser()); + ds.setUsername(tenant.getUsername()); ds.setPassword(decryptedPassword); ds.setJdbcUrl(tenant.getJdbcUrl()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java index b30be275d..e94536d19 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/TenantsController.java @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.controller; -import org.springframework.web.bind.annotation.PostMapping; +import java.util.List; + import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -17,10 +18,15 @@ public class TenantsController implements TenantsResource { private final TenantManagementService tenantManagementService; - @PostMapping("/tenants") public void createTenant(@RequestBody Tenant tenant) { tenantManagementService.createTenant(tenant); } + + public List getTenants(){ + + return tenantManagementService.getTenants(); + } + } \ No newline at end of file diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/multitenancy/persistence/TenantSpringLiquibaseExecutor.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/multitenancy/persistence/TenantSpringLiquibaseExecutor.java index 452ca1939..8de4d4bdb 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/multitenancy/persistence/TenantSpringLiquibaseExecutor.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/multitenancy/persistence/TenantSpringLiquibaseExecutor.java @@ -51,7 +51,7 @@ public class TenantSpringLiquibaseExecutor implements InitializingBean, Resource for (TenantEntity tenant : tenants) { log.info("Initializing Liquibase for tenant " + tenant.getTenantId()); - try (Connection connection = DriverManager.getConnection(tenant.getJdbcUrl(), tenant.getUser(), encryptionService.decrypt(tenant.getPassword()))) { + try (Connection connection = DriverManager.getConnection(tenant.getJdbcUrl(), tenant.getUsername(), encryptionService.decrypt(tenant.getPassword()))) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); SpringLiquibase liquibase = this.getSpringLiquibase(tenantDataSource); liquibase.afterPropertiesSet(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index 71d258570..c9cd9a314 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -2,6 +2,9 @@ package com.iqser.red.service.peristence.v1.server.service; import java.sql.Connection; import java.sql.DriverManager; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; import javax.sql.DataSource; @@ -58,7 +61,9 @@ public class TenantManagementService { TenantEntity tenantEntity = TenantEntity.builder() .tenantId(tenant.getTenantId()) - .user(tenant.getUser()) + .displayName(tenant.getDisplayName()) + .guid(UUID.randomUUID().toString()) + .username(tenant.getUser()) .jdbcUrl(tenant.getJdbcUrl()) .password(encryptedPassword) .build(); @@ -67,6 +72,25 @@ public class TenantManagementService { } + public List getTenants() { + + return tenantRepository.findAll().stream().map(this::convert).collect(Collectors.toList()); + } + + + private Tenant convert(TenantEntity entity) { + + return Tenant.builder() + .tenantId(entity.getTenantId()) + .displayName(entity.getDisplayName()) + .guid(entity.getGuid()) + .jdbcUrl(entity.getJdbcUrl()) + .password(encryptionService.decrypt(entity.getPassword())) + .user(entity.getUsername()) + .build(); + } + + private void runLiquibase(DataSource dataSource) throws LiquibaseException { SpringLiquibase liquibase = getSpringLiquibase(dataSource); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml index 216485c97..20278bf88 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/db/changelog/master/1-initial-schema.changelog.yaml @@ -12,6 +12,12 @@ databaseChangeLog: primaryKeyName: tenant_pkey name: tenant_id type: VARCHAR(255) + - column: + name: display_name + type: VARCHAR(255) + - column: + name: guid + type: VARCHAR(255) - column: name: username type: VARCHAR(255) 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 de71a7555..066de31dd 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 @@ -5,6 +5,7 @@ import static org.mockito.Mockito.when; import java.sql.Connection; import java.sql.DriverManager; +import java.util.UUID; import javax.sql.DataSource; @@ -253,7 +254,7 @@ public abstract class AbstractPersistenceServerServiceTest { createDatabase("redaction", "redaction"); createSchema(jdbcUrl, "redaction", "redaction"); - tenantsClient.createTenant(new Tenant("redaction", jdbcUrl, "redaction", "redaction")); + tenantsClient.createTenant(new Tenant("redaction","Redaction default", UUID.randomUUID().toString(), jdbcUrl, "redaction", "redaction")); } }