diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java index ff45cc5b6817..1cf5562fce21 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java @@ -8,7 +8,7 @@ import com.azure.cosmos.implementation.Paths; import com.azure.cosmos.models.CosmosAsyncContainerResponse; import com.azure.cosmos.models.CosmosAsyncDatabaseResponse; -import com.azure.cosmos.models.CosmosAsyncUserResponse; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.CosmosContainerProperties; import com.azure.cosmos.models.CosmosContainerRequestOptions; import com.azure.cosmos.models.CosmosDatabaseRequestOptions; @@ -542,9 +542,9 @@ public CosmosAsyncContainer getContainer(String id) { * @return an {@link Mono} containing the single resource response with the * created cosmos user or an error. */ - public Mono createUser(CosmosUserProperties userProperties) { + public Mono createUser(CosmosUserProperties userProperties) { return getDocClientWrapper().createUser(this.getLink(), ModelBridgeInternal.getV2User(userProperties), null) - .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response, this)).single(); + .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response)).single(); } @@ -559,9 +559,9 @@ public Mono createUser(CosmosUserProperties userPropert * @return an {@link Mono} containing the single resource response with the * upserted user or an error. */ - public Mono upsertUser(CosmosUserProperties userProperties) { + public Mono upsertUser(CosmosUserProperties userProperties) { return getDocClientWrapper().upsertUser(this.getLink(), ModelBridgeInternal.getV2User(userProperties), null) - .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response, this)).single(); + .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response)).single(); } /** diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java index afeff369853a..3f24a85aab27 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java @@ -5,7 +5,7 @@ import com.azure.cosmos.implementation.Paths; import com.azure.cosmos.models.CosmosAsyncPermissionResponse; -import com.azure.cosmos.models.CosmosAsyncUserResponse; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.CosmosPermissionProperties; import com.azure.cosmos.models.CosmosPermissionRequestOptions; import com.azure.cosmos.models.CosmosUserProperties; @@ -55,10 +55,10 @@ CosmosAsyncUser setId(String id) { * * @return a {@link Mono} containing the single resource response with the read user or an error. */ - public Mono read() { + public Mono read() { return this.database.getDocClientWrapper() .readUser(getLink(), null) - .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response, database)).single(); + .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response)).single(); } /** @@ -67,10 +67,10 @@ public Mono read() { * @param userSettings the user properties to use * @return a {@link Mono} containing the single resource response with the replaced user or an error. */ - public Mono replace(CosmosUserProperties userSettings) { + public Mono replace(CosmosUserProperties userSettings) { return this.database.getDocClientWrapper() .replaceUser(ModelBridgeInternal.getV2User(userSettings), null) - .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response, database)).single(); + .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response)).single(); } /** @@ -78,10 +78,10 @@ public Mono replace(CosmosUserProperties userSettings) * * @return a {@link Mono} containing the single resource response with the deleted user or an error. */ - public Mono delete() { + public Mono delete() { return this.database.getDocClientWrapper() .deleteUser(getLink(), null) - .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response, database)).single(); + .map(response -> ModelBridgeInternal.createCosmosAsyncUserResponse(response)).single(); } /** diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDatabase.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDatabase.java index 88a2be0082df..3fedce9e8363 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDatabase.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDatabase.java @@ -4,14 +4,13 @@ package com.azure.cosmos; import com.azure.cosmos.models.CosmosAsyncContainerResponse; -import com.azure.cosmos.models.CosmosAsyncUserResponse; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.CosmosContainerProperties; import com.azure.cosmos.models.CosmosContainerRequestOptions; import com.azure.cosmos.models.CosmosContainerResponse; import com.azure.cosmos.models.CosmosDatabaseRequestOptions; import com.azure.cosmos.models.CosmosDatabaseResponse; import com.azure.cosmos.models.CosmosUserProperties; -import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.FeedOptions; import com.azure.cosmos.models.ModelBridgeInternal; import com.azure.cosmos.models.SqlQuerySpec; @@ -477,9 +476,9 @@ public CosmosUser getUser(String id) { return new CosmosUser(databaseWrapper.getUser(id), this, id); } - CosmosUserResponse mapUserResponseAndBlock(Mono containerMono) { + CosmosUserResponse mapUserResponseAndBlock(Mono containerMono) { try { - return containerMono.map(this::convertUserResponse).block(); + return containerMono.block(); } catch (Exception ex) { final Throwable throwable = Exceptions.unwrap(ex); if (throwable instanceof CosmosException) { @@ -490,10 +489,6 @@ CosmosUserResponse mapUserResponseAndBlock(Mono contain } } - private CosmosUserResponse convertUserResponse(CosmosAsyncUserResponse response) { - return ModelBridgeInternal.createCosmosUserResponse(response, this); - } - /** * Sets the throughput. * diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosUser.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosUser.java index 3ee3d0921822..810c491100b0 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosUser.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosUser.java @@ -3,8 +3,8 @@ package com.azure.cosmos; -import com.azure.cosmos.models.CosmosUserProperties; import com.azure.cosmos.models.CosmosUserResponse; +import com.azure.cosmos.models.CosmosUserProperties; /** * The type Cosmos sync user. diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosAsyncUserResponse.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosAsyncUserResponse.java deleted file mode 100644 index d9daf331558b..000000000000 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosAsyncUserResponse.java +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.cosmos.models; - -import com.azure.cosmos.BridgeInternal; -import com.azure.cosmos.CosmosAsyncDatabase; -import com.azure.cosmos.CosmosAsyncUser; -import com.azure.cosmos.implementation.ResourceResponse; -import com.azure.cosmos.implementation.User; -import com.azure.cosmos.implementation.apachecommons.lang.StringUtils; - -/** - * The type Cosmos async user response. Contains methods to get cosmos user and properties - */ -public class CosmosAsyncUserResponse extends CosmosResponse { - @SuppressWarnings("EnforceFinalFields") - private final CosmosAsyncUser user; - - CosmosAsyncUserResponse(ResourceResponse response, CosmosAsyncDatabase database) { - super(response); - String bodyAsString = response.getBodyAsString(); - if (StringUtils.isEmpty(bodyAsString)) { - super.setProperties(null); - user = null; - } else { - CosmosUserProperties props = new CosmosUserProperties(bodyAsString); - super.setProperties(props); - user = BridgeInternal.createCosmosAsyncUser(props.getId(), database); - } - } - - /** - * Get cosmos user - * - * @return {@link CosmosAsyncUser} - */ - public CosmosAsyncUser getUser() { - return user; - } - - /** - * Gets the cosmos user properties - * - * @return {@link CosmosUserProperties} - */ - public CosmosUserProperties getProperties() { - return super.getProperties(); - } -} diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosUserResponse.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosUserResponse.java index 53cfe3c83ff8..e21cbc7e618a 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosUserResponse.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/CosmosUserResponse.java @@ -3,49 +3,32 @@ package com.azure.cosmos.models; -import com.azure.cosmos.BridgeInternal; -import com.azure.cosmos.CosmosDatabase; -import com.azure.cosmos.CosmosUser; +import com.azure.cosmos.implementation.ResourceResponse; +import com.azure.cosmos.implementation.User; +import com.azure.cosmos.implementation.apachecommons.lang.StringUtils; /** - * The type Cosmos sync user response. + * The type Cosmos user response. Contains methods to get properties */ public class CosmosUserResponse extends CosmosResponse { - private final CosmosAsyncUserResponse asyncResponse; - private final CosmosUser user; - /** - * Instantiates a new Cosmos sync user response. - * - * @param response the response - * @param database the database - */ - CosmosUserResponse(CosmosAsyncUserResponse response, CosmosDatabase database) { - super(response.resourceResponseWrapper, response.getProperties()); - this.asyncResponse = response; - if (response.getUser() != null) { - this.user = BridgeInternal.createCosmosUser(response.getUser(), database, response.getUser().getId()); + CosmosUserResponse(ResourceResponse response) { + super(response); + String bodyAsString = response.getBodyAsString(); + if (StringUtils.isEmpty(bodyAsString)) { + super.setProperties(null); } else { - // delete has null user client - this.user = null; + CosmosUserProperties props = new CosmosUserProperties(bodyAsString); + super.setProperties(props); } } /** - * Gets cosmos sync user. - * - * @return the cosmos sync user - */ - public CosmosUser getUser() { - return this.user; - } - - /** - * Gets cosmos user properties. + * Gets the cosmos user properties * - * @return the cosmos user properties + * @return {@link CosmosUserProperties} */ public CosmosUserProperties getProperties() { - return asyncResponse.getProperties(); + return super.getProperties(); } } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/ModelBridgeInternal.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/ModelBridgeInternal.java index dfec00ada671..e637ed852216 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/ModelBridgeInternal.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/models/ModelBridgeInternal.java @@ -135,8 +135,8 @@ public static CosmosAsyncUserDefinedFunctionResponse createCosmosAsyncUserDefine } @Warning(value = INTERNAL_USE_ONLY_WARNING) - public static CosmosAsyncUserResponse createCosmosAsyncUserResponse(ResourceResponse response, CosmosAsyncDatabase database) { - return new CosmosAsyncUserResponse(response, database); + public static CosmosUserResponse createCosmosAsyncUserResponse(ResourceResponse response) { + return new CosmosUserResponse(response); } @Warning(value = INTERNAL_USE_ONLY_WARNING) @@ -145,11 +145,6 @@ public static CosmosContainerResponse createCosmosContainerResponse(CosmosAsyncC return new CosmosContainerResponse(response, database, client); } - @Warning(value = INTERNAL_USE_ONLY_WARNING) - public static CosmosUserResponse createCosmosUserResponse(CosmosAsyncUserResponse response, CosmosDatabase database) { - return new CosmosUserResponse(response, database); - } - @Warning(value = INTERNAL_USE_ONLY_WARNING) public static CosmosItemResponse createCosmosItemResponse(CosmosAsyncItemResponse response) { return new CosmosItemResponse<>(response); diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosResponseValidator.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosResponseValidator.java index cb9f1a9dab0d..5a9a6b781e4f 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosResponseValidator.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosResponseValidator.java @@ -10,7 +10,7 @@ import com.azure.cosmos.models.CosmosStoredProcedureResponse; import com.azure.cosmos.models.CosmosAsyncTriggerResponse; import com.azure.cosmos.models.CosmosAsyncUserDefinedFunctionResponse; -import com.azure.cosmos.models.CosmosAsyncUserResponse; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.CosmosConflictProperties; import com.azure.cosmos.models.CosmosContainerProperties; import com.azure.cosmos.models.CosmosDatabaseProperties; @@ -80,8 +80,8 @@ private Resource getResource(T resourceResponse) { return ModelBridgeInternal.getResource(((CosmosAsyncTriggerResponse)resourceResponse).getProperties()); } else if (resourceResponse instanceof CosmosAsyncUserDefinedFunctionResponse) { return ModelBridgeInternal.getResource(((CosmosAsyncUserDefinedFunctionResponse)resourceResponse).getProperties()); - } else if (resourceResponse instanceof CosmosAsyncUserResponse) { - return ModelBridgeInternal.getResource(((CosmosAsyncUserResponse)resourceResponse).getProperties()); + } else if (resourceResponse instanceof CosmosUserResponse) { + return ModelBridgeInternal.getResource(((CosmosUserResponse)resourceResponse).getProperties()); } else if (resourceResponse instanceof CosmosAsyncPermissionResponse) { return ModelBridgeInternal.getResource(((CosmosAsyncPermissionResponse) resourceResponse).getProperties()); } diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosUserTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosUserTest.java index e08521791e51..e4a690af412e 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosUserTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/CosmosUserTest.java @@ -3,10 +3,9 @@ package com.azure.cosmos; -import com.azure.cosmos.models.CosmosUserProperties; import com.azure.cosmos.models.CosmosUserResponse; +import com.azure.cosmos.models.CosmosUserProperties; import com.azure.cosmos.models.FeedOptions; -import com.azure.cosmos.models.ModelBridgeInternal; import com.azure.cosmos.models.SqlQuerySpec; import com.azure.cosmos.rx.TestSuiteBase; import com.azure.cosmos.util.CosmosPagedIterable; diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/TestSuiteBase.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/TestSuiteBase.java index 561b5ef0d460..c1759b9ceebc 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/TestSuiteBase.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/TestSuiteBase.java @@ -43,6 +43,7 @@ import com.azure.cosmos.models.CosmosResponse; import com.azure.cosmos.models.CosmosStoredProcedureRequestOptions; import com.azure.cosmos.models.CosmosUserProperties; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.models.DataType; import com.azure.cosmos.models.FeedOptions; import com.azure.cosmos.models.FeedResponse; @@ -499,7 +500,9 @@ public void voidBulkInsertBlocking(CosmosAsyncContainer cosmosContainer, } public static CosmosAsyncUser createUser(CosmosAsyncClient client, String databaseId, CosmosUserProperties userSettings) { - return client.getDatabase(databaseId).read().block().getDatabase().createUser(userSettings).block().getUser(); + CosmosAsyncDatabase database = client.getDatabase(databaseId); + CosmosUserResponse userResponse = database.createUser(userSettings).block(); + return database.getUser(userResponse.getProperties().getId()); } public static CosmosAsyncUser safeCreateUser(CosmosAsyncClient client, String databaseId, CosmosUserProperties user) { @@ -614,7 +617,7 @@ public static void deleteUserIfExists(CosmosAsyncClient client, String databaseI } public static void deleteUser(CosmosAsyncDatabase database, String userId) { - database.getUser(userId).read().block().getUser().delete().block(); + database.getUser(userId).delete().block(); } static private CosmosAsyncDatabase safeCreateDatabase(CosmosAsyncClient client, CosmosDatabaseProperties databaseSettings) { diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/UserCrudTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/UserCrudTest.java index 424a59166f08..0cfa62d899be 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/UserCrudTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/rx/UserCrudTest.java @@ -6,13 +6,12 @@ import com.azure.cosmos.CosmosAsyncClient; import com.azure.cosmos.CosmosAsyncDatabase; import com.azure.cosmos.CosmosAsyncUser; -import com.azure.cosmos.models.CosmosAsyncUserResponse; +import com.azure.cosmos.models.CosmosUserResponse; import com.azure.cosmos.CosmosClientBuilder; import com.azure.cosmos.CosmosDatabaseForTest; import com.azure.cosmos.CosmosResponseValidator; import com.azure.cosmos.models.CosmosUserProperties; import com.azure.cosmos.implementation.FailureValidator; -import com.azure.cosmos.models.ModelBridgeInternal; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Factory; @@ -40,10 +39,10 @@ public void createUser() throws Exception { CosmosUserProperties user = new CosmosUserProperties(); user.setId(UUID.randomUUID().toString()); - Mono createObservable = createdDatabase.createUser(user); + Mono createObservable = createdDatabase.createUser(user); // validate user creation - CosmosResponseValidator validator = new CosmosResponseValidator.Builder() + CosmosResponseValidator validator = new CosmosResponseValidator.Builder() .withId(user.getId()) .notNullEtag() .build(); @@ -57,13 +56,14 @@ public void readUser() throws Exception { CosmosUserProperties user = new CosmosUserProperties(); user.setId(UUID.randomUUID().toString()); - CosmosAsyncUser readBackUser = createdDatabase.createUser(user).block().getUser(); + CosmosUserResponse userResponse = createdDatabase.createUser(user).block(); + CosmosAsyncUser readBackUser = createdDatabase.getUser(userResponse.getProperties().getId()); // read user - Mono readObservable = readBackUser.read(); + Mono readObservable = readBackUser.read(); //validate user read - CosmosResponseValidator validator = new CosmosResponseValidator.Builder() + CosmosResponseValidator validator = new CosmosResponseValidator.Builder() .withId(readBackUser.getId()) .notNullEtag() .build(); @@ -77,19 +77,20 @@ public void deleteUser() throws Exception { CosmosUserProperties user = new CosmosUserProperties(); user.setId(UUID.randomUUID().toString()); - CosmosAsyncUser readBackUser = createdDatabase.createUser(user).block().getUser(); + CosmosUserResponse userResponse = createdDatabase.createUser(user).block(); + CosmosAsyncUser readBackUser = createdDatabase.getUser(userResponse.getProperties().getId()); // delete user - Mono deleteObservable = readBackUser.delete(); + Mono deleteObservable = readBackUser.delete(); // validate user delete - CosmosResponseValidator validator = new CosmosResponseValidator.Builder() + CosmosResponseValidator validator = new CosmosResponseValidator.Builder() .nullResource() .build(); validateSuccess(deleteObservable, validator); // attempt to read the user which was deleted - Mono readObservable = readBackUser.read(); + Mono readObservable = readBackUser.read(); FailureValidator notFoundValidator = new FailureValidator.Builder().resourceNotFound().build(); validateFailure(readObservable, notFoundValidator); } @@ -101,10 +102,10 @@ public void upsertUser() throws Exception { CosmosUserProperties user = new CosmosUserProperties(); user.setId(UUID.randomUUID().toString()); - Mono upsertObservable = createdDatabase.upsertUser(user); + Mono upsertObservable = createdDatabase.upsertUser(user); //validate user upsert - CosmosResponseValidator validatorForUpsert = new CosmosResponseValidator.Builder() + CosmosResponseValidator validatorForUpsert = new CosmosResponseValidator.Builder() .withId(user.getId()) .notNullEtag() .build(); @@ -122,10 +123,10 @@ public void replaceUser() throws Exception { CosmosUserProperties readBackUser = createdDatabase.createUser(user).block().getProperties(); // read getUser to validate creation - Mono readObservable = createdDatabase.getUser(user.getId()).read(); + Mono readObservable = createdDatabase.getUser(user.getId()).read(); //validate user read - CosmosResponseValidator validatorForRead = new CosmosResponseValidator.Builder() + CosmosResponseValidator validatorForRead = new CosmosResponseValidator.Builder() .withId(readBackUser.getId()) .notNullEtag() .build(); @@ -136,10 +137,10 @@ public void replaceUser() throws Exception { String oldId = readBackUser.getId(); readBackUser.setId(UUID.randomUUID().toString()); - Mono updateObservable = createdDatabase.getUser(oldId).replace(readBackUser); + Mono updateObservable = createdDatabase.getUser(oldId).replace(readBackUser); // validate user replace - CosmosResponseValidator validatorForUpdate = new CosmosResponseValidator.Builder() + CosmosResponseValidator validatorForUpdate = new CosmosResponseValidator.Builder() .withId(readBackUser.getId()) .notNullEtag() .build();