diff --git a/persistence-service-v1/persistence-service-api-v1/pom.xml b/persistence-service-v1/persistence-service-api-v1/pom.xml index bf4454d55..4bdf0765f 100644 --- a/persistence-service-v1/persistence-service-api-v1/pom.xml +++ b/persistence-service-v1/persistence-service-api-v1/pom.xml @@ -56,16 +56,22 @@ - org.springframework - spring-web + org.springframework.boot + spring-boot-starter-web + compile + + org.springframework.boot + spring-boot-starter-validation + compile + + com.iqser.red.commons jackson-commons - diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index 1141ce648..8b3a1c525 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -1,5 +1,8 @@ package com.iqser.red.service.persistence.service.v1.api.model.multitenancy; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -11,11 +14,15 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class TenantRequest { + @NotNull private String tenantId; + @NotBlank private String displayName; private String guid; private String jdbcUrl; + @NotBlank private String user; + @NotBlank private String password; } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/ConflictException.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/ConflictException.java index f47430f66..7e268bf97 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/ConflictException.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/exception/ConflictException.java @@ -7,4 +7,11 @@ public class ConflictException extends RuntimeException { super(message); } + + public static ConflictException withObjectName(String objectName) { + + return new ConflictException(String.format("An object of type %s already exists.", objectName)); + + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/pom.xml b/persistence-service-v1/persistence-service-server-v1/pom.xml index 15ab8a5cd..6da55d426 100644 --- a/persistence-service-v1/persistence-service-server-v1/pom.xml +++ b/persistence-service-v1/persistence-service-server-v1/pom.xml @@ -125,6 +125,10 @@ org.slf4j slf4j-log4j12 + + org.springframework.boot + spring-boot-starter-web + com.iqser.red.commons spring-boot-starter-web-custom-commons diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 5e47ec606..0a8515b48 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -5,6 +5,7 @@ import java.time.OffsetDateTime; import org.postgresql.util.PSQLException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -93,4 +94,13 @@ public class ControllerAdvice { } } + + @ResponseBody + @ResponseStatus(value = HttpStatus.BAD_REQUEST) + @ExceptionHandler(value = MethodArgumentNotValidException.class) + public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + + return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); + } + } 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 611e9925f..77550538b 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 @@ -2,6 +2,8 @@ package com.iqser.red.service.peristence.v1.server.controller; import java.util.List; +import javax.validation.Valid; + import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -23,7 +25,7 @@ public class TenantsController implements TenantsResource { private final DeploymentKeyService deploymentKeyService; - public void createTenant(@RequestBody TenantRequest tenantRequest) { + public void createTenant(@Valid @RequestBody TenantRequest tenantRequest) { tenantManagementService.createTenant(tenantRequest); } 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 756da76a7..a47fcedbc 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 @@ -8,6 +8,7 @@ import java.util.stream.Collectors; import javax.sql.DataSource; +import org.postgresql.util.PSQLException; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -15,6 +16,8 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity; import com.iqser.red.service.persistence.management.v1.processor.service.EncryptionDecryptionService; @@ -71,6 +74,8 @@ public class TenantManagementService { .password(encryptedPassword) .build(); tenantRepository.save(tenantEntity); + } else { + throw ConflictException.withObjectName("tenant"); } } diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index e495dae07..4877ddcec 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -68,6 +68,7 @@ +