From d92409dadbeb8a48a377d079a5d49ac6d0476d43 Mon Sep 17 00:00:00 2001 From: devplant Date: Fri, 7 Apr 2023 16:22:07 +0300 Subject: [PATCH] RED-5504 - Prevent using exact same database schema/buckets/index for multiple tenants - extract the name of the unique constraint --- .../api/controller/InternalControllerAdvice.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java index a49ff5b31..c2bedc017 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/InternalControllerAdvice.java @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; @RestControllerAdvice public class InternalControllerAdvice { + public final String VIOLATES_UNIQUE_CONSTRAINT = "violates unique constraint"; /* error handling */ @@ -87,10 +88,11 @@ public class InternalControllerAdvice { @ExceptionHandler(value = SQLException.class) public ResponseEntity handleSQLException(SQLException e) { - if (e.getMessage().contains("violates unique constraint")) { - int index = e.getMessage().indexOf("violates unique constraint"); - String violation_key = e.getMessage().substring(index); - return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "Unique constraint violation" + violation_key), HttpStatus.CONFLICT); + if (e.getMessage().contains(VIOLATES_UNIQUE_CONSTRAINT)) { + int indexFrom = e.getMessage().indexOf(VIOLATES_UNIQUE_CONSTRAINT) + VIOLATES_UNIQUE_CONSTRAINT.length(); + int indexTo = e.getMessage().indexOf("Detail"); + String violation_key = e.getMessage().substring(indexFrom, indexTo); + return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "Unique constraint violation: " + violation_key), HttpStatus.CONFLICT); } else if (e.getMessage().contains("No suitable driver found")) { return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "JDBC URL is incorrect"), HttpStatus.BAD_REQUEST); } else {