killbill-uncached

Merge pull request #925 from wwjbatista/work-for-release-0.19.x

3/29/2018 10:07:49 AM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
index 33fa7d7..8a154eb 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TenantResource.java
@@ -124,7 +124,7 @@ public class TenantResource extends JaxRsResourceBase {
     @Consumes(APPLICATION_JSON)
     @Produces(APPLICATION_JSON)
     @ApiOperation(value = "Create a tenant")
-    @ApiResponses(value = {@ApiResponse(code = 500, message = "Tenant already exists")})
+    @ApiResponses(value = {@ApiResponse(code = 409, message = "Tenant already exists")})
     public Response createTenant(final TenantJson json,
                                  @QueryParam(QUERY_TENANT_USE_GLOBAL_DEFAULT) @DefaultValue("false") final Boolean useGlobalDefault,
                                  @HeaderParam(HDR_CREATED_BY) final String createdBy,
diff --git a/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java b/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
index eb3f5ba..e477023 100644
--- a/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
+++ b/tenant/src/main/java/org/killbill/billing/tenant/api/user/DefaultTenantUserApi.java
@@ -92,6 +92,19 @@ public class DefaultTenantUserApi implements TenantUserApi {
         }
 
         try {
+            // Not transactional, but there is a db constraint on that column
+            if (data.getApiKey() != null && getTenantByApiKey(data.getApiKey()) != null) {
+                throw new TenantApiException(ErrorCode.TENANT_ALREADY_EXISTS, data.getExternalKey());
+            }
+        } catch (final RuntimeException e) {
+            if (e.getCause() instanceof IllegalStateException) {
+                // could happen exemption, stating that the key is not found
+            } else {
+                throw e;
+            }
+        }
+
+        try {
             tenantDao.create(new TenantModelDao(tenant), internalCallContextFactory.createInternalCallContextWithoutAccountRecordId(context));
         } catch (final TenantApiException e) {
             throw new TenantApiException(e, ErrorCode.TENANT_CREATION_FAILED);