From 01c6cc6fecec00b06b62331c58b6ffbf109735cd Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 26 Aug 2022 16:02:55 +0200 Subject: [PATCH 01/21] Added createUser operation to replace setUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects_vsp/user/UserIT.java | 97 ++++++++++ src/main/java/com/pubnub/api/PubNub.java | 8 + .../endpoints/objects_vsp/UserEndpoint.java | 41 +++++ .../objects_vsp/user/CreateUser.java | 46 +++++ .../objects_vsp/user/CreateUserCommand.java | 113 ++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 3 + .../pubnub/api/managers/RetrofitManager.java | 4 + .../objects_vsp/user/CreateUserResult.java | 15 ++ .../consumer/objects_vsp/user/User.java | 31 ++++ .../server/objects_vsp/CreateUserPayload.java | 18 ++ .../pubnub/api/services/vsp/UserService.java | 17 ++ .../objects_api/BaseObjectApiTest.java | 7 +- .../objects_vsp/user/CreateUserTest.java | 169 ++++++++++++++++++ 13 files changed, 568 insertions(+), 1 deletion(-) create mode 100644 src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java create mode 100644 src/main/java/com/pubnub/api/services/vsp/UserService.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java new file mode 100644 index 000000000..49b5eba55 --- /dev/null +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -0,0 +1,97 @@ +package com.pubnub.api.integration.objects_vsp.user; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.integration.objects.ObjectsApiBaseIT; +import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.http.HttpStatus; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class UserIT extends ObjectsApiBaseIT { + private static final Logger LOG = LoggerFactory.getLogger(UUIDMetadataIT.class); + private static final int NUMBER_OF_RANDOM_TEST_UUIDS = 10; + public static final String STATUS_ACTIVE = "Active"; + public static final String TYPE_HUMAN = "Human"; + + private final String randomUserId = getRandomUserIdValue(); + private final String randomName = randomName(); + private final String randomEmail = randomEmail(); + private final String randomProfileUrl = randomProfileUrl(); + private final String randomExternalId = randomExternalId(); + + @Test + public void createUserHappyPath4() throws PubNubException { + //given + + //when + final CreateUserResult createUserResult = pubNubUnderTest.createUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //then + assertNotNull(createUserResult); + assertEquals(HttpStatus.SC_OK, createUserResult.getStatus()); +// assertEquals(randomUserId, createUserResult.getData().getId()); //no UserId in response for now. Asked Dara. + assertEquals(randomName, createUserResult.getData().getName()); + assertEquals(randomEmail, createUserResult.getData().getEmail()); + assertEquals(randomProfileUrl, createUserResult.getData().getProfileUrl()); + assertEquals(randomExternalId, createUserResult.getData().getExternalId()); + assertNotNull(createUserResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, createUserResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); + } + + private String getRandomUserIdValue() { + return "userId" + new Random().nextInt(1000); + } + + private static List randomTestUUIDs() { + final List uuids = new ArrayList<>(); + for (int i = 0; i < NUMBER_OF_RANDOM_TEST_UUIDS; i++) { + uuids.add(UUID.randomUUID().toString()); + } + return uuids; + } + + private String randomExternalId() { + return UUID.randomUUID().toString(); + } + + private String randomEmail() { + return RandomStringUtils.randomAlphabetic(6) + "@example.com"; + } + + private String randomName() { + return RandomStringUtils.randomAlphabetic(5, 10) + " " + RandomStringUtils.randomAlphabetic(5, 10); + } + + private String randomProfileUrl() { + return "http://" + RandomStringUtils.randomAlphabetic(5, 15) + ".com"; + } + + private Map customUUIDObject() { + return new HashMap() { + { + putIfAbsent("uuid_param1", "val1"); + putIfAbsent("uuid_param2", "val2"); + } + }; + } +} diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index cb23884aa..2ea672e6a 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -44,6 +44,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.GetUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; +import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.presence.GetState; import com.pubnub.api.endpoints.presence.HereNow; import com.pubnub.api.endpoints.presence.SetState; @@ -303,10 +304,17 @@ public DeleteChannelGroup deleteChannelGroup() { // Start Objects API + /** + * @deprecated Use {@link #createUser()} instead. + */ public SetUUIDMetadata setUUIDMetadata() { return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public CreateUser createUser(){ + return CreateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllUUIDMetadata getAllUUIDMetadata() { return GetAllUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java new file mode 100644 index 000000000..0426c26b8 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java @@ -0,0 +1,41 @@ +package com.pubnub.api.endpoints.objects_vsp; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; + +public abstract class UserEndpoint extends ObjectApiEndpoint { + private UserId userId; + + protected UserEndpoint( + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final CompositeParameterEnricher compositeParameterEnricher, + final TokenManager tokenManager) { + super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + @Override + protected void validateParams() throws PubNubException { + super.validateParams(); + } + + public SELF userId(final UserId userId) { + this.userId = userId; + return (SELF) this; + } + + protected UserId effectiveUserId() { //chyba nie może być tak bo jak w URL nie ma userId to nie powinno zadziałać chyba, że tak chcemy? + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java new file mode 100644 index 000000000..d4a6d1a78 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -0,0 +1,46 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class CreateUser extends UserEndpoint, CreateUserResult> implements CustomIncludeAware { + + CreateUser( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + + public static CreateUser create(final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new CreateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract CreateUser name(String name); + + public abstract CreateUser email(String email); + + public abstract CreateUser profileUrl(String profileUrl); + + public abstract CreateUser externalId(String externalId); + + public abstract CreateUser custom(Map custom); + + public abstract CreateUser status(String status); + + public abstract CreateUser type(String status); +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java new file mode 100644 index 000000000..514ac25e6 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -0,0 +1,113 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +final public class CreateUserCommand extends CreateUser implements HavingCustomInclude { + private String name; + private String email; + private String profileUrl; + private String externalId; + private Map custom; + private String status; + private String type; + + public CreateUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + + return getRetrofit().getUserService().createUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), createUserPayload, effectiveParams); + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + + @Override + public CreateUser name(String name) { + this.name = name; + return this; + } + + @Override + public CreateUser email(String email) { + this.email = email; + return this; + } + + @Override + public CreateUser profileUrl(String profileUrl) { + this.profileUrl = profileUrl; + return this; + } + + @Override + public CreateUser externalId(String externalId) { + this.externalId = externalId; + return this; + } + + @Override + public CreateUser custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public CreateUser status(String status) { + this.status = status; + return this; + } + + @Override + public CreateUser type(String type) { + this.type = type; + return this; + } + + @Override + protected CreateUserResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new CreateUserResult(input.body()); + } else { + return new CreateUserResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateUserOperation; + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index 11ed56e76..bb1ff023c 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -42,6 +42,9 @@ public enum PNOperationType { PNGetAllUuidMetadataOperation, PNRemoveUuidMetadataOperation, + // User - VSP + PNCreateUserOperation, + // Channel Metadata PNSetChannelMetadataOperation, PNGetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/RetrofitManager.java b/src/main/java/com/pubnub/api/managers/RetrofitManager.java index ed9dd1a43..a9b82786b 100644 --- a/src/main/java/com/pubnub/api/managers/RetrofitManager.java +++ b/src/main/java/com/pubnub/api/managers/RetrofitManager.java @@ -9,6 +9,7 @@ import com.pubnub.api.interceptors.SignatureInterceptor; import com.pubnub.api.models.consumer.PNStatus; import com.pubnub.api.services.*; +import com.pubnub.api.services.vsp.UserService; import lombok.Getter; import okhttp3.Dispatcher; import okhttp3.OkHttpClient; @@ -56,6 +57,8 @@ public class RetrofitManager { @Getter private UUIDMetadataService uuidMetadataService; @Getter + private UserService userService; + @Getter private ChannelMetadataService channelMetadataService; @Getter private MessageActionService messageActionService; @@ -154,6 +157,7 @@ public void run() { this.s3Service = noSignatureInstance.create(S3Service.class); this.extendedPresenceService = transactionInstance.create(ExtendedPresenceService.class); + this.userService = transactionInstance.create(UserService.class); } private OkHttpClient.Builder prepareOkHttpClient(int requestTimeout, int connectTimeOut) { diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java new file mode 100644 index 000000000..21f7747c3 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java @@ -0,0 +1,15 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.*; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public class CreateUserResult extends EntityEnvelope { + public CreateUserResult(final EntityEnvelope entityEnvelope) { + this.status = entityEnvelope.getStatus(); + this.data = entityEnvelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java new file mode 100644 index 000000000..8b64005ba --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java @@ -0,0 +1,31 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.consumer.objects_api.PNObject; +import lombok.*; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@NoArgsConstructor +public class User extends PNObject { + private String name; + private String email; + private String externalId; + private String profileUrl; + private String status; + private String type; + + public User(String id, String name) { + super(id); + this.name = name; + } + + @Override + public User setCustom(Object custom) { + super.setCustom(custom); + return this; + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java new file mode 100644 index 000000000..d22be0443 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java @@ -0,0 +1,18 @@ +package com.pubnub.api.models.server.objects_vsp; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@AllArgsConstructor +public class CreateUserPayload { + private final String name; + private final String email; + private final String externalId; + private final String profileUrl; + private final Object custom; + private final String status; + private final String type; +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java new file mode 100644 index 000000000..7ac772065 --- /dev/null +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -0,0 +1,17 @@ +package com.pubnub.api.services.vsp; + +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; +import retrofit2.Call; +import retrofit2.http.*; + +import java.util.Map; + +public interface UserService { + + @POST("/v3/objects/{subKey}/users/{userId}") + @Headers("Content-Type: application/json; charset=UTF-8") + Call> createUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body CreateUserPayload createUserPayload, @QueryMap(encoded = true) Map options); + +} diff --git a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java index 480554cac..f049b95a4 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java @@ -2,8 +2,11 @@ import com.pubnub.api.PNConfiguration; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; +import org.apache.commons.lang3.RandomStringUtils; import org.jetbrains.annotations.NotNull; import org.junit.Before; import org.junit.runner.RunWith; @@ -24,6 +27,7 @@ public abstract class BaseObjectApiTest { private static final String TEST_PUBNUB_VERSION = "123"; protected final String testSubscriptionKey = UUID.randomUUID().toString(); protected final String testUUID = UUID.randomUUID().toString(); + protected final String testUserIdValue = RandomStringUtils.randomAlphabetic(20); @Mock private PNConfiguration configurationMock; @@ -41,9 +45,10 @@ protected static Answer> mockRetrofitSuccessfulCall(final Supplier> call; + + + @Before + public void setUp() throws IOException { + objectUnderTest = CreateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + + when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); + when(userServiceMock.createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenAnswer(blockInvocation -> Response.success(new CreateUserResult())); + } + + @Test + public void can_createUser_with_userId() throws PubNubException { + //given + + //when + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + } + + @Test + public void can_createUser_with_name() throws PubNubException { + //given + final String userName = RandomStringUtils.randomAlphabetic(20); + + //when + objectUnderTest.name(userName).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(userName, capturedCreateUserPayload.getName()); + } + + @Test + public void can_createUser_with_email() throws PubNubException { + //given + final String testEmail = RandomStringUtils.randomAlphabetic(10) + "@example.com"; + + //when + objectUnderTest.email(testEmail).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(testEmail, capturedCreateUserPayload.getEmail()); + } + + @Test + public void can_createUser_with_externalId() throws PubNubException { + //given + String testExternalId = RandomStringUtils.randomAlphabetic(20); + + //when + objectUnderTest.externalId(testExternalId).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(testExternalId, capturedCreateUserPayload.getExternalId()); + } + + @Test + public void can_createUser_with_profileUrl() throws PubNubException { + //given + final String profileUrl = "http://" + RandomStringUtils.randomAlphabetic(5) + ".example.com"; + + //when + objectUnderTest.profileUrl(profileUrl).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(profileUrl, capturedCreateUserPayload.getProfileUrl()); + } + + @Test + public void can_createUser_with_custom() throws PubNubException { + //given + final Map testCustom = new HashMap<>(); + testCustom.put("key1", RandomStringUtils.random(10)); + testCustom.put("key2", RandomStringUtils.random(10)); + + //when + objectUnderTest.custom(testCustom).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(testCustom, capturedCreateUserPayload.getCustom()); + } + + @Test + public void can_createUser_with_status() throws PubNubException { + //given + final String testStatus = "active_" + RandomStringUtils.randomAlphabetic(5); + + //when + objectUnderTest.status(testStatus).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(testStatus, capturedCreateUserPayload.getStatus()); + } + + @Test + public void can_createUser_with_type() throws PubNubException { + //given + final String testType = "type" + RandomStringUtils.randomAlphabetic(5); + + //when + objectUnderTest.type(testType).sync(); + + //then + ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + + final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + assertEquals(testType, capturedCreateUserPayload.getType()); + } +} From 97d8187dd77fa73ac5086e0bc52e3eb36b6d92da Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 29 Aug 2022 10:58:48 +0200 Subject: [PATCH 02/21] Added removeUser operation to replace removeUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects_vsp/user/UserIT.java | 29 ++++++++++- src/main/java/com/pubnub/api/PubNub.java | 7 ++- .../objects_vsp/user/CreateUserCommand.java | 2 +- .../objects_vsp/user/RemoveUser.java | 43 +++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 2 + .../objects_vsp/user/RemoveUserResult.java | 15 ++++++ .../pubnub/api/services/vsp/UserService.java | 3 ++ .../objects_vsp/user/CreateUserTest.java | 2 +- .../objects_vsp/user/RemoveUserTest.java | 52 +++++++++++++++++++ 10 files changed, 152 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 49b5eba55..32035173b 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -5,6 +5,7 @@ import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.Test; @@ -29,7 +30,7 @@ public class UserIT extends ObjectsApiBaseIT { private final String randomExternalId = randomExternalId(); @Test - public void createUserHappyPath4() throws PubNubException { + public void createUserHappyPath() throws PubNubException { //given //when @@ -58,6 +59,32 @@ public void createUserHappyPath4() throws PubNubException { assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); } + @Test + public void removeUserHappyPath() throws PubNubException { + final CreateUserResult createUserResult = pubNubUnderTest.createUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + + RemoveUserResult removeUserResult = pubNubUnderTest.removeUser() + .userId(new UserId(randomUserId)) + .sync(); + + //then + assertNotNull(removeUserResult); + assertEquals(HttpStatus.SC_OK, removeUserResult.getStatus()); + //ToDo get user and check if not found. Waiting for get user + + } + private String getRandomUserIdValue() { return "userId" + new Random().nextInt(1000); } diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 2ea672e6a..fa3cbcf15 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -45,6 +45,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; +import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; import com.pubnub.api.endpoints.presence.GetState; import com.pubnub.api.endpoints.presence.HereNow; import com.pubnub.api.endpoints.presence.SetState; @@ -311,7 +312,7 @@ public SetUUIDMetadata setUUIDMetadata() { return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public CreateUser createUser(){ + public CreateUser createUser() { return CreateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @@ -330,6 +331,10 @@ public RemoveUUIDMetadata removeUUIDMetadata() { return new RemoveUUIDMetadata(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public RemoveUser removeUser() { + return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + }; + public SetChannelMetadata.Builder setChannelMetadata() { return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 514ac25e6..19a852d5f 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -18,7 +18,7 @@ import java.util.HashMap; import java.util.Map; -final public class CreateUserCommand extends CreateUser implements HavingCustomInclude { +public final class CreateUserCommand extends CreateUser implements HavingCustomInclude { private String name; private String email; private String profileUrl; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java new file mode 100644 index 000000000..a9d843255 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -0,0 +1,43 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.google.gson.JsonElement; +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Collections; +import java.util.Map; + +public class RemoveUser extends UserEndpoint, RemoveUserResult> { //dlaczego tu jest EntityEnvelope + + public RemoveUser(PubNub pubnubInstance, + TelemetryManager telemetry, + RetrofitManager retrofitInstance, + TokenManager tokenManager) { + super(pubnubInstance, telemetry, retrofitInstance, CompositeParameterEnricher.createDefault(), tokenManager); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit().getUserService().removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); + } + + @Override + protected RemoveUserResult createResponse(Response> input) throws PubNubException { + return new RemoveUserResult(input.body()); + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNRemoveUserOperation; + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index bb1ff023c..7c119a2e7 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -44,6 +44,7 @@ public enum PNOperationType { // User - VSP PNCreateUserOperation, + PNRemoveUserOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index cfeb50964..55c17504a 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -181,6 +181,8 @@ private static String endpointNameForOperation(PNOperationType type) { case PNGetChannelMembersOperation: case PNRemoveChannelMembersOperation: case PNManageChannelMembersOperation: + case PNCreateUserOperation: + case PNRemoveUserOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java new file mode 100644 index 000000000..cb3839407 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java @@ -0,0 +1,15 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.google.gson.JsonElement; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.*; + +@Getter +@Setter(AccessLevel.PACKAGE) +@ToString(callSuper = true) +@NoArgsConstructor +public class RemoveUserResult extends EntityEnvelope { + public RemoveUserResult(final EntityEnvelope envelope) { + this.status = envelope.getStatus(); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index 7ac772065..d9f1bd542 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -1,5 +1,6 @@ package com.pubnub.api.services.vsp; +import com.google.gson.JsonElement; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; @@ -14,4 +15,6 @@ public interface UserService { @Headers("Content-Type: application/json; charset=UTF-8") Call> createUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body CreateUserPayload createUserPayload, @QueryMap(encoded = true) Map options); + @DELETE("/v3/objects/{subKey}/users/{userId}") + Call> removeUser(@Path("subKey") String subKey, @Path("userId") String userId, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index a17c946d7..348145e87 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -38,7 +38,7 @@ public void setUp() throws IOException { when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenAnswer(blockInvocation -> Response.success(new CreateUserResult())); + when(call.execute()).thenAnswer(invocationOnMock -> Response.success(new CreateUserResult())); } @Test diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java new file mode 100644 index 000000000..4ca490363 --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java @@ -0,0 +1,52 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.google.gson.JsonElement; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.services.vsp.UserService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.io.IOException; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +public class RemoveUserTest extends BaseObjectApiTest { + private RemoveUser objectUnderTest; + + @Mock + private UserService userServiceMock; + + @Mock + private Call> call; + + + @Before + public void setUp() throws Exception { + objectUnderTest = new RemoveUser(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); + when(userServiceMock.removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); + when(call.execute()).thenAnswer(invocationOnMock -> Response.success(new RemoveUserResult())); + } + + @Test + public void can_remove_user() throws PubNubException, IOException { + //given + + //when + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + + //then + verify(userServiceMock, times(1)).removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); + + } +} From 54ad64dd80d33081c97bdab8ce1b01bd4c43454b Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 29 Aug 2022 13:52:43 +0200 Subject: [PATCH 03/21] Added fetchUser operation to replace getUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects_vsp/user/UserIT.java | 34 +++++++++++ src/main/java/com/pubnub/api/PubNub.java | 12 ++++ .../endpoints/objects_vsp/user/FetchUser.java | 34 +++++++++++ .../objects_vsp/user/FetchUserCommand.java | 56 +++++++++++++++++++ .../objects_vsp/user/RemoveUser.java | 6 +- .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/user/FetchUserResult.java | 15 +++++ .../pubnub/api/services/vsp/UserService.java | 3 + .../objects_vsp/user/CreateUserTest.java | 2 +- .../objects_vsp/user/FetchUserTest.java | 45 +++++++++++++++ .../objects_vsp/user/RemoveUserTest.java | 2 +- 12 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 32035173b..817701356 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -5,6 +5,7 @@ import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; @@ -59,6 +60,39 @@ public void createUserHappyPath() throws PubNubException { assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); } + @Test + public void fetchUserHappyPath() throws PubNubException { + //given + final CreateUserResult createUserResult = pubNubUnderTest.createUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + FetchUserResult fetchUserResult = pubNubUnderTest.fetchUser() + .userId(new UserId(randomUserId)) + .includeCustom(true) + .sync(); + + assertNotNull(fetchUserResult); + assertEquals(HttpStatus.SC_OK, fetchUserResult.getStatus()); +// assertEquals(randomUserId, createUserResult.getData().getId()); //no UserId in response for now. Asked Dara. + assertEquals(randomName, createUserResult.getData().getName()); + assertEquals(randomEmail, createUserResult.getData().getEmail()); + assertEquals(randomProfileUrl, createUserResult.getData().getProfileUrl()); + assertEquals(randomExternalId, createUserResult.getData().getExternalId()); + assertNotNull(createUserResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, createUserResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); + } + @Test public void removeUserHappyPath() throws PubNubException { final CreateUserResult createUserResult = pubNubUnderTest.createUser() diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index fa3cbcf15..ff9f1d34a 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -45,6 +45,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; +import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; import com.pubnub.api.endpoints.presence.GetState; import com.pubnub.api.endpoints.presence.HereNow; @@ -321,11 +322,22 @@ public GetAllUUIDMetadata getAllUUIDMetadata() { return GetAllUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + /** + * @deprecated Use {@link #removeUser()} instead. + */ @NotNull public GetUUIDMetadata getUUIDMetadata() { return GetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull + public FetchUser fetchUser() { + return FetchUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + + /** + * @deprecated Use {@link #removeUser()} instead. + */ @NotNull public RemoveUUIDMetadata removeUUIDMetadata() { return new RemoveUUIDMetadata(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java new file mode 100644 index 000000000..d610ad02c --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -0,0 +1,34 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +public abstract class FetchUser extends UserEndpoint, FetchUserResult> implements CustomIncludeAware { + + FetchUser( + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static FetchUser create(final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new FetchUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + + } + +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java new file mode 100644 index 000000000..f30d5fe63 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -0,0 +1,56 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +public final class FetchUserCommand extends FetchUser implements HavingCustomInclude { + + public FetchUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getUserService() + .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); + } + + @Override + protected FetchUserResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new FetchUserResult(input.body()); + } else { + return new FetchUserResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchUserOperation; + } + + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index a9d843255..2afa250c4 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -17,7 +17,7 @@ import java.util.Collections; import java.util.Map; -public class RemoveUser extends UserEndpoint, RemoveUserResult> { //dlaczego tu jest EntityEnvelope +public class RemoveUser extends UserEndpoint, RemoveUserResult> { public RemoveUser(PubNub pubnubInstance, TelemetryManager telemetry, @@ -28,7 +28,9 @@ public RemoveUser(PubNub pubnubInstance, @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit().getUserService().removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); + return getRetrofit(). + getUserService(). + removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); } @Override diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index 7c119a2e7..473cd984a 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -44,6 +44,7 @@ public enum PNOperationType { // User - VSP PNCreateUserOperation, + PNFetchUserOperation, PNRemoveUserOperation, // Channel Metadata diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index 55c17504a..ac14a1497 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -183,6 +183,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNManageChannelMembersOperation: case PNCreateUserOperation: case PNRemoveUserOperation: + case PNFetchUserOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java new file mode 100644 index 000000000..b3b95ad57 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java @@ -0,0 +1,15 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.*; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public class FetchUserResult extends EntityEnvelope { + public FetchUserResult(final EntityEnvelope envelope) { + this.status = envelope.getStatus(); + this.data = envelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index d9f1bd542..597ebbb3d 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -15,6 +15,9 @@ public interface UserService { @Headers("Content-Type: application/json; charset=UTF-8") Call> createUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body CreateUserPayload createUserPayload, @QueryMap(encoded = true) Map options); + @GET("/v3/objects/{subKey}/users/{userId}") + Call> fetchUser(@Path("subKey") String subKey, @Path("userId") String userId, @QueryMap(encoded = true) Map options); + @DELETE("/v3/objects/{subKey}/users/{userId}") Call> removeUser(@Path("subKey") String subKey, @Path("userId") String userId, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index 348145e87..40f24c1e1 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -38,7 +38,7 @@ public void setUp() throws IOException { when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenAnswer(invocationOnMock -> Response.success(new CreateUserResult())); + when(call.execute()).thenReturn(Response.success(new CreateUserResult())); } @Test diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java new file mode 100644 index 000000000..a179dabfe --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java @@ -0,0 +1,45 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.services.vsp.UserService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +public class FetchUserTest extends BaseObjectApiTest { + private FetchUser objectUnderTest; + + @Mock + private UserService userServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = FetchUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); + when(userServiceMock.fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new FetchUserResult())); + } + + @Test + public void can_fetch_user() throws PubNubException { + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + + verify(userServiceMock, times(1)).fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); + + } +} \ No newline at end of file diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java index 4ca490363..56096321f 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java @@ -35,7 +35,7 @@ public void setUp() throws Exception { objectUnderTest = new RemoveUser(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); - when(call.execute()).thenAnswer(invocationOnMock -> Response.success(new RemoveUserResult())); + when(call.execute()).thenReturn(Response.success(new RemoveUserResult())); } @Test From 8bbdb291fe4921d9676a5579ca6086cd2446b7cd Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Wed, 31 Aug 2022 13:54:48 +0200 Subject: [PATCH 04/21] Added updateUser operation to replace setUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects_vsp/user/UserIT.java | 139 ++++++++++++++++-- src/main/java/com/pubnub/api/PubNub.java | 5 + .../objects_vsp/user/CreateUser.java | 7 +- .../objects_vsp/user/CreateUserCommand.java | 5 +- .../objects_vsp/user/UpdateUser.java | 50 +++++++ .../objects_vsp/user/UpdateUserCommand.java | 116 +++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/user/UpdateUserResult.java | 15 ++ .../server/objects_vsp/UpdateUserPayload.java | 7 + .../server/objects_vsp/UserPayload.java | 18 +++ .../pubnub/api/services/vsp/UserService.java | 4 + .../objects_api/BaseObjectApiTest.java | 3 +- .../objects_vsp/user/CreateUserTest.java | 3 +- .../objects_vsp/user/UpdateUserTest.java | 123 ++++++++++++++++ 15 files changed, 476 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 817701356..cf5979210 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -1,12 +1,15 @@ package com.pubnub.api.integration.objects_vsp.user; +import com.google.gson.JsonObject; import com.pubnub.api.PubNubException; import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.Test; @@ -15,8 +18,7 @@ import java.util.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; public class UserIT extends ObjectsApiBaseIT { private static final Logger LOG = LoggerFactory.getLogger(UUIDMetadataIT.class); @@ -83,19 +85,21 @@ public void fetchUserHappyPath() throws PubNubException { assertNotNull(fetchUserResult); assertEquals(HttpStatus.SC_OK, fetchUserResult.getStatus()); -// assertEquals(randomUserId, createUserResult.getData().getId()); //no UserId in response for now. Asked Dara. - assertEquals(randomName, createUserResult.getData().getName()); - assertEquals(randomEmail, createUserResult.getData().getEmail()); - assertEquals(randomProfileUrl, createUserResult.getData().getProfileUrl()); - assertEquals(randomExternalId, createUserResult.getData().getExternalId()); - assertNotNull(createUserResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, createUserResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); + assertEquals(randomUserId, fetchUserResult.getData().getId()); + assertEquals(randomName, fetchUserResult.getData().getName()); + assertEquals(randomEmail, fetchUserResult.getData().getEmail()); + assertEquals(randomProfileUrl, fetchUserResult.getData().getProfileUrl()); + assertEquals(randomExternalId, fetchUserResult.getData().getExternalId()); + assertNotNull(fetchUserResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, fetchUserResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, fetchUserResult.getData().getType()); } + @Test public void removeUserHappyPath() throws PubNubException { - final CreateUserResult createUserResult = pubNubUnderTest.createUser() + // given + pubNubUnderTest.createUser() .userId(new UserId(randomUserId)) .name(randomName) .email(randomEmail) @@ -107,7 +111,7 @@ public void removeUserHappyPath() throws PubNubException { .type(TYPE_HUMAN) .sync(); - + //when RemoveUserResult removeUserResult = pubNubUnderTest.removeUser() .userId(new UserId(randomUserId)) .sync(); @@ -115,8 +119,102 @@ public void removeUserHappyPath() throws PubNubException { //then assertNotNull(removeUserResult); assertEquals(HttpStatus.SC_OK, removeUserResult.getStatus()); - //ToDo get user and check if not found. Waiting for get user + //verify if user not exist + FetchUser fetchUser = pubNubUnderTest.fetchUser() + .userId(new UserId(randomUserId)) + .includeCustom(true); + + PubNubException exception = assertThrows(PubNubException.class, () -> { + fetchUser.sync(); + }); + + assertTrue(exception.getMessage().contains("Requested resource not found")); + } + + //Currently it doesn't work because REST returns data="". API tester return in major cases data having values :| + @Test + public void updateUser_passing_full_object_happyPath() throws PubNubException { + // given + String updatedName = "updatedName" + randomName(); + String updatedEmail = "updatedEmail" + randomEmail(); + String updatedProfileUrl = "updatedProfileUrl" + randomProfileUrl(); + String updatedExternalId = "updatedExternalId" + randomExternalId(); + Map updateCustom = updatedCustomUUIDObject(); + String updatedStatus = "updatedStatus" + STATUS_ACTIVE; + String updatedType = "updatedType" + TYPE_HUMAN; + + pubNubUnderTest.createUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + // when + UpdateUserResult updateUserResult = pubNubUnderTest.updateUser() + .userId(new UserId(randomUserId)) + .name(updatedName) + .email(updatedEmail) + .profileUrl(updatedProfileUrl) + .externalId(updatedExternalId) + .custom(updateCustom) + .includeCustom(true) + .status(updatedStatus) + .type(updatedType) + .sync(); + + // then + assertNotNull(updateUserResult); + assertEquals(HttpStatus.SC_OK, updateUserResult.getStatus()); + assertEquals(randomUserId, updateUserResult.getData().getId()); + assertEquals(updatedName, updateUserResult.getData().getName()); + assertEquals(updatedEmail, updateUserResult.getData().getEmail()); + assertEquals(updatedProfileUrl, updateUserResult.getData().getProfileUrl()); + assertEquals(updatedExternalId, updateUserResult.getData().getExternalId()); + assertEquals("\"val1_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param2").toString()); + assertEquals("\"added\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param3").toString()); + assertEquals(updatedStatus, updateUserResult.getData().getStatus()); + assertEquals(updatedType, updateUserResult.getData().getType()); + + FetchUserResult fetchUserResult = pubNubUnderTest.fetchUser() + .userId(new UserId(randomUserId)) + .includeCustom(true) + .sync(); + + assertNotNull(fetchUserResult); + assertEquals(HttpStatus.SC_OK, fetchUserResult.getStatus()); + assertEquals(randomUserId, fetchUserResult.getData().getId()); + assertEquals(updatedName, fetchUserResult.getData().getName()); + assertEquals(updatedEmail, fetchUserResult.getData().getEmail()); + assertEquals(updatedProfileUrl, fetchUserResult.getData().getProfileUrl()); + assertEquals(updatedExternalId, fetchUserResult.getData().getExternalId()); + assertNotNull(fetchUserResult.getData().getCustom()); + assertEquals(updatedStatus, fetchUserResult.getData().getStatus()); + assertEquals(updatedType, fetchUserResult.getData().getType()); + } + + @Test + public void updateUser_passing_only_field_to_be_updated_happyPath() throws PubNubException { + // given + String updatedName = "updatedName" + randomName(); + + // when + UpdateUserResult updateUserResult = pubNubUnderTest.updateUser() + .userId(new UserId(randomUserId)) + .name(updatedName) + .sync(); + + //then + assertEquals(HttpStatus.SC_OK, updateUserResult.getStatus()); + assertEquals(randomUserId, updateUserResult.getData().getId()); + assertEquals(updatedName, updateUserResult.getData().getName()); } private String getRandomUserIdValue() { @@ -150,9 +248,20 @@ private String randomProfileUrl() { private Map customUUIDObject() { return new HashMap() { { - putIfAbsent("uuid_param1", "val1"); - putIfAbsent("uuid_param2", "val2"); + putIfAbsent("user_param1", "val1"); + putIfAbsent("user_param2", "val2"); } }; } + + private Map updatedCustomUUIDObject() { + return new HashMap() { + { + putIfAbsent("user_param1", "val1_updated"); + putIfAbsent("user_param2", "val2_updated"); + putIfAbsent("user_param3", "added"); + } + }; + } + } diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index ff9f1d34a..8c5b34b00 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -47,6 +47,7 @@ import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; +import com.pubnub.api.endpoints.objects_vsp.user.UpdateUser; import com.pubnub.api.endpoints.presence.GetState; import com.pubnub.api.endpoints.presence.HereNow; import com.pubnub.api.endpoints.presence.SetState; @@ -351,6 +352,10 @@ public SetChannelMetadata.Builder setChannelMetadata() { return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public UpdateUser updateUser(){ + return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllChannelsMetadata getAllChannelsMetadata() { return GetAllChannelsMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index d4a6d1a78..d49d39d8f 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -24,8 +24,11 @@ public abstract class CreateUser extends UserEndpoint> executeCommand(Map effectiv final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - return getRetrofit().getUserService().createUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), createUserPayload, effectiveParams); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java new file mode 100644 index 000000000..29fd7d44d --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -0,0 +1,50 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.google.gson.JsonElement; +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityArrayEnvelope; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class UpdateUser extends UserEndpoint, UpdateUserResult> implements CustomIncludeAware { + UpdateUser( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final CompositeParameterEnricher compositeParameterEnricher, + final TokenManager tokenManager) { + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); + } + + public static UpdateUser create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new UpdateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract UpdateUser name(String name); + + public abstract UpdateUser email(String email); + + public abstract UpdateUser profileUrl(String profileUrl); + + public abstract UpdateUser externalId(String externalId); + + public abstract UpdateUser custom(Map custom); + + public abstract UpdateUser status(String status); + + public abstract UpdateUser type(String status); +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java new file mode 100644 index 000000000..217120683 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -0,0 +1,116 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +public class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { + private String name; + private String email; + private String profileUrl; + private String externalId; + private Map custom; + private String status; + private String type; + + public UpdateUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); + + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpdateUserPayload updateUserPayload = new UpdateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); + } + + @Override + public UpdateUser name(String name) { + this.name = name; + return this; + } + + @Override + public UpdateUser email(String email) { + this.email = email; + return this; + } + + @Override + public UpdateUser profileUrl(String profileUrl) { + this.profileUrl = profileUrl; + return this; + } + + @Override + public UpdateUser externalId(String externalId) { + this.externalId = externalId; + return this; + } + + @Override + public UpdateUser custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public UpdateUser status(String status) { + this.status = status; + return this; + } + + @Override + public UpdateUser type(String type) { + this.type = type; + return this; + } + + @Override + protected UpdateUserResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new UpdateUserResult(input.body()); + } else { + return new UpdateUserResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateUserOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index 473cd984a..e2004d18c 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -46,6 +46,7 @@ public enum PNOperationType { PNCreateUserOperation, PNFetchUserOperation, PNRemoveUserOperation, + PNUpdateUserOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index ac14a1497..c2d73b0f6 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -184,6 +184,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNCreateUserOperation: case PNRemoveUserOperation: case PNFetchUserOperation: + case PNUpdateUserOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java new file mode 100644 index 000000000..6d55dafff --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java @@ -0,0 +1,15 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.*; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public class UpdateUserResult extends EntityEnvelope { + public UpdateUserResult(final EntityEnvelope envelope) { + this.status = envelope.getStatus(); + this.data = envelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java new file mode 100644 index 000000000..a088c1ade --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java @@ -0,0 +1,7 @@ +package com.pubnub.api.models.server.objects_vsp; + +public class UpdateUserPayload extends UserPayload { + public UpdateUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { + super(name, email, externalId, profileUrl, custom, status, type); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java new file mode 100644 index 000000000..9288669bb --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java @@ -0,0 +1,18 @@ +package com.pubnub.api.models.server.objects_vsp; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@AllArgsConstructor +public abstract class UserPayload { + private final String name; + private final String email; + private final String externalId; + private final String profileUrl; + private final Object custom; + private final String status; + private final String type; +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index 597ebbb3d..cd3b55764 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -4,6 +4,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; +import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; import retrofit2.Call; import retrofit2.http.*; @@ -20,4 +21,7 @@ public interface UserService { @DELETE("/v3/objects/{subKey}/users/{userId}") Call> removeUser(@Path("subKey") String subKey, @Path("userId") String userId, @QueryMap(encoded = true) Map options); + + @PATCH("/v3/objects/{subKey}/users/{userId}") + Call> updateUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body UpdateUserPayload updateUserPayload, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java index f049b95a4..45a8e7300 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.lenient; @RunWith(MockitoJUnitRunner.class) public abstract class BaseObjectApiTest { @@ -48,7 +49,7 @@ protected static Answer> mockRetrofitSuccessfulCall(final Supplier createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); - verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any()); } @Test diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java new file mode 100644 index 000000000..c4896207e --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java @@ -0,0 +1,123 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; +import com.pubnub.api.services.vsp.UserService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +public class UpdateUserTest extends BaseObjectApiTest { + private UpdateUser objectUnderTest; + + @Mock + private UserService userServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = UpdateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); + when(userServiceMock.updateUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new UpdateUserResult())); + } + + @Test + public void can_update_user_passing_full_object() throws PubNubException { + //given + String updatedName = "updatedName"; + String updatedEmail = "updatedEmail"; + String updatedProfileUrl = "updatedProfileUrl"; + String updatedExternalId = "updatedExternalId"; + Map updatedCustom = new HashMap<>(); + updatedCustom.putIfAbsent("user_param1", "val1"); + updatedCustom.putIfAbsent("user_param2", "val2"); + String updatedStatus = "updatedStatus"; + String updatedType = "updatedType"; + + + //when + objectUnderTest + .userId(new UserId(testUserIdValue)) + .name(updatedName) + .email(updatedEmail) + .profileUrl(updatedProfileUrl) + .externalId(updatedExternalId) + .custom(updatedCustom) + .includeCustom(false) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + ArgumentCaptor updateUserPayloadCaptor = ArgumentCaptor.forClass(UpdateUserPayload.class); + verify(userServiceMock, times(1)).updateUser(eq(testSubscriptionKey), eq(testUserIdValue), updateUserPayloadCaptor.capture(), any()); + + UpdateUserPayload captorValue = updateUserPayloadCaptor.getValue(); + assertEquals(updatedName, captorValue.getName()); + assertEquals(updatedEmail, captorValue.getEmail()); + assertEquals(updatedProfileUrl, captorValue.getProfileUrl()); + assertEquals(updatedExternalId, captorValue.getExternalId()); + assertEquals(updatedCustom, captorValue.getCustom()); + assertEquals(updatedStatus, captorValue.getStatus()); + assertEquals(updatedType, captorValue.getType()); + } + + + @Test + public void can_update_user_with_new_name() throws PubNubException { + //given + String updatedName = "updatedName"; + + //when + objectUnderTest + .userId(new UserId(testUserIdValue)) + .name(updatedName) + .sync(); + + //then + ArgumentCaptor updateUserPayloadCaptor = ArgumentCaptor.forClass(UpdateUserPayload.class); + verify(userServiceMock, times(1)).updateUser(eq(testSubscriptionKey), eq(testUserIdValue), updateUserPayloadCaptor.capture(), any()); + + UpdateUserPayload captorValue = updateUserPayloadCaptor.getValue(); + assertEquals(updatedName, captorValue.getName()); + } + + @Test + public void can_update_user_with_new_email() throws PubNubException { + //given + String updatedEmail = "updatedEmail"; + + //when + objectUnderTest + .userId(new UserId(testUserIdValue)) + .email(updatedEmail) + .sync(); + + //then + ArgumentCaptor updateUserPayloadCaptor = ArgumentCaptor.forClass(UpdateUserPayload.class); + verify(userServiceMock).updateUser(eq(testSubscriptionKey), eq(testUserIdValue), updateUserPayloadCaptor.capture(), any()); + + UpdateUserPayload captorValue = updateUserPayloadCaptor.getValue(); + assertEquals(updatedEmail, captorValue.getEmail()); + } +} \ No newline at end of file From eaddbf3d55062b13685f90b7d9a3f55e6652fa69 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Thu, 1 Sep 2022 10:09:45 +0200 Subject: [PATCH 05/21] Added upsertUser operation to replace setUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects_vsp/user/UserIT.java | 98 ++++++++++++++- src/main/java/com/pubnub/api/PubNub.java | 12 +- .../objects_vsp/user/CreateUser.java | 2 +- .../objects_vsp/user/UpdateUser.java | 4 +- .../objects_vsp/user/UpsertUser.java | 48 ++++++++ .../objects_vsp/user/UpsertUserCommand.java | 112 ++++++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/user/CreateUserResult.java | 13 +- .../objects_vsp/user/FetchUserResult.java | 12 +- .../objects_vsp/user/UpdateUserResult.java | 10 +- .../objects_vsp/user/UpsertUserResult.java | 11 ++ .../consumer/objects_vsp/user/UserResult.java | 19 +++ .../server/objects_vsp/CreateUserPayload.java | 16 +-- .../server/objects_vsp/UpsertUserPayload.java | 7 ++ .../pubnub/api/services/vsp/UserService.java | 4 + .../objects_vsp/user/CreateUserTest.java | 6 +- .../objects_vsp/user/FetchUserTest.java | 1 - .../objects_vsp/user/UpsertUserTest.java | 81 +++++++++++++ 19 files changed, 408 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index cf5979210..20eecb772 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -10,8 +10,10 @@ import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; +import org.junit.After; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +54,7 @@ public void createUserHappyPath() throws PubNubException { //then assertNotNull(createUserResult); assertEquals(HttpStatus.SC_OK, createUserResult.getStatus()); -// assertEquals(randomUserId, createUserResult.getData().getId()); //no UserId in response for now. Asked Dara. + assertEquals(randomUserId, createUserResult.getData().getId()); assertEquals(randomName, createUserResult.getData().getName()); assertEquals(randomEmail, createUserResult.getData().getEmail()); assertEquals(randomProfileUrl, createUserResult.getData().getProfileUrl()); @@ -125,14 +127,11 @@ public void removeUserHappyPath() throws PubNubException { .userId(new UserId(randomUserId)) .includeCustom(true); - PubNubException exception = assertThrows(PubNubException.class, () -> { - fetchUser.sync(); - }); + PubNubException exception = assertThrows(PubNubException.class, () -> fetchUser.sync()); assertTrue(exception.getMessage().contains("Requested resource not found")); } - //Currently it doesn't work because REST returns data="". API tester return in major cases data having values :| @Test public void updateUser_passing_full_object_happyPath() throws PubNubException { // given @@ -217,8 +216,95 @@ public void updateUser_passing_only_field_to_be_updated_happyPath() throws PubNu assertEquals(updatedName, updateUserResult.getData().getName()); } + @Test + public void upsertUserHappyPath_newUserCreated() throws PubNubException { + //given + + //when + UpsertUserResult upsertUserResult = pubNubUnderTest.upsertUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //then + assertNotNull(upsertUserResult); + assertEquals(HttpStatus.SC_OK, upsertUserResult.getStatus()); + assertEquals(randomUserId, upsertUserResult.getData().getId()); + assertEquals(randomName, upsertUserResult.getData().getName()); + assertEquals(randomEmail, upsertUserResult.getData().getEmail()); + assertEquals(randomProfileUrl, upsertUserResult.getData().getProfileUrl()); + assertEquals(randomExternalId, upsertUserResult.getData().getExternalId()); + assertNotNull(upsertUserResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, upsertUserResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, upsertUserResult.getData().getType()); + + } + + @Test + public void upsertUserHappyPath_currentUserUpdated() throws PubNubException { + //given + String updatedName = "updatedName" + randomName(); + String updatedEmail = "updatedEmail" + randomEmail(); + String updatedProfileUrl = "updatedProfileUrl" + randomProfileUrl(); + String updatedExternalId = "updatedExternalId" + randomExternalId(); + Map updateCustom = updatedCustomUUIDObject(); + String updatedStatus = "updatedStatus" + STATUS_ACTIVE; + String updatedType = "updatedType" + TYPE_HUMAN; + + pubNubUnderTest.createUser() + .userId(new UserId(randomUserId)) + .name(randomName) + .email(randomEmail) + .profileUrl(randomProfileUrl) + .externalId(randomExternalId) + .custom(customUUIDObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + UpsertUserResult upsertUserResult = pubNubUnderTest.upsertUser() + .userId(new UserId(randomUserId)) + .name(updatedName) + .email(updatedEmail) + .profileUrl(updatedProfileUrl) + .externalId(updatedExternalId) + .custom(updateCustom) + .includeCustom(true) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + assertNotNull(upsertUserResult); + assertEquals(HttpStatus.SC_OK, upsertUserResult.getStatus()); + assertEquals(randomUserId, upsertUserResult.getData().getId()); + assertEquals(updatedName, upsertUserResult.getData().getName()); + assertEquals(updatedEmail, upsertUserResult.getData().getEmail()); + assertEquals(updatedProfileUrl, upsertUserResult.getData().getProfileUrl()); + assertEquals(updatedExternalId, upsertUserResult.getData().getExternalId()); + assertEquals("\"val1_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param2").toString()); + assertEquals("\"added\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param3").toString()); + assertEquals(updatedStatus, upsertUserResult.getData().getStatus()); + assertEquals(updatedType, upsertUserResult.getData().getType()); + } + + @After + public void tearDown() throws Exception { + pubNubUnderTest.removeUser().userId(new UserId(randomUserId)).sync(); + } + private String getRandomUserIdValue() { - return "userId" + new Random().nextInt(1000); + return "userId" + new Random().nextInt(100000); } private static List randomTestUUIDs() { diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 8c5b34b00..7de857a58 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -48,6 +48,7 @@ import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; import com.pubnub.api.endpoints.objects_vsp.user.UpdateUser; +import com.pubnub.api.endpoints.objects_vsp.user.UpsertUser; import com.pubnub.api.endpoints.presence.GetState; import com.pubnub.api.endpoints.presence.HereNow; import com.pubnub.api.endpoints.presence.SetState; @@ -346,16 +347,23 @@ public RemoveUUIDMetadata removeUUIDMetadata() { public RemoveUser removeUser() { return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); - }; + } + /** + * @deprecated Use {@link #updateUser()} or {@link #upsertUser()} instead. + */ public SetChannelMetadata.Builder setChannelMetadata() { return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpdateUser updateUser(){ + public UpdateUser updateUser() { return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public UpsertUser upsertUser() { + return UpsertUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllChannelsMetadata getAllChannelsMetadata() { return GetAllChannelsMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index d49d39d8f..caaead33d 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -45,5 +45,5 @@ public static CreateUser create( public abstract CreateUser status(String status); - public abstract CreateUser type(String status); + public abstract CreateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index 29fd7d44d..61ca4eabf 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,6 +1,5 @@ package com.pubnub.api.endpoints.objects_vsp.user; -import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; @@ -10,7 +9,6 @@ import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityArrayEnvelope; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; @@ -46,5 +44,5 @@ public static UpdateUser create( public abstract UpdateUser status(String status); - public abstract UpdateUser type(String status); + public abstract UpdateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java new file mode 100644 index 000000000..b8c0aec1c --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -0,0 +1,48 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class UpsertUser extends UserEndpoint, UpsertUserResult> implements CustomIncludeAware { + UpsertUser( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static UpsertUser create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new UpsertUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract UpsertUser name(String name); + + public abstract UpsertUser email(String email); + + public abstract UpsertUser profileUrl(String profileUrl); + + public abstract UpsertUser externalId(String externalId); + + public abstract UpsertUser custom(Map custom); + + public abstract UpsertUser status(String status); + + public abstract UpsertUser type(String type); +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java new file mode 100644 index 000000000..7f517bf3e --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -0,0 +1,112 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +public class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { + private String name; + private String email; + private String profileUrl; + private String externalId; + private Map custom; + private String status; + private String type; + + public UpsertUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); + } + + @Override + public UpsertUser name(String name) { + this.name = name; + return this; + } + + @Override + public UpsertUser email(String email) { + this.email = email; + return this; + } + + @Override + public UpsertUser profileUrl(String profileUrl) { + this.profileUrl = profileUrl; + return this; + } + + @Override + public UpsertUser externalId(String externalId) { + this.externalId = externalId; + return this; + } + + @Override + public UpsertUser custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public UpsertUser status(String status) { + this.status = status; + return this; + } + + @Override + public UpsertUser type(String type) { + this.type = type; + return this; + } + + @Override + protected UpsertUserResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new UpsertUserResult(input.body()); + } else { + return new UpsertUserResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertUserOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index e2004d18c..b30183f4f 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -47,6 +47,7 @@ public enum PNOperationType { PNFetchUserOperation, PNRemoveUserOperation, PNUpdateUserOperation, + PNUpsertUserOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index c2d73b0f6..4856618ab 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -185,6 +185,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNRemoveUserOperation: case PNFetchUserOperation: case PNUpdateUserOperation: + case PNUpsertUserOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java index 21f7747c3..b0239debe 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java @@ -1,15 +1,12 @@ package com.pubnub.api.models.consumer.objects_vsp.user; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.*; +import lombok.NoArgsConstructor; -@Getter -@Setter(AccessLevel.PACKAGE) @NoArgsConstructor -@ToString(callSuper = true) -public class CreateUserResult extends EntityEnvelope { - public CreateUserResult(final EntityEnvelope entityEnvelope) { - this.status = entityEnvelope.getStatus(); - this.data = entityEnvelope.getData(); +public class CreateUserResult extends UserResult { + public CreateUserResult(EntityEnvelope entityEnvelope) { + super(entityEnvelope); } } + diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java index b3b95ad57..780c308d0 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java @@ -1,15 +1,11 @@ package com.pubnub.api.models.consumer.objects_vsp.user; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.*; +import lombok.NoArgsConstructor; -@Getter -@Setter(AccessLevel.PACKAGE) @NoArgsConstructor -@ToString(callSuper = true) -public class FetchUserResult extends EntityEnvelope { - public FetchUserResult(final EntityEnvelope envelope) { - this.status = envelope.getStatus(); - this.data = envelope.getData(); +public class FetchUserResult extends UserResult { + public FetchUserResult(EntityEnvelope entityEnvelope) { + super(entityEnvelope); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java index 6d55dafff..ae6970e46 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java @@ -3,13 +3,9 @@ import com.pubnub.api.models.server.objects_api.EntityEnvelope; import lombok.*; -@Getter -@Setter(AccessLevel.PACKAGE) @NoArgsConstructor -@ToString(callSuper = true) -public class UpdateUserResult extends EntityEnvelope { - public UpdateUserResult(final EntityEnvelope envelope) { - this.status = envelope.getStatus(); - this.data = envelope.getData(); +public class UpdateUserResult extends UserResult { + public UpdateUserResult(EntityEnvelope entityEnvelope) { + super(entityEnvelope); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java new file mode 100644 index 000000000..abd047aec --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java @@ -0,0 +1,11 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class UpsertUserResult extends UserResult { + public UpsertUserResult(EntityEnvelope entityEnvelope) { + super(entityEnvelope); + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java new file mode 100644 index 000000000..be6f3f2d6 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java @@ -0,0 +1,19 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public abstract class UserResult extends EntityEnvelope { + public UserResult(final EntityEnvelope entityEnvelope) { + this.status = entityEnvelope.getStatus(); + this.data = entityEnvelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java index d22be0443..76855a6a2 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java @@ -4,15 +4,9 @@ import lombok.Getter; import lombok.ToString; -@Getter -@ToString -@AllArgsConstructor -public class CreateUserPayload { - private final String name; - private final String email; - private final String externalId; - private final String profileUrl; - private final Object custom; - private final String status; - private final String type; + +public class CreateUserPayload extends UserPayload { + public CreateUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { + super(name, email, externalId, profileUrl, custom, status, type); + } } diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java new file mode 100644 index 000000000..5551eb22d --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java @@ -0,0 +1,7 @@ +package com.pubnub.api.models.server.objects_vsp; + +public class UpsertUserPayload extends UserPayload{ + public UpsertUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { + super(name, email, externalId, profileUrl, custom, status, type); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index cd3b55764..830d38728 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -5,6 +5,7 @@ import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; +import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; import retrofit2.Call; import retrofit2.http.*; @@ -24,4 +25,7 @@ public interface UserService { @PATCH("/v3/objects/{subKey}/users/{userId}") Call> updateUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body UpdateUserPayload updateUserPayload, @QueryMap(encoded = true) Map options); + + @PUT("/v3/objects/{subKey}/users/{userId}") + Call> upsertUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body UpsertUserPayload upsertUserPayload, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index ba093ecb5..7fd7f1186 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -61,10 +61,10 @@ public void can_createUser_with_name() throws PubNubException { objectUnderTest.name(userName).sync(); //then - ArgumentCaptor createUserPayloadArgumentCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); - verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadArgumentCaptor.capture(), any()); + ArgumentCaptor createUserPayloadCaptor = ArgumentCaptor.forClass(CreateUserPayload.class); + verify(userServiceMock).createUser(eq(testSubscriptionKey), eq(testUserIdValue), createUserPayloadCaptor.capture(), any()); - final CreateUserPayload capturedCreateUserPayload = createUserPayloadArgumentCaptor.getValue(); + final CreateUserPayload capturedCreateUserPayload = createUserPayloadCaptor.getValue(); assertEquals(userName, capturedCreateUserPayload.getName()); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java index a179dabfe..d18ec6ba3 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java @@ -40,6 +40,5 @@ public void can_fetch_user() throws PubNubException { objectUnderTest.userId(new UserId(testUserIdValue)).sync(); verify(userServiceMock, times(1)).fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); - } } \ No newline at end of file diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java new file mode 100644 index 000000000..7f23db40e --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java @@ -0,0 +1,81 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; +import com.pubnub.api.services.vsp.UserService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class UpsertUserTest extends BaseObjectApiTest { + private UpsertUser objectUnderTest; + + @Mock + private UserService userServiceMock; + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = UpsertUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + + when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); + when(userServiceMock.upsertUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new UpdateUserResult())); + } + + @Test + public void can_upsertUser() throws PubNubException { + String updatedName = "updatedName"; + String updatedEmail = "updatedEmail"; + String updatedProfileUrl = "updatedProfileUrl"; + String updatedExternalId = "updatedExternalId"; + Map updatedCustom = new HashMap<>(); + updatedCustom.putIfAbsent("user_param1", "val1"); + updatedCustom.putIfAbsent("user_param2", "val2"); + String updatedStatus = "updatedStatus"; + String updatedType = "updatedType"; + + objectUnderTest + .userId(new UserId(testUserIdValue)) + .name(updatedName) + .email(updatedEmail) + .profileUrl(updatedProfileUrl) + .externalId(updatedExternalId) + .custom(updatedCustom) + .includeCustom(false) + .status(updatedStatus) + .type(updatedType) + .sync(); + + ArgumentCaptor upsertUserPayloadCaptor = ArgumentCaptor.forClass(UpsertUserPayload.class); + verify(userServiceMock).upsertUser(eq(testSubscriptionKey), eq(testUserIdValue), upsertUserPayloadCaptor.capture(), any()); + + UpsertUserPayload captorValue = upsertUserPayloadCaptor.getValue(); + assertEquals(updatedName, captorValue.getName()); + assertEquals(updatedEmail, captorValue.getEmail()); + assertEquals(updatedProfileUrl, captorValue.getProfileUrl()); + assertEquals(updatedExternalId, captorValue.getExternalId()); + assertEquals(updatedCustom, captorValue.getCustom()); + assertEquals(updatedStatus, captorValue.getStatus()); + assertEquals(updatedType, captorValue.getType()); + } +} \ No newline at end of file From 80173e7fa17c5b1c176c6f558c66c9714f1414e2 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Thu, 1 Sep 2022 12:20:53 +0200 Subject: [PATCH 06/21] Added upsertUser operation to replace setUUIDMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../api/models/server/objects_vsp/CreateUserPayload.java | 5 ----- .../api/models/server/objects_vsp/UpsertUserPayload.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java index 76855a6a2..10c0c566c 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java @@ -1,10 +1,5 @@ package com.pubnub.api.models.server.objects_vsp; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; - - public class CreateUserPayload extends UserPayload { public CreateUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { super(name, email, externalId, profileUrl, custom, status, type); diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java index 5551eb22d..e02f6dafa 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java @@ -1,6 +1,6 @@ package com.pubnub.api.models.server.objects_vsp; -public class UpsertUserPayload extends UserPayload{ +public class UpsertUserPayload extends UserPayload { public UpsertUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { super(name, email, externalId, profileUrl, custom, status, type); } From 447a47cf97f366eeba71a12f0bed29f2c36d2e74 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 2 Sep 2022 13:37:57 +0200 Subject: [PATCH 07/21] Added createSpace operation to replace setChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects/ObjectsApiBaseIT.java | 33 +++++++ .../objects/uuid/UUIDMetadataIT.java | 4 - .../objects_vsp/space/SpaceIT.java | 56 +++++++++++ .../integration/objects_vsp/user/UserIT.java | 54 ++++------- src/main/java/com/pubnub/api/PubNub.java | 25 +++-- .../endpoints/objects_vsp/SpaceEndpoint.java | 38 ++++++++ .../endpoints/objects_vsp/UserEndpoint.java | 2 +- .../objects_vsp/space/CreateSpace.java | 46 +++++++++ .../objects_vsp/space/CreateSpaceCommand.java | 94 +++++++++++++++++++ .../objects_vsp/user/CreateUserCommand.java | 2 +- .../objects_vsp/user/UpdateUserCommand.java | 2 +- .../objects_vsp/user/UpsertUserCommand.java | 2 +- .../com/pubnub/api/enums/PNOperationType.java | 3 + .../pubnub/api/managers/RetrofitManager.java | 4 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../consumer/objects_vsp/space/Space.java | 36 +++++++ .../objects_vsp/user/CreateSpaceResult.java | 20 ++++ .../objects_vsp/space/CreateSpacePayload.java | 16 ++++ .../{ => user}/CreateUserPayload.java | 2 +- .../{ => user}/UpdateUserPayload.java | 2 +- .../{ => user}/UpsertUserPayload.java | 2 +- .../objects_vsp/{ => user}/UserPayload.java | 2 +- .../pubnub/api/services/vsp/SpaceService.java | 20 ++++ .../pubnub/api/services/vsp/UserService.java | 6 +- .../objects_vsp/space/CreateSpaceTest.java | 81 ++++++++++++++++ .../objects_vsp/user/CreateUserTest.java | 2 +- .../objects_vsp/user/UpdateUserTest.java | 2 +- .../objects_vsp/user/UpsertUserTest.java | 2 +- 28 files changed, 495 insertions(+), 64 deletions(-) create mode 100644 src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java rename src/main/java/com/pubnub/api/models/server/objects_vsp/{ => user}/CreateUserPayload.java (83%) rename src/main/java/com/pubnub/api/models/server/objects_vsp/{ => user}/UpdateUserPayload.java (83%) rename src/main/java/com/pubnub/api/models/server/objects_vsp/{ => user}/UpsertUserPayload.java (83%) rename src/main/java/com/pubnub/api/models/server/objects_vsp/{ => user}/UserPayload.java (87%) create mode 100644 src/main/java/com/pubnub/api/services/vsp/SpaceService.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java index bce7df75d..28593c3e2 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java @@ -6,8 +6,12 @@ import com.pubnub.api.enums.PNLogVerbosity; import com.pubnub.api.integration.util.ITTestConfig; import org.aeonbits.owner.ConfigFactory; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.Before; +import java.util.HashMap; +import java.util.Map; + import static org.hamcrest.Matchers.isEmptyOrNullString; import static org.hamcrest.Matchers.not; import static org.junit.Assume.assumeThat; @@ -15,6 +19,8 @@ public abstract class ObjectsApiBaseIT { //See README.md in integrationTest directory for more info on running integration tests private ITTestConfig itTestConfig = ConfigFactory.create(ITTestConfig.class, System.getenv()); + public static final String STATUS_ACTIVE = "Active"; + public static final String TYPE_HUMAN = "Human"; protected final PubNub pubNubUnderTest = pubNub(); @@ -35,4 +41,31 @@ private PubNub pubNub() { public void assumeTestsAreConfiguredProperly() { assumeThat("Subscription key must be set in test.properties", itTestConfig.subscribeKey(), not(isEmptyOrNullString())); } + + protected String randomName() { + return RandomStringUtils.randomAlphabetic(5, 10) + " " + RandomStringUtils.randomAlphabetic(5, 10); + } + + protected Map customUserObject() { + return getCustomObject(); + } + + protected Map customSpaceObject() { + return getCustomObject(); + } + + private Map getCustomObject(){ + final Map customMap = new HashMap<>(); + customMap.putIfAbsent("user_param1", "val1"); + customMap.putIfAbsent("user_param2", "val2"); + return customMap; + } + + protected Map updatedCustomUserObject() { + final Map customMap = new HashMap<>(); + customMap.putIfAbsent("user_param1", "val1_updated"); + customMap.putIfAbsent("user_param2", "val2_updated"); + customMap.putIfAbsent("user_param3", "added"); + return customMap; + } } diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects/uuid/UUIDMetadataIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects/uuid/UUIDMetadataIT.java index 56eb5b4ba..953bf9bc2 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects/uuid/UUIDMetadataIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects/uuid/UUIDMetadataIT.java @@ -194,10 +194,6 @@ private String randomEmail() { return RandomStringUtils.randomAlphabetic(6) + "@example.com"; } - private String randomName() { - return RandomStringUtils.randomAlphabetic(5, 10) + " " + RandomStringUtils.randomAlphabetic(5, 10); - } - private String randomProfileUrl() { return "http://" + RandomStringUtils.randomAlphabetic(5, 15) + ".com"; } diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java new file mode 100644 index 000000000..dce27bee7 --- /dev/null +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -0,0 +1,56 @@ +package com.pubnub.api.integration.objects_vsp.space; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.integration.objects.ObjectsApiBaseIT; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.http.HttpStatus; +import org.junit.Test; + +import java.util.Random; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class SpaceIT extends ObjectsApiBaseIT { + + private final String randomSpaceId = getRandomSpaceIdValue(); + private final String randomName = randomName(); + private final String randomDescription = randomDescription(); + + @Test + public void createUserHappyPath() throws PubNubException { + //given + + //when + CreateSpaceResult createSpaceResult = pubNubUnderTest.createSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //then + assertNotNull(createSpaceResult); + assertEquals(HttpStatus.SC_OK, createSpaceResult.getStatus()); + assertEquals(randomSpaceId, createSpaceResult.getData().getId()); + assertEquals(randomName, createSpaceResult.getData().getName()); + assertEquals(randomDescription, createSpaceResult.getData().getDescription()); + assertNotNull(createSpaceResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, createSpaceResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, createSpaceResult.getData().getType()); + } + + + private String getRandomSpaceIdValue() { + return "spaceId" + new Random().nextInt(100000); + } + + private static String randomDescription() { + return RandomStringUtils.randomAlphabetic(50, 160); + } +} diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 20eecb772..5a7b5aacd 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -18,15 +18,21 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; public class UserIT extends ObjectsApiBaseIT { private static final Logger LOG = LoggerFactory.getLogger(UUIDMetadataIT.class); private static final int NUMBER_OF_RANDOM_TEST_UUIDS = 10; - public static final String STATUS_ACTIVE = "Active"; - public static final String TYPE_HUMAN = "Human"; + private final String randomUserId = getRandomUserIdValue(); private final String randomName = randomName(); @@ -45,7 +51,7 @@ public void createUserHappyPath() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -73,7 +79,7 @@ public void fetchUserHappyPath() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -107,7 +113,7 @@ public void removeUserHappyPath() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -139,7 +145,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { String updatedEmail = "updatedEmail" + randomEmail(); String updatedProfileUrl = "updatedProfileUrl" + randomProfileUrl(); String updatedExternalId = "updatedExternalId" + randomExternalId(); - Map updateCustom = updatedCustomUUIDObject(); + Map updateCustom = updatedCustomUserObject(); String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; @@ -149,7 +155,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -227,7 +233,7 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -254,7 +260,7 @@ public void upsertUserHappyPath_currentUserUpdated() throws PubNubException { String updatedEmail = "updatedEmail" + randomEmail(); String updatedProfileUrl = "updatedProfileUrl" + randomProfileUrl(); String updatedExternalId = "updatedExternalId" + randomExternalId(); - Map updateCustom = updatedCustomUUIDObject(); + Map updateCustom = updatedCustomUserObject(); String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; @@ -264,7 +270,7 @@ public void upsertUserHappyPath_currentUserUpdated() throws PubNubException { .email(randomEmail) .profileUrl(randomProfileUrl) .externalId(randomExternalId) - .custom(customUUIDObject()) + .custom(customUserObject()) .includeCustom(true) .status(STATUS_ACTIVE) .type(TYPE_HUMAN) @@ -323,31 +329,7 @@ private String randomEmail() { return RandomStringUtils.randomAlphabetic(6) + "@example.com"; } - private String randomName() { - return RandomStringUtils.randomAlphabetic(5, 10) + " " + RandomStringUtils.randomAlphabetic(5, 10); - } - private String randomProfileUrl() { return "http://" + RandomStringUtils.randomAlphabetic(5, 15) + ".com"; } - - private Map customUUIDObject() { - return new HashMap() { - { - putIfAbsent("user_param1", "val1"); - putIfAbsent("user_param2", "val2"); - } - }; - } - - private Map updatedCustomUUIDObject() { - return new HashMap() { - { - putIfAbsent("user_param1", "val1_updated"); - putIfAbsent("user_param2", "val2_updated"); - putIfAbsent("user_param3", "added"); - } - }; - } - } diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 7de857a58..19c41242a 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -44,6 +44,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.GetUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; +import com.pubnub.api.endpoints.objects_vsp.space.CreateSpace; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; @@ -309,7 +310,7 @@ public DeleteChannelGroup deleteChannelGroup() { // Start Objects API /** - * @deprecated Use {@link #createUser()} instead. + * @deprecated Use {@link #createUser()} or {@link #updateUser()} or {@link #upsertUser()} instead. */ public SetUUIDMetadata setUUIDMetadata() { return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); @@ -319,6 +320,14 @@ public CreateUser createUser() { return CreateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public UpdateUser updateUser() { + return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + + public UpsertUser upsertUser() { + return UpsertUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllUUIDMetadata getAllUUIDMetadata() { return GetAllUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); @@ -349,19 +358,15 @@ public RemoveUser removeUser() { return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - /** - * @deprecated Use {@link #updateUser()} or {@link #upsertUser()} instead. - */ +// /** +// * @deprecated Use {@link #createSpace()} or {@link #updateSpace()} or {@link #upsertSpace()} instead. +// */ public SetChannelMetadata.Builder setChannelMetadata() { return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpdateUser updateUser() { - return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); - } - - public UpsertUser upsertUser() { - return UpsertUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public CreateSpace createSpace() { + return CreateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @NotNull diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java new file mode 100644 index 000000000..7767ea377 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java @@ -0,0 +1,38 @@ +package com.pubnub.api.endpoints.objects_vsp; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; + +public abstract class SpaceEndpoint extends ObjectApiEndpoint { + protected SpaceId spaceId; + + protected SpaceEndpoint( + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final CompositeParameterEnricher compositeParameterEnricher, + final TokenManager tokenManager) { + super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + @Override + protected void validateParams() throws PubNubException { + super.validateParams(); + } + + public SELF spaceId(final SpaceId spaceId){ + this.spaceId = spaceId; + return (SELF) this; + } + + protected SpaceId getSpaceId(){ + return spaceId; + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java index 0426c26b8..e31ff686a 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java @@ -31,7 +31,7 @@ public SELF userId(final UserId userId) { return (SELF) this; } - protected UserId effectiveUserId() { //chyba nie może być tak bo jak w URL nie ma userId to nie powinno zadziałać chyba, że tak chcemy? + protected UserId effectiveUserId() { try { return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); } catch (PubNubException e) { diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java new file mode 100644 index 000000000..5adba7a26 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -0,0 +1,46 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class CreateSpace extends SpaceEndpoint, CreateSpaceResult> implements CustomIncludeAware { + public CreateSpace( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static CreateSpace create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new CreateSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract CreateSpace name(String name); + + public abstract CreateSpace description(String description); + + public abstract CreateSpace custom(Map custom); + + public abstract CreateSpace status(String status); + + public abstract CreateSpace type(String type); + + +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java new file mode 100644 index 000000000..bf5048c5f --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -0,0 +1,94 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +public final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { + private String name; + private String description; + private Map custom; + private String status; + private String type; + + + public CreateSpaceCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + public CreateSpace name(String name) { + this.name = name; + return this; + } + + @Override + public CreateSpace description(String description) { + this.description = description; + return this; + } + + @Override + public CreateSpace custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public CreateSpace status(String status) { + this.status = status; + return this; + } + + @Override + public CreateSpace type(String type) { + this.type = type; + return this; + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, custom, status, type); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + + return getRetrofit().getSpaceService().createSpace(subscribeKey, getSpaceId().getValue(), createSpacePayload, effectiveParams); + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + @Override + protected CreateSpaceResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new CreateSpaceResult(input.body()); + } else { + return new CreateSpaceResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateSpaceOperation; + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 6cfa1004e..1e617257a 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -11,7 +11,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; import retrofit2.Call; import retrofit2.Response; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java index 217120683..69b379b95 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -11,7 +11,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; import retrofit2.Call; import retrofit2.Response; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java index 7f517bf3e..5a5a4c391 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -11,7 +11,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; import retrofit2.Call; import retrofit2.Response; diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index b30183f4f..b193d5060 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -49,6 +49,9 @@ public enum PNOperationType { PNUpdateUserOperation, PNUpsertUserOperation, + // Space - VSP + PNCreateSpaceOperation, + // Channel Metadata PNSetChannelMetadataOperation, PNGetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/RetrofitManager.java b/src/main/java/com/pubnub/api/managers/RetrofitManager.java index a9b82786b..050b639ca 100644 --- a/src/main/java/com/pubnub/api/managers/RetrofitManager.java +++ b/src/main/java/com/pubnub/api/managers/RetrofitManager.java @@ -9,6 +9,7 @@ import com.pubnub.api.interceptors.SignatureInterceptor; import com.pubnub.api.models.consumer.PNStatus; import com.pubnub.api.services.*; +import com.pubnub.api.services.vsp.SpaceService; import com.pubnub.api.services.vsp.UserService; import lombok.Getter; import okhttp3.Dispatcher; @@ -59,6 +60,8 @@ public class RetrofitManager { @Getter private UserService userService; @Getter + private SpaceService spaceService; + @Getter private ChannelMetadataService channelMetadataService; @Getter private MessageActionService messageActionService; @@ -158,6 +161,7 @@ public void run() { this.extendedPresenceService = transactionInstance.create(ExtendedPresenceService.class); this.userService = transactionInstance.create(UserService.class); + this.spaceService = transactionInstance.create(SpaceService.class); } private OkHttpClient.Builder prepareOkHttpClient(int requestTimeout, int connectTimeOut) { diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index 4856618ab..f1a062345 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -186,6 +186,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNFetchUserOperation: case PNUpdateUserOperation: case PNUpsertUserOperation: + case PNCreateSpaceOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java new file mode 100644 index 000000000..5174872b8 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java @@ -0,0 +1,36 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.pubnub.api.models.consumer.objects_api.PNObject; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +@Getter +@Setter +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class Space extends PNObject { + private String name; + private String description; + private String status; + private String type; + + public Space(String id, String name, String description){ + super(id); + this.name = name; + this.description = description; + } + + public Space(String id, String name){ + this(id, name, null); + } + + @Override + public PNObject setCustom(Object custom) { + super.setCustom(custom); + return this; + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java new file mode 100644 index 000000000..5a0bdade8 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java @@ -0,0 +1,20 @@ +package com.pubnub.api.models.consumer.objects_vsp.user; + +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public class CreateSpaceResult extends EntityEnvelope { + public CreateSpaceResult(final EntityEnvelope entityEnvelope){ + this.status = entityEnvelope.getStatus(); + this.data = entityEnvelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java new file mode 100644 index 000000000..1fb27964e --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java @@ -0,0 +1,16 @@ +package com.pubnub.api.models.server.objects_vsp.space; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@AllArgsConstructor +public class CreateSpacePayload { + private final String name; + private final String description; + private final Object custom; + private final String status; + private final String type; +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/CreateUserPayload.java similarity index 83% rename from src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java rename to src/main/java/com/pubnub/api/models/server/objects_vsp/user/CreateUserPayload.java index 10c0c566c..2a8c20950 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/CreateUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/CreateUserPayload.java @@ -1,4 +1,4 @@ -package com.pubnub.api.models.server.objects_vsp; +package com.pubnub.api.models.server.objects_vsp.user; public class CreateUserPayload extends UserPayload { public CreateUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpdateUserPayload.java similarity index 83% rename from src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java rename to src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpdateUserPayload.java index a088c1ade..d28a96ddb 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpdateUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpdateUserPayload.java @@ -1,4 +1,4 @@ -package com.pubnub.api.models.server.objects_vsp; +package com.pubnub.api.models.server.objects_vsp.user; public class UpdateUserPayload extends UserPayload { public UpdateUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpsertUserPayload.java similarity index 83% rename from src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java rename to src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpsertUserPayload.java index e02f6dafa..a0131d04e 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/UpsertUserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UpsertUserPayload.java @@ -1,4 +1,4 @@ -package com.pubnub.api.models.server.objects_vsp; +package com.pubnub.api.models.server.objects_vsp.user; public class UpsertUserPayload extends UserPayload { public UpsertUserPayload(String name, String email, String externalId, String profileUrl, Object custom, String status, String type) { diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java similarity index 87% rename from src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java rename to src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java index 9288669bb..dd5beca08 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/UserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java @@ -1,4 +1,4 @@ -package com.pubnub.api.models.server.objects_vsp; +package com.pubnub.api.models.server.objects_vsp.user; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java new file mode 100644 index 000000000..b37970059 --- /dev/null +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -0,0 +1,20 @@ +package com.pubnub.api.services.vsp; + +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.Headers; +import retrofit2.http.POST; +import retrofit2.http.Path; +import retrofit2.http.QueryMap; + +import java.util.Map; + +public interface SpaceService { + + @POST("/v3/objects/{subKey}/spaces/{spaceId}") + @Headers("Content-Type: application/json; charset=UTF-8") + Call> createSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body CreateSpacePayload createSpacePayload, @QueryMap(encoded = true) Map options); +} diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index 830d38728..242aaa08b 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -3,9 +3,9 @@ import com.google.gson.JsonElement; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; -import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; -import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; import retrofit2.Call; import retrofit2.http.*; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java new file mode 100644 index 000000000..cc624311d --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java @@ -0,0 +1,81 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import com.pubnub.api.services.vsp.SpaceService; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class CreateSpaceTest extends BaseObjectApiTest { + private CreateSpace objectUnderTest; + private final String testSpaceIdValue = RandomStringUtils.randomAlphabetic(20); + + @Mock + private SpaceService spaceServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = CreateSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + + when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); + when(spaceServiceMock.createSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + } + + @Test + public void can_createSpace() throws PubNubException { + //given + final String spaceName = RandomStringUtils.randomAlphabetic(20); + final String spaceDescription = "Space description" + RandomStringUtils.randomAlphabetic(5); + final Map testCustom = new HashMap<>(); + testCustom.put("key1", RandomStringUtils.random(10)); + testCustom.put("key2", RandomStringUtils.random(10)); + final String testStatus = "active_" + RandomStringUtils.randomAlphabetic(5); + final String testType = "type" + RandomStringUtils.randomAlphabetic(5); + + + //when + objectUnderTest + .spaceId(new SpaceId(testSpaceIdValue)) + .name(spaceName) + .description(spaceDescription) + .custom(testCustom) + .status(testStatus) + .type(testType) + .sync(); + + //then + ArgumentCaptor createSpacePayloadCaptor = ArgumentCaptor.forClass(CreateSpacePayload.class); + verify(spaceServiceMock).createSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), createSpacePayloadCaptor.capture(), any()); + + CreateSpacePayload captorValue = createSpacePayloadCaptor.getValue(); + assertEquals(spaceName, captorValue.getName()); + assertEquals(spaceDescription, captorValue.getDescription()); + assertEquals(testCustom, captorValue.getCustom()); + assertEquals(testStatus, captorValue.getStatus()); + assertEquals(testType, captorValue.getType()); + } +} diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index 7fd7f1186..e2cb3e0ae 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -7,7 +7,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.CreateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; import com.pubnub.api.services.vsp.UserService; import org.apache.commons.lang3.RandomStringUtils; import org.junit.Before; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java index c4896207e..91bd67f19 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java @@ -7,7 +7,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.UpdateUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; import com.pubnub.api.services.vsp.UserService; import org.junit.Before; import org.junit.Test; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java index 7f23db40e..c00df93db 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java @@ -7,7 +7,7 @@ import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.UpsertUserPayload; +import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; import com.pubnub.api.services.vsp.UserService; import org.junit.Before; import org.junit.Test; From 606f36491a601c49c581f67be24a811ed3bde895 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 2 Sep 2022 15:32:35 +0200 Subject: [PATCH 08/21] Added removeSpace operation to replace removeChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../objects_vsp/space/SpaceIT.java | 30 ++++++++++- src/main/java/com/pubnub/api/PubNub.java | 8 +++ .../objects_vsp/space/CreateSpace.java | 3 +- .../objects_vsp/space/CreateSpaceCommand.java | 3 +- .../objects_vsp/space/RemoveSpace.java | 47 +++++++++++++++++ .../objects_vsp/user/RemoveUser.java | 6 +-- .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../{user => space}/CreateSpaceResult.java | 3 +- .../objects_vsp/space/RemoveSpaceResult.java | 21 ++++++++ .../objects_vsp/user/RemoveUserResult.java | 6 ++- .../pubnub/api/services/vsp/SpaceService.java | 5 ++ .../objects_vsp/space/CreateSpaceTest.java | 2 +- .../objects_vsp/space/RemoveSpaceTest.java | 52 +++++++++++++++++++ 14 files changed, 176 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java rename src/main/java/com/pubnub/api/models/consumer/objects_vsp/{user => space}/CreateSpaceResult.java (81%) create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index dce27bee7..67887117b 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -3,9 +3,11 @@ import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; +import org.junit.After; import org.junit.Test; import java.util.Random; @@ -45,6 +47,32 @@ public void createUserHappyPath() throws PubNubException { assertEquals(TYPE_HUMAN, createSpaceResult.getData().getType()); } + @Test + public void removeSpaceHappyPath() throws PubNubException { + //given + CreateSpaceResult createSpaceResult = pubNubUnderTest.createSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + RemoveSpaceResult removeSpaceResult = pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); + + //then + assertEquals(HttpStatus.SC_OK, removeSpaceResult.getStatus()); + + + } + + @After + public void tearDown() throws Exception { + pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); + } private String getRandomSpaceIdValue() { return "spaceId" + new Random().nextInt(100000); diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 19c41242a..b6e67a195 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -45,6 +45,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; import com.pubnub.api.endpoints.objects_vsp.space.CreateSpace; +import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; @@ -379,10 +380,17 @@ public GetChannelMetadata.Builder getChannelMetadata() { return GetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + /** + * @deprecated Use {@link #removeSpace()} instead. + */ public RemoveChannelMetadata.Builder removeChannelMetadata() { return RemoveChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public RemoveSpace removeSpace() { + return new RemoveSpace(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetMemberships getMemberships() { return GetMemberships.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java index 5adba7a26..ca762da65 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -8,7 +8,7 @@ import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; @@ -42,5 +42,4 @@ public static CreateSpace create( public abstract CreateSpace type(String type); - } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java index bf5048c5f..464da6b15 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -4,13 +4,12 @@ import com.pubnub.api.PubNubException; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; import retrofit2.Call; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java new file mode 100644 index 000000000..b8bea4258 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java @@ -0,0 +1,47 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.google.gson.JsonElement; +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Collections; +import java.util.Map; + +public class RemoveSpace extends SpaceEndpoint, RemoveSpaceResult> { + + public RemoveSpace( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager) { + super(pubNub, telemetry, retrofitInstance, CompositeParameterEnricher.createDefault(), tokenManager); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getSpaceService() + .removeSpace(getPubnub().getConfiguration().getSubscribeKey(), getSpaceId().getValue(), Collections.emptyMap()); + } + + @Override + protected RemoveSpaceResult createResponse(Response> input) throws PubNubException { + return new RemoveSpaceResult(input.body()); + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNRemoveUserOperation; + } + +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index 2afa250c4..29a7fcad9 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -28,9 +28,9 @@ public RemoveUser(PubNub pubnubInstance, @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit(). - getUserService(). - removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); + return getRetrofit() + .getUserService() + .removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); } @Override diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index b193d5060..cdaaca390 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -51,6 +51,7 @@ public enum PNOperationType { // Space - VSP PNCreateSpaceOperation, + PNRemoveSpaceOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index f1a062345..32d2c7ca9 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -187,6 +187,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNUpdateUserOperation: case PNUpsertUserOperation: case PNCreateSpaceOperation: + case PNRemoveSpaceOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java similarity index 81% rename from src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java rename to src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java index 5a0bdade8..9c357b878 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java @@ -1,6 +1,5 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; +package com.pubnub.api.models.consumer.objects_vsp.space; -import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java new file mode 100644 index 000000000..3b1a3eadd --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java @@ -0,0 +1,21 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.google.gson.JsonElement; +import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public class RemoveSpaceResult extends EntityEnvelope { + public RemoveSpaceResult(final EntityEnvelope entityEnvelope){ + this.status = entityEnvelope.getStatus(); + this.data = entityEnvelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java index cb3839407..2f40ab2c3 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/RemoveUserResult.java @@ -2,7 +2,11 @@ import com.google.gson.JsonElement; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; @Getter @Setter(AccessLevel.PACKAGE) diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index b37970059..a26c50b5c 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -1,10 +1,12 @@ package com.pubnub.api.services.vsp; +import com.google.gson.JsonElement; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.DELETE; import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.Path; @@ -17,4 +19,7 @@ public interface SpaceService { @POST("/v3/objects/{subKey}/spaces/{spaceId}") @Headers("Content-Type: application/json; charset=UTF-8") Call> createSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body CreateSpacePayload createSpacePayload, @QueryMap(encoded = true) Map options); + + @DELETE("/v3/objects/{subKey}/spaces/{spaceId}") + Call> removeSpace(@Path("subKey") String subKey, @Path("spaceId")String spaceId, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java index cc624311d..e6690b903 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java @@ -5,7 +5,7 @@ import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; import com.pubnub.api.services.vsp.SpaceService; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java new file mode 100644 index 000000000..76a784df1 --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java @@ -0,0 +1,52 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.google.gson.JsonElement; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.services.vsp.SpaceService; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class RemoveSpaceTest extends BaseObjectApiTest { + private RemoveSpace objectUnderTest; + + protected final String testSpaceIdValue = RandomStringUtils.randomAlphabetic(20); + + @Mock + private SpaceService spaceServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = new RemoveSpace(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); + when(spaceServiceMock.removeSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new RemoveSpaceResult())); + } + + @Test + public void can_remove_space() throws PubNubException { + //given + + //when + objectUnderTest.spaceId(new SpaceId(testSpaceIdValue)).sync(); + + //then + verify(spaceServiceMock).removeSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any()); + } +} \ No newline at end of file From e0baae70f0b5988acb35378a2e301d075f73c544 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 2 Sep 2022 15:51:50 +0200 Subject: [PATCH 09/21] Added removeSpace operation to replace removeChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java | 7 +++---- .../consumer/objects_vsp/space/CreateSpaceResult.java | 2 +- .../consumer/objects_vsp/space/RemoveSpaceResult.java | 3 +-- .../api/models/consumer/objects_vsp/space/Space.java | 4 ++-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java index 7767ea377..d1375b1d9 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java @@ -3,14 +3,13 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -public abstract class SpaceEndpoint extends ObjectApiEndpoint { +public abstract class SpaceEndpoint extends ObjectApiEndpoint { protected SpaceId spaceId; protected SpaceEndpoint( @@ -27,12 +26,12 @@ protected void validateParams() throws PubNubException { super.validateParams(); } - public SELF spaceId(final SpaceId spaceId){ + public SELF spaceId(final SpaceId spaceId) { this.spaceId = spaceId; return (SELF) this; } - protected SpaceId getSpaceId(){ + protected SpaceId getSpaceId() { return spaceId; } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java index 9c357b878..0a7c8be2e 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java @@ -12,7 +12,7 @@ @NoArgsConstructor @ToString(callSuper = true) public class CreateSpaceResult extends EntityEnvelope { - public CreateSpaceResult(final EntityEnvelope entityEnvelope){ + public CreateSpaceResult(final EntityEnvelope entityEnvelope) { this.status = entityEnvelope.getStatus(); this.data = entityEnvelope.getData(); } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java index 3b1a3eadd..162a3b61c 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java @@ -1,7 +1,6 @@ package com.pubnub.api.models.consumer.objects_vsp.space; import com.google.gson.JsonElement; -import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import lombok.AccessLevel; import lombok.Getter; @@ -14,7 +13,7 @@ @NoArgsConstructor @ToString(callSuper = true) public class RemoveSpaceResult extends EntityEnvelope { - public RemoveSpaceResult(final EntityEnvelope entityEnvelope){ + public RemoveSpaceResult(final EntityEnvelope entityEnvelope) { this.status = entityEnvelope.getStatus(); this.data = entityEnvelope.getData(); } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java index 5174872b8..affb8b0ab 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java @@ -18,13 +18,13 @@ public class Space extends PNObject { private String status; private String type; - public Space(String id, String name, String description){ + public Space(String id, String name, String description) { super(id); this.name = name; this.description = description; } - public Space(String id, String name){ + public Space(String id, String name) { this(id, name, null); } From 1913dd48b07ccdd5f679234206fba050a6b6f526 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 5 Sep 2022 08:30:20 +0200 Subject: [PATCH 10/21] Added fetchSpace operation to replace getChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../objects_vsp/space/SpaceIT.java | 33 +++++++++++- src/main/java/com/pubnub/api/PubNub.java | 8 +++ .../objects_vsp/space/FetchSpace.java | 32 +++++++++++ .../objects_vsp/space/FetchSpaceCommand.java | 54 +++++++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/space/CreateSpaceResult.java | 9 ++-- .../objects_vsp/space/FetchSpaceResult.java | 11 ++++ .../objects_vsp/space/RemoveSpaceResult.java | 1 - .../objects_vsp/space/SpaceResult.java | 19 +++++++ .../pubnub/api/services/vsp/SpaceService.java | 7 ++- .../objects_api/BaseObjectApiTest.java | 1 + .../objects_vsp/space/CreateSpaceTest.java | 1 - .../objects_vsp/space/FetchSpaceTest.java | 50 +++++++++++++++++ .../objects_vsp/user/FetchUserTest.java | 4 ++ 15 files changed, 222 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index 67887117b..8a6b7564c 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -4,6 +4,7 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; @@ -50,7 +51,7 @@ public void createUserHappyPath() throws PubNubException { @Test public void removeSpaceHappyPath() throws PubNubException { //given - CreateSpaceResult createSpaceResult = pubNubUnderTest.createSpace() + pubNubUnderTest.createSpace() .spaceId(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) @@ -69,6 +70,36 @@ public void removeSpaceHappyPath() throws PubNubException { } + @Test + public void getSpaceHappyPath() throws PubNubException { + //given + pubNubUnderTest.createSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() + .spaceId(new SpaceId(randomSpaceId)) + .sync(); + + //then + assertNotNull(fetchSpaceResult); + assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); + assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); + assertEquals(randomName, fetchSpaceResult.getData().getName()); + assertEquals(randomDescription, fetchSpaceResult.getData().getDescription()); + assertNotNull(fetchSpaceResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, fetchSpaceResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, fetchSpaceResult.getData().getType()); + + } + @After public void tearDown() throws Exception { pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index b6e67a195..934203cea 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -45,6 +45,7 @@ import com.pubnub.api.endpoints.objects_api.uuid.RemoveUUIDMetadata; import com.pubnub.api.endpoints.objects_api.uuid.SetUUIDMetadata; import com.pubnub.api.endpoints.objects_vsp.space.CreateSpace; +import com.pubnub.api.endpoints.objects_vsp.space.FetchSpace; import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; @@ -375,11 +376,18 @@ public GetAllChannelsMetadata getAllChannelsMetadata() { return GetAllChannelsMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + /** + * @deprecated Use {@link #fetchSpace()} instead. + */ @NotNull public GetChannelMetadata.Builder getChannelMetadata() { return GetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public FetchSpace fetchSpace(){ + return FetchSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + /** * @deprecated Use {@link #removeSpace()} instead. */ diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java new file mode 100644 index 000000000..d4e773691 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java @@ -0,0 +1,32 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; + +public abstract class FetchSpace extends SpaceEndpoint, FetchSpaceResult> implements CustomIncludeAware { + public FetchSpace( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static FetchSpace create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new FetchSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java new file mode 100644 index 000000000..c8b38f91e --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -0,0 +1,54 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +public class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { + public FetchSpaceCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getSpaceService() + .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), getSpaceId().getValue(), effectiveParams); + } + + @Override + protected FetchSpaceResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new FetchSpaceResult(input.body()); + } else { + return new FetchSpaceResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index cdaaca390..0c609785f 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -51,6 +51,7 @@ public enum PNOperationType { // Space - VSP PNCreateSpaceOperation, + PNFetchSpaceOperation, PNRemoveSpaceOperation, // Channel Metadata diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index 32d2c7ca9..2937478fa 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -188,6 +188,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNUpsertUserOperation: case PNCreateSpaceOperation: case PNRemoveSpaceOperation: + case PNFetchSpaceOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java index 0a7c8be2e..924e2d2fd 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java @@ -7,13 +7,10 @@ import lombok.Setter; import lombok.ToString; -@Getter -@Setter(AccessLevel.PACKAGE) + @NoArgsConstructor -@ToString(callSuper = true) -public class CreateSpaceResult extends EntityEnvelope { +public class CreateSpaceResult extends SpaceResult { public CreateSpaceResult(final EntityEnvelope entityEnvelope) { - this.status = entityEnvelope.getStatus(); - this.data = entityEnvelope.getData(); + super(entityEnvelope); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java new file mode 100644 index 000000000..fd470fd3d --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java @@ -0,0 +1,11 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class FetchSpaceResult extends SpaceResult { + public FetchSpaceResult(EntityEnvelope entityEnvelope) { + super(entityEnvelope); + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java index 162a3b61c..2acdd86a8 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java @@ -15,6 +15,5 @@ public class RemoveSpaceResult extends EntityEnvelope { public RemoveSpaceResult(final EntityEnvelope entityEnvelope) { this.status = entityEnvelope.getStatus(); - this.data = entityEnvelope.getData(); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java new file mode 100644 index 000000000..9352a4a3b --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java @@ -0,0 +1,19 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter(AccessLevel.PACKAGE) +@NoArgsConstructor +@ToString(callSuper = true) +public abstract class SpaceResult extends EntityEnvelope { + public SpaceResult(final EntityEnvelope entityEnvelope) { + this.status = entityEnvelope.getStatus(); + this.data = entityEnvelope.getData(); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index a26c50b5c..70fd00e96 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -7,6 +7,7 @@ import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; +import retrofit2.http.GET; import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.Path; @@ -20,6 +21,10 @@ public interface SpaceService { @Headers("Content-Type: application/json; charset=UTF-8") Call> createSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body CreateSpacePayload createSpacePayload, @QueryMap(encoded = true) Map options); + @GET("/v3/objects/{subKey}/spaces/{spaceId}") + Call> fetchSpace(@Path("subKey") String subKey, @Path("spaceId") String userId, @QueryMap(encoded = true) Map options); + + @DELETE("/v3/objects/{subKey}/spaces/{spaceId}") - Call> removeSpace(@Path("subKey") String subKey, @Path("spaceId")String spaceId, @QueryMap(encoded = true) Map options); + Call> removeSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java index 45a8e7300..01de5b242 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_api/BaseObjectApiTest.java @@ -29,6 +29,7 @@ public abstract class BaseObjectApiTest { protected final String testSubscriptionKey = UUID.randomUUID().toString(); protected final String testUUID = UUID.randomUUID().toString(); protected final String testUserIdValue = RandomStringUtils.randomAlphabetic(20); + protected final String testSpaceIdValue = RandomStringUtils.randomAlphabetic(20); @Mock private PNConfiguration configurationMock; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java index e6690b903..cc81d5d68 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java @@ -28,7 +28,6 @@ public class CreateSpaceTest extends BaseObjectApiTest { private CreateSpace objectUnderTest; - private final String testSpaceIdValue = RandomStringUtils.randomAlphabetic(20); @Mock private SpaceService spaceServiceMock; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java new file mode 100644 index 000000000..1ef9ae32a --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java @@ -0,0 +1,50 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.services.vsp.SpaceService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class FetchSpaceTest extends BaseObjectApiTest { + private FetchSpace objectUnderTest; + + @Mock + private SpaceService spaceServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = FetchSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); + when(spaceServiceMock.fetchSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + } + + @Test + public void can_fetch_space() throws PubNubException { + //given + + //when + objectUnderTest.spaceId(new SpaceId(testSpaceIdValue)).sync(); + + //then + verify(spaceServiceMock,times(1)).fetchSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any()); + } +} \ No newline at end of file diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java index d18ec6ba3..7cdd0a7a6 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java @@ -37,8 +37,12 @@ public void setUp() throws Exception { @Test public void can_fetch_user() throws PubNubException { + //given + + //when objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + //then verify(userServiceMock, times(1)).fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); } } \ No newline at end of file From 9420144e65ce7909d2f5eb44b52e3379d8d0b4ff Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 5 Sep 2022 12:42:33 +0200 Subject: [PATCH 11/21] Added updateSpace operation to replace setChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../integration/objects/ObjectsApiBaseIT.java | 18 +++- .../objects_vsp/space/SpaceIT.java | 81 +++++++++++++- .../integration/objects_vsp/user/UserIT.java | 14 +-- src/main/java/com/pubnub/api/PubNub.java | 5 + .../objects_vsp/space/UpdateSpace.java | 45 ++++++++ .../objects_vsp/space/UpdateSpaceCommand.java | 101 ++++++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/space/CreateSpaceResult.java | 6 +- .../objects_vsp/space/UpdateSpaceResult.java | 11 ++ .../objects_vsp/space/CreateSpacePayload.java | 17 +-- .../objects_vsp/space/SpacePayload.java | 16 +++ .../objects_vsp/space/UpdateSpacePayload.java | 7 ++ .../pubnub/api/services/vsp/SpaceService.java | 6 +- .../objects_vsp/space/UpdateSpaceTest.java | 81 ++++++++++++++ 15 files changed, 378 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java index 28593c3e2..79c8b4a89 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java @@ -56,16 +56,24 @@ protected Map customSpaceObject() { private Map getCustomObject(){ final Map customMap = new HashMap<>(); - customMap.putIfAbsent("user_param1", "val1"); - customMap.putIfAbsent("user_param2", "val2"); + customMap.putIfAbsent("param1", "val1"); + customMap.putIfAbsent("param2", "val2"); return customMap; } protected Map updatedCustomUserObject() { + return updatedCustomObject(); + } + + protected Map updatedCustomSpaceObject() { + return updatedCustomObject(); + } + + private Map updatedCustomObject() { final Map customMap = new HashMap<>(); - customMap.putIfAbsent("user_param1", "val1_updated"); - customMap.putIfAbsent("user_param2", "val2_updated"); - customMap.putIfAbsent("user_param3", "added"); + customMap.putIfAbsent("param1", "val1_updated"); + customMap.putIfAbsent("param2", "val2_updated"); + customMap.putIfAbsent("param3", "added"); return customMap; } } diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index 8a6b7564c..e006b5d09 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -1,16 +1,19 @@ package com.pubnub.api.integration.objects_vsp.space; +import com.google.gson.JsonObject; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; import org.junit.Test; +import java.util.Map; import java.util.Random; import static org.junit.Assert.assertEquals; @@ -71,7 +74,7 @@ public void removeSpaceHappyPath() throws PubNubException { } @Test - public void getSpaceHappyPath() throws PubNubException { + public void fetchSpaceHappyPath() throws PubNubException { //given pubNubUnderTest.createSpace() .spaceId(new SpaceId(randomSpaceId)) @@ -100,6 +103,82 @@ public void getSpaceHappyPath() throws PubNubException { } + @Test + public void updateUser_passing_full_object_happyPath() throws PubNubException { + //given + String updatedName = "updatedName" + randomName(); + String updatedDescription = "updatedDescription" + randomName(); + Map updateCustom = updatedCustomSpaceObject(); + String updatedStatus = "updatedStatus" + STATUS_ACTIVE; + String updatedType = "updatedType" + TYPE_HUMAN; + + pubNubUnderTest.createSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + UpdateSpaceResult updateSpaceResult = pubNubUnderTest.updateSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(updatedName) + .description(updatedDescription) + .custom(updateCustom) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + assertNotNull(updateSpaceResult); + assertEquals(HttpStatus.SC_OK, updateSpaceResult.getStatus()); + assertEquals(randomSpaceId, updateSpaceResult.getData().getId()); + assertEquals(updatedName, updateSpaceResult.getData().getName()); + assertEquals(updatedDescription, updateSpaceResult.getData().getDescription()); + assertEquals(updatedDescription, updateSpaceResult.getData().getDescription()); + assertEquals("\"val1_updated\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, updateSpaceResult.getData().getStatus()); + assertEquals(updatedType, updateSpaceResult.getData().getType()); + + FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() + .spaceId(new SpaceId(randomSpaceId)) + .sync(); + + assertNotNull(fetchSpaceResult); + assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); + assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); + assertEquals(updatedName, fetchSpaceResult.getData().getName()); + assertEquals(updatedDescription, fetchSpaceResult.getData().getDescription()); + assertNotNull(fetchSpaceResult.getData().getCustom()); + assertEquals(updatedStatus, fetchSpaceResult.getData().getStatus()); + assertEquals(updatedType, fetchSpaceResult.getData().getType()); + } + + @Test + public void updateSpace_creates_space_if_space_doesnot_exist() throws PubNubException { + //given + String updatedName = "updatedName" + randomName(); + + //when + UpdateSpaceResult updateSpaceResult = pubNubUnderTest.updateSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(updatedName) + .sync(); + + //then + assertEquals(HttpStatus.SC_OK, updateSpaceResult.getStatus()); + assertEquals(randomSpaceId, updateSpaceResult.getData().getId()); + assertEquals(null, updateSpaceResult.getData().getDescription()); + assertEquals(null, updateSpaceResult.getData().getStatus()); + assertEquals(null, updateSpaceResult.getData().getType()); + assertEquals(updatedName, updateSpaceResult.getData().getName()); + } + @After public void tearDown() throws Exception { pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 5a7b5aacd..5cff1a64d 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -182,9 +182,9 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { assertEquals(updatedEmail, updateUserResult.getData().getEmail()); assertEquals(updatedProfileUrl, updateUserResult.getData().getProfileUrl()); assertEquals(updatedExternalId, updateUserResult.getData().getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param2").toString()); - assertEquals("\"added\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("user_param3").toString()); + assertEquals("\"val1_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); assertEquals(updatedStatus, updateUserResult.getData().getStatus()); assertEquals(updatedType, updateUserResult.getData().getType()); @@ -206,7 +206,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { } @Test - public void updateUser_passing_only_field_to_be_updated_happyPath() throws PubNubException { + public void updateUser_creates_user_if_user_doesnot_exist() throws PubNubException { // given String updatedName = "updatedName" + randomName(); @@ -297,9 +297,9 @@ public void upsertUserHappyPath_currentUserUpdated() throws PubNubException { assertEquals(updatedEmail, upsertUserResult.getData().getEmail()); assertEquals(updatedProfileUrl, upsertUserResult.getData().getProfileUrl()); assertEquals(updatedExternalId, upsertUserResult.getData().getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param2").toString()); - assertEquals("\"added\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("user_param3").toString()); + assertEquals("\"val1_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); assertEquals(updatedStatus, upsertUserResult.getData().getStatus()); assertEquals(updatedType, upsertUserResult.getData().getType()); } diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 934203cea..bef74de8d 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -47,6 +47,7 @@ import com.pubnub.api.endpoints.objects_vsp.space.CreateSpace; import com.pubnub.api.endpoints.objects_vsp.space.FetchSpace; import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; +import com.pubnub.api.endpoints.objects_vsp.space.UpdateSpace; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; @@ -371,6 +372,10 @@ public CreateSpace createSpace() { return CreateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public UpdateSpace updateSpace() { + return UpdateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllChannelsMetadata getAllChannelsMetadata() { return GetAllChannelsMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java new file mode 100644 index 000000000..2e390f8f5 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java @@ -0,0 +1,45 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class UpdateSpace extends SpaceEndpoint, UpdateSpaceResult> implements CustomIncludeAware { + public UpdateSpace( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static UpdateSpace create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new UpdateSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract UpdateSpace name(String name); + + public abstract UpdateSpace description(String description); + + public abstract UpdateSpace custom(Map custom); + + public abstract UpdateSpace status(String status); + + public abstract UpdateSpace type(String type); + +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java new file mode 100644 index 000000000..2c9f791a6 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -0,0 +1,101 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +public class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { + private String name; + private String description; + private Map custom; + private String status; + private String type; + + public UpdateSpaceCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpdateSpacePayload updateSpacePayload = new UpdateSpacePayload(name, description, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getSpaceService() + .updateSpace(subscribeKey, getSpaceId().getValue(), updateSpacePayload, effectiveParams); + } + + @Override + protected UpdateSpaceResult createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return new UpdateSpaceResult(input.body()); + } else { + return new UpdateSpaceResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + @Override + public UpdateSpace name(String name) { + this.name = name; + return this; + } + + @Override + public UpdateSpace description(String description) { + this.description = description; + return this; + } + + @Override + public UpdateSpace custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public UpdateSpace status(String status) { + this.status = status; + return this; + } + + @Override + public UpdateSpace type(String type) { + this.type = type; + return this; + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index 0c609785f..a251994c2 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -53,6 +53,7 @@ public enum PNOperationType { PNCreateSpaceOperation, PNFetchSpaceOperation, PNRemoveSpaceOperation, + PNUpdateSpaceOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index 2937478fa..ae5d43628 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -189,6 +189,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNCreateSpaceOperation: case PNRemoveSpaceOperation: case PNFetchSpaceOperation: + case PNUpdateSpaceOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java index 924e2d2fd..8c02b8fbe 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java @@ -1,15 +1,11 @@ package com.pubnub.api.models.consumer.objects_vsp.space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.AccessLevel; -import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; @NoArgsConstructor -public class CreateSpaceResult extends SpaceResult { +public class CreateSpaceResult extends SpaceResult { public CreateSpaceResult(final EntityEnvelope entityEnvelope) { super(entityEnvelope); } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java new file mode 100644 index 000000000..ac3774e20 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java @@ -0,0 +1,11 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class UpdateSpaceResult extends SpaceResult { + public UpdateSpaceResult(final EntityEnvelope entityEnvelope) { + super(entityEnvelope); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java index 1fb27964e..2dcab2b39 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/CreateSpacePayload.java @@ -1,16 +1,7 @@ package com.pubnub.api.models.server.objects_vsp.space; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; - -@Getter -@ToString -@AllArgsConstructor -public class CreateSpacePayload { - private final String name; - private final String description; - private final Object custom; - private final String status; - private final String type; +public class CreateSpacePayload extends SpacePayload { + public CreateSpacePayload(String name, String description, Object custom, String status, String type) { + super(name, description, custom, status, type); + } } diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java new file mode 100644 index 000000000..9ad80eb2b --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java @@ -0,0 +1,16 @@ +package com.pubnub.api.models.server.objects_vsp.space; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@AllArgsConstructor +public abstract class SpacePayload { + private final String name; + private final String description; + private final Object custom; + private final String status; + private final String type; +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java new file mode 100644 index 000000000..f4a497684 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java @@ -0,0 +1,7 @@ +package com.pubnub.api.models.server.objects_vsp.space; + +public class UpdateSpacePayload extends SpacePayload{ + public UpdateSpacePayload(String name, String description, Object custom, String status, String type) { + super(name, description, custom, status, type); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index 70fd00e96..565940fbb 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -4,11 +4,13 @@ import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; import retrofit2.http.Headers; +import retrofit2.http.PATCH; import retrofit2.http.POST; import retrofit2.http.Path; import retrofit2.http.QueryMap; @@ -24,7 +26,9 @@ public interface SpaceService { @GET("/v3/objects/{subKey}/spaces/{spaceId}") Call> fetchSpace(@Path("subKey") String subKey, @Path("spaceId") String userId, @QueryMap(encoded = true) Map options); - @DELETE("/v3/objects/{subKey}/spaces/{spaceId}") Call> removeSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @QueryMap(encoded = true) Map options); + + @PATCH("/v3/objects/{subKey}/spaces/{spaceId}") + Call> updateSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body UpdateSpacePayload updateSpacePayload, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java new file mode 100644 index 000000000..e72c7cf00 --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java @@ -0,0 +1,81 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import com.pubnub.api.services.vsp.SpaceService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class UpdateSpaceTest extends BaseObjectApiTest { + private UpdateSpace objectUnderTest; + + @Mock + private SpaceService spaceServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = UpdateSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + + + when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); + when(spaceServiceMock.updateSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + } + + @Test + public void can_updateSpace() throws PubNubException { + //given + String updatedName = "updatedName"; + String updatedDescription = "updatedDescription"; + Map updatedCustom = new HashMap<>(); + updatedCustom.putIfAbsent("user_param1", "val1"); + updatedCustom.putIfAbsent("user_param2", "val2"); + String updatedStatus = "updatedStatus"; + String updatedType = "updatedType"; + + //when + objectUnderTest + .spaceId(new SpaceId(testSpaceIdValue)) + .name(updatedName) + .description(updatedDescription) + .custom(updatedCustom) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + ArgumentCaptor updateSpacePayloadCaptor = ArgumentCaptor.forClass(UpdateSpacePayload.class); + verify(spaceServiceMock, times(1)).updateSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), updateSpacePayloadCaptor.capture(), any()); + + UpdateSpacePayload captorValue = updateSpacePayloadCaptor.getValue(); + assertEquals(updatedName, captorValue.getName()); + assertEquals(updatedDescription, captorValue.getDescription()); + assertEquals(updatedCustom, captorValue.getCustom()); + assertEquals(updatedStatus, captorValue.getStatus()); + assertEquals(updatedType, captorValue.getType()); + + } +} From 048ba17146b5de3ec2c313abe5ec6c6dd0beb4a6 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 5 Sep 2022 15:51:44 +0200 Subject: [PATCH 12/21] Added upsertSpace operation to replace setChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../objects_vsp/space/SpaceIT.java | 83 ++++++++++++++++ .../integration/objects_vsp/user/UserIT.java | 2 +- src/main/java/com/pubnub/api/PubNub.java | 13 ++- .../objects_vsp/space/UpsertSpace.java | 44 +++++++++ .../objects_vsp/space/UpsertSpaceCommand.java | 98 +++++++++++++++++++ .../com/pubnub/api/enums/PNOperationType.java | 1 + .../pubnub/api/managers/TelemetryManager.java | 1 + .../objects_vsp/space/UpsertSpaceResult.java | 11 +++ .../objects_vsp/space/UpdateSpacePayload.java | 2 +- .../objects_vsp/space/UpsertSpacePayload.java | 7 ++ .../pubnub/api/services/vsp/SpaceService.java | 5 + .../objects_vsp/space/UpdateSpaceTest.java | 4 +- .../objects_vsp/space/UpsertSpaceTest.java | 79 +++++++++++++++ 13 files changed, 342 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java create mode 100644 src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpsertSpacePayload.java create mode 100644 src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index e006b5d09..cb698980c 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -8,6 +8,7 @@ import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; @@ -179,6 +180,88 @@ public void updateSpace_creates_space_if_space_doesnot_exist() throws PubNubExce assertEquals(updatedName, updateSpaceResult.getData().getName()); } + @Test + public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { + //given + + //when + UpsertSpaceResult upsertSpaceResult = pubNubUnderTest.upsertSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //then + assertNotNull(upsertSpaceResult); + assertEquals(HttpStatus.SC_OK, upsertSpaceResult.getStatus()); + assertEquals(randomSpaceId, upsertSpaceResult.getData().getId()); + assertEquals(randomName, upsertSpaceResult.getData().getName()); + assertEquals(randomDescription, upsertSpaceResult.getData().getDescription()); + assertNotNull(upsertSpaceResult.getData().getCustom()); + assertEquals(STATUS_ACTIVE, upsertSpaceResult.getData().getStatus()); + assertEquals(TYPE_HUMAN, upsertSpaceResult.getData().getType()); + } + + @Test + public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { + //given + String updatedName = "updatedName" + randomName(); + String updatedDescription = "updatedDescription" + randomName(); + Map updateCustom = updatedCustomSpaceObject(); + String updatedStatus = "updatedStatus" + STATUS_ACTIVE; + String updatedType = "updatedType" + TYPE_HUMAN; + + pubNubUnderTest.createSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + UpsertSpaceResult upsertSpaceResult = pubNubUnderTest.upsertSpace() + .spaceId(new SpaceId(randomSpaceId)) + .name(updatedName) + .description(updatedDescription) + .custom(updateCustom) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + assertNotNull(upsertSpaceResult); + assertEquals(HttpStatus.SC_OK, upsertSpaceResult.getStatus()); + assertEquals(randomSpaceId, upsertSpaceResult.getData().getId()); + assertEquals(updatedName, upsertSpaceResult.getData().getName()); + assertEquals(updatedDescription, upsertSpaceResult.getData().getDescription()); + assertEquals(updatedDescription, upsertSpaceResult.getData().getDescription()); + assertEquals("\"val1_updated\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, upsertSpaceResult.getData().getStatus()); + assertEquals(updatedType, upsertSpaceResult.getData().getType()); + + FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() + .spaceId(new SpaceId(randomSpaceId)) + .sync(); + + assertNotNull(fetchSpaceResult); + assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); + assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); + assertEquals(updatedName, fetchSpaceResult.getData().getName()); + assertEquals(updatedDescription, fetchSpaceResult.getData().getDescription()); + assertNotNull(fetchSpaceResult.getData().getCustom()); + assertEquals(updatedStatus, fetchSpaceResult.getData().getStatus()); + assertEquals(updatedType, fetchSpaceResult.getData().getType()); + } + @After public void tearDown() throws Exception { pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 5cff1a64d..d69736857 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -254,7 +254,7 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { } @Test - public void upsertUserHappyPath_currentUserUpdated() throws PubNubException { + public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { //given String updatedName = "updatedName" + randomName(); String updatedEmail = "updatedEmail" + randomEmail(); diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index bef74de8d..65a416e94 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -48,6 +48,7 @@ import com.pubnub.api.endpoints.objects_vsp.space.FetchSpace; import com.pubnub.api.endpoints.objects_vsp.space.RemoveSpace; import com.pubnub.api.endpoints.objects_vsp.space.UpdateSpace; +import com.pubnub.api.endpoints.objects_vsp.space.UpsertSpace; import com.pubnub.api.endpoints.objects_vsp.user.CreateUser; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.endpoints.objects_vsp.user.RemoveUser; @@ -361,9 +362,9 @@ public RemoveUser removeUser() { return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } -// /** -// * @deprecated Use {@link #createSpace()} or {@link #updateSpace()} or {@link #upsertSpace()} instead. -// */ + /** + * @deprecated Use {@link #createSpace()} or {@link #updateSpace()} or {@link #upsertSpace()} instead. + */ public SetChannelMetadata.Builder setChannelMetadata() { return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @@ -376,6 +377,10 @@ public UpdateSpace updateSpace() { return UpdateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + public UpsertSpace upsertSpace() { + return UpsertSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + @NotNull public GetAllChannelsMetadata getAllChannelsMetadata() { return GetAllChannelsMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); @@ -389,7 +394,7 @@ public GetChannelMetadata.Builder getChannelMetadata() { return GetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public FetchSpace fetchSpace(){ + public FetchSpace fetchSpace() { return FetchSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java new file mode 100644 index 000000000..a937f77c6 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java @@ -0,0 +1,44 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; + +import java.util.Map; + +public abstract class UpsertSpace extends SpaceEndpoint, UpsertSpaceResult> implements CustomIncludeAware { + public UpsertSpace( + final PubNub pubNub, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + public static UpsertSpace create( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager) { + final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); + return new UpsertSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + public abstract UpsertSpace name(String name); + + public abstract UpsertSpace description(String description); + + public abstract UpsertSpace custom(Map custom); + + public abstract UpsertSpace status(String status); + + public abstract UpsertSpace type(String type); +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java new file mode 100644 index 000000000..da3519677 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -0,0 +1,98 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +public class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { + private String name; + private String description; + private Map custom; + private String status; + private String type; + + public UpsertSpaceCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getSpaceService().upsertSpace(subscribeKey, getSpaceId().getValue(), upsertUserPayload, effectiveParams); + } + + @Override + protected UpsertSpaceResult createResponse(Response> input) throws PubNubException { + if (input != null) { + return new UpsertSpaceResult(input.body()); + } else { + return new UpsertSpaceResult(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + @Override + public UpsertSpace name(String name) { + this.name = name; + return this; + } + + @Override + public UpsertSpace description(String description) { + this.description = description; + return this; + } + + @Override + public UpsertSpace custom(Map custom) { + this.custom = custom; + return this; + } + + @Override + public UpsertSpace status(String status) { + this.status = status; + return this; + } + + @Override + public UpsertSpace type(String type) { + this.type = type; + return this; + } +} diff --git a/src/main/java/com/pubnub/api/enums/PNOperationType.java b/src/main/java/com/pubnub/api/enums/PNOperationType.java index a251994c2..961a06ef7 100644 --- a/src/main/java/com/pubnub/api/enums/PNOperationType.java +++ b/src/main/java/com/pubnub/api/enums/PNOperationType.java @@ -54,6 +54,7 @@ public enum PNOperationType { PNFetchSpaceOperation, PNRemoveSpaceOperation, PNUpdateSpaceOperation, + PNUpsertSpaceOperation, // Channel Metadata PNSetChannelMetadataOperation, diff --git a/src/main/java/com/pubnub/api/managers/TelemetryManager.java b/src/main/java/com/pubnub/api/managers/TelemetryManager.java index ae5d43628..6d75a9f85 100644 --- a/src/main/java/com/pubnub/api/managers/TelemetryManager.java +++ b/src/main/java/com/pubnub/api/managers/TelemetryManager.java @@ -190,6 +190,7 @@ private static String endpointNameForOperation(PNOperationType type) { case PNRemoveSpaceOperation: case PNFetchSpaceOperation: case PNUpdateSpaceOperation: + case PNUpsertSpaceOperation: endpoint = "obj"; break; case PNAccessManagerGrantToken: diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java new file mode 100644 index 000000000..804ca56a0 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java @@ -0,0 +1,11 @@ +package com.pubnub.api.models.consumer.objects_vsp.space; + +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public class UpsertSpaceResult extends SpaceResult{ + public UpsertSpaceResult(final EntityEnvelope entityEnvelope) { + super(entityEnvelope); + } +} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java index f4a497684..21d1c946f 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpdateSpacePayload.java @@ -1,6 +1,6 @@ package com.pubnub.api.models.server.objects_vsp.space; -public class UpdateSpacePayload extends SpacePayload{ +public class UpdateSpacePayload extends SpacePayload { public UpdateSpacePayload(String name, String description, Object custom, String status, String type) { super(name, description, custom, status, type); } diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpsertSpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpsertSpacePayload.java new file mode 100644 index 000000000..0180af5fc --- /dev/null +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/UpsertSpacePayload.java @@ -0,0 +1,7 @@ +package com.pubnub.api.models.server.objects_vsp.space; + +public class UpsertSpacePayload extends SpacePayload { + public UpsertSpacePayload(String name, String description, Object custom, String status, String type) { + super(name, description, custom, status, type); + } +} diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index 565940fbb..a3619803c 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -5,6 +5,7 @@ import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; @@ -12,6 +13,7 @@ import retrofit2.http.Headers; import retrofit2.http.PATCH; import retrofit2.http.POST; +import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.QueryMap; @@ -31,4 +33,7 @@ public interface SpaceService { @PATCH("/v3/objects/{subKey}/spaces/{spaceId}") Call> updateSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body UpdateSpacePayload updateSpacePayload, @QueryMap(encoded = true) Map options); + + @PUT("/v3/objects/{subKey}/spaces/{spaceId}") + Call> upsertSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body UpsertSpacePayload upsertSpacePayload, @QueryMap(encoded = true) Map options); } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java index e72c7cf00..a0f8d864c 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java @@ -4,8 +4,8 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; import com.pubnub.api.services.vsp.SpaceService; @@ -42,7 +42,7 @@ public void setUp() throws Exception { when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.updateSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + when(call.execute()).thenReturn(Response.success(new UpdateSpaceResult())); } @Test diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java new file mode 100644 index 000000000..87c2a0625 --- /dev/null +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java @@ -0,0 +1,79 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; +import com.pubnub.api.services.vsp.SpaceService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class UpsertSpaceTest extends BaseObjectApiTest { + private UpsertSpace objectUnderTest; + + @Mock + private SpaceService spaceServiceMock; + + @Mock + private Call> call; + + @Before + public void setUp() throws Exception { + objectUnderTest = UpsertSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + + when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); + when(spaceServiceMock.upsertSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); + when(call.execute()).thenReturn(Response.success(new UpsertSpaceResult())); + } + + @Test + public void can_upsertSpace() throws PubNubException { + //given + String updatedName = "updatedName"; + String updatedDescription = "updatedDescription"; + Map updatedCustom = new HashMap<>(); + updatedCustom.putIfAbsent("user_param1", "val1"); + updatedCustom.putIfAbsent("user_param2", "val2"); + String updatedStatus = "updatedStatus"; + String updatedType = "updatedType"; + + //when + objectUnderTest + .spaceId(new SpaceId(testSpaceIdValue)) + .name(updatedName) + .description(updatedDescription) + .custom(updatedCustom) + .status(updatedStatus) + .type(updatedType) + .sync(); + + //then + ArgumentCaptor upsertSpacePayloadCaptor = ArgumentCaptor.forClass(UpsertSpacePayload.class); + verify(spaceServiceMock, times(1)).upsertSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), upsertSpacePayloadCaptor.capture(), any()); + + UpsertSpacePayload captorValue = upsertSpacePayloadCaptor.getValue(); + assertEquals(updatedName, captorValue.getName()); + assertEquals(updatedDescription, captorValue.getDescription()); + assertEquals(updatedCustom, captorValue.getCustom()); + assertEquals(updatedStatus, captorValue.getStatus()); + assertEquals(updatedType, captorValue.getType()); + } +} \ No newline at end of file From 88f9b9298a7ce4de33b9bb73c50713c6ac093fad Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 5 Sep 2022 16:41:21 +0200 Subject: [PATCH 13/21] Added upsertSpace operation to replace setChannelMetadata Under the hood ObjectV3 endpoint is used. This is initial shape, and we are expecting Payloads to change in the future. --- .../models/consumer/objects_vsp/space/UpsertSpaceResult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java index 804ca56a0..b24989cb1 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java @@ -4,7 +4,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor -public class UpsertSpaceResult extends SpaceResult{ +public class UpsertSpaceResult extends SpaceResult { public UpsertSpaceResult(final EntityEnvelope entityEnvelope) { super(entityEnvelope); } From 7ac0e9f0991e922b9e907092225ea03fad818592 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Thu, 8 Sep 2022 17:35:06 +0200 Subject: [PATCH 14/21] ObjectV3 user/space changes after code review. --- .../objects_vsp/space/SpaceIT.java | 204 +++++++++--------- .../integration/objects_vsp/user/UserIT.java | 189 +++++++--------- src/main/java/com/pubnub/api/PubNub.java | 82 +++---- .../endpoints/objects_vsp/SpaceEndpoint.java | 37 ---- .../endpoints/objects_vsp/UserEndpoint.java | 41 ---- .../objects_vsp/space/CreateSpace.java | 9 +- .../objects_vsp/space/CreateSpaceCommand.java | 63 +++--- .../objects_vsp/space/FetchSpace.java | 11 +- .../objects_vsp/space/FetchSpaceCommand.java | 16 +- .../objects_vsp/space/RemoveSpace.java | 10 +- .../objects_vsp/space/UpdateSpace.java | 9 +- .../objects_vsp/space/UpdateSpaceCommand.java | 53 ++--- .../objects_vsp/space/UpsertSpace.java | 9 +- .../objects_vsp/space/UpsertSpaceCommand.java | 53 ++--- .../objects_vsp/user/CreateUser.java | 9 +- .../objects_vsp/user/CreateUserCommand.java | 69 ++---- .../endpoints/objects_vsp/user/FetchUser.java | 18 +- .../objects_vsp/user/FetchUserCommand.java | 15 +- .../objects_vsp/user/RemoveUser.java | 19 +- .../objects_vsp/user/UpdateUser.java | 9 +- .../objects_vsp/user/UpdateUserCommand.java | 66 ++---- .../objects_vsp/user/UpsertUser.java | 9 +- .../objects_vsp/user/UpsertUserCommand.java | 65 ++---- .../objects_vsp/space/CreateSpaceResult.java | 12 -- .../objects_vsp/space/FetchSpaceResult.java | 11 - .../consumer/objects_vsp/space/Space.java | 2 + .../objects_vsp/space/SpaceResult.java | 19 -- .../objects_vsp/space/UpdateSpaceResult.java | 11 - .../objects_vsp/space/UpsertSpaceResult.java | 11 - .../objects_vsp/user/CreateUserResult.java | 12 -- .../objects_vsp/user/FetchUserResult.java | 11 - .../objects_vsp/user/UpdateUserResult.java | 11 - .../objects_vsp/user/UpsertUserResult.java | 11 - .../consumer/objects_vsp/user/UserResult.java | 19 -- .../objects_vsp/space/SpacePayload.java | 8 +- .../server/objects_vsp/user/UserPayload.java | 8 +- .../api/services/ChannelMetadataService.java | 1 - .../api/services/UUIDMetadataService.java | 1 - .../pubnub/api/services/vsp/SpaceService.java | 1 - .../pubnub/api/services/vsp/UserService.java | 1 - .../objects_vsp/space/CreateSpaceTest.java | 6 +- .../objects_vsp/space/FetchSpaceTest.java | 9 +- .../objects_vsp/space/RemoveSpaceTest.java | 4 +- .../objects_vsp/space/UpdateSpaceTest.java | 6 +- .../objects_vsp/space/UpsertSpaceTest.java | 6 +- .../objects_vsp/user/CreateUserTest.java | 9 +- .../objects_vsp/user/FetchUserTest.java | 7 +- .../objects_vsp/user/RemoveUserTest.java | 4 +- .../objects_vsp/user/UpdateUserTest.java | 8 +- .../objects_vsp/user/UpsertUserTest.java | 6 +- 50 files changed, 450 insertions(+), 830 deletions(-) delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java delete mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index cb698980c..cac481146 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -4,11 +4,8 @@ import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; -import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.RemoveSpaceResult; -import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; -import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; @@ -31,8 +28,39 @@ public void createUserHappyPath() throws PubNubException { //given //when - CreateSpaceResult createSpaceResult = pubNubUnderTest.createSpace() - .spaceId(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //then + assertNotNull(space); + assertEquals(randomSpaceId, space.getId()); + assertEquals(randomName, space.getName()); + assertEquals(randomDescription, space.getDescription()); + assertNotNull(space.getCustom()); + assertEquals(STATUS_ACTIVE, space.getStatus()); + assertEquals(TYPE_HUMAN, space.getType()); + } + + @Test(expected = PubNubException.class) + public void should_throw_exception_when_space_with_the_spaceId_exists() throws PubNubException { + //given + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + .name(randomName) + .description(randomDescription) + .custom(customSpaceObject()) + .includeCustom(true) + .status(STATUS_ACTIVE) + .type(TYPE_HUMAN) + .sync(); + + //when + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -42,21 +70,12 @@ public void createUserHappyPath() throws PubNubException { .sync(); //then - assertNotNull(createSpaceResult); - assertEquals(HttpStatus.SC_OK, createSpaceResult.getStatus()); - assertEquals(randomSpaceId, createSpaceResult.getData().getId()); - assertEquals(randomName, createSpaceResult.getData().getName()); - assertEquals(randomDescription, createSpaceResult.getData().getDescription()); - assertNotNull(createSpaceResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, createSpaceResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, createSpaceResult.getData().getType()); } @Test public void removeSpaceHappyPath() throws PubNubException { //given - pubNubUnderTest.createSpace() - .spaceId(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -66,7 +85,7 @@ public void removeSpaceHappyPath() throws PubNubException { .sync(); //when - RemoveSpaceResult removeSpaceResult = pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); + RemoveSpaceResult removeSpaceResult = pubNubUnderTest.removeSpace(new SpaceId(randomSpaceId)).sync(); //then assertEquals(HttpStatus.SC_OK, removeSpaceResult.getStatus()); @@ -77,8 +96,7 @@ public void removeSpaceHappyPath() throws PubNubException { @Test public void fetchSpaceHappyPath() throws PubNubException { //given - pubNubUnderTest.createSpace() - .spaceId(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -88,24 +106,22 @@ public void fetchSpaceHappyPath() throws PubNubException { .sync(); //when - FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() - .spaceId(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) .sync(); //then - assertNotNull(fetchSpaceResult); - assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); - assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); - assertEquals(randomName, fetchSpaceResult.getData().getName()); - assertEquals(randomDescription, fetchSpaceResult.getData().getDescription()); - assertNotNull(fetchSpaceResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, fetchSpaceResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, fetchSpaceResult.getData().getType()); + assertNotNull(space); + assertEquals(randomSpaceId, space.getId()); + assertEquals(randomName, space.getName()); + assertEquals(randomDescription, space.getDescription()); + assertNotNull(space.getCustom()); + assertEquals(STATUS_ACTIVE, space.getStatus()); + assertEquals(TYPE_HUMAN, space.getType()); } @Test - public void updateUser_passing_full_object_happyPath() throws PubNubException { + public void updateSpace_passing_full_object_happyPath() throws PubNubException { //given String updatedName = "updatedName" + randomName(); String updatedDescription = "updatedDescription" + randomName(); @@ -113,8 +129,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createSpace() - .spaceId(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -124,8 +139,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); //when - UpdateSpaceResult updateSpaceResult = pubNubUnderTest.updateSpace() - .spaceId(new SpaceId(randomSpaceId)) + Space updatedSpace = pubNubUnderTest.updateSpace(new SpaceId(randomSpaceId)) .name(updatedName) .description(updatedDescription) .custom(updateCustom) @@ -134,50 +148,41 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); //then - assertNotNull(updateSpaceResult); - assertEquals(HttpStatus.SC_OK, updateSpaceResult.getStatus()); - assertEquals(randomSpaceId, updateSpaceResult.getData().getId()); - assertEquals(updatedName, updateSpaceResult.getData().getName()); - assertEquals(updatedDescription, updateSpaceResult.getData().getDescription()); - assertEquals(updatedDescription, updateSpaceResult.getData().getDescription()); - assertEquals("\"val1_updated\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) updateSpaceResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); - assertEquals(updatedStatus, updateSpaceResult.getData().getStatus()); - assertEquals(updatedType, updateSpaceResult.getData().getType()); - - FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() - .spaceId(new SpaceId(randomSpaceId)) + assertNotNull(updatedSpace); + assertEquals(randomSpaceId, updatedSpace.getId()); + assertEquals(updatedName, updatedSpace.getName()); + assertEquals(updatedDescription, updatedSpace.getDescription()); + assertEquals(updatedDescription, updatedSpace.getDescription()); + assertEquals("\"val1_updated\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, updatedSpace.getStatus()); + assertEquals(updatedType, updatedSpace.getType()); + + Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) .sync(); - assertNotNull(fetchSpaceResult); - assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); - assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); - assertEquals(updatedName, fetchSpaceResult.getData().getName()); - assertEquals(updatedDescription, fetchSpaceResult.getData().getDescription()); - assertNotNull(fetchSpaceResult.getData().getCustom()); - assertEquals(updatedStatus, fetchSpaceResult.getData().getStatus()); - assertEquals(updatedType, fetchSpaceResult.getData().getType()); + assertNotNull(space); + assertEquals(randomSpaceId, space.getId()); + assertEquals(updatedName, space.getName()); + assertEquals(updatedDescription, space.getDescription()); + assertNotNull(space.getCustom()); + assertEquals(updatedStatus, space.getStatus()); + assertEquals(updatedType, space.getType()); } - @Test - public void updateSpace_creates_space_if_space_doesnot_exist() throws PubNubException { + @Test(expected = PubNubException.class) + public void updateSpace_should_throw_exception_when_updating_space_that_does_not_exist() throws PubNubException { //given String updatedName = "updatedName" + randomName(); //when - UpdateSpaceResult updateSpaceResult = pubNubUnderTest.updateSpace() - .spaceId(new SpaceId(randomSpaceId)) + pubNubUnderTest.updateSpace(new SpaceId(randomSpaceId)) .name(updatedName) .sync(); //then - assertEquals(HttpStatus.SC_OK, updateSpaceResult.getStatus()); - assertEquals(randomSpaceId, updateSpaceResult.getData().getId()); - assertEquals(null, updateSpaceResult.getData().getDescription()); - assertEquals(null, updateSpaceResult.getData().getStatus()); - assertEquals(null, updateSpaceResult.getData().getType()); - assertEquals(updatedName, updateSpaceResult.getData().getName()); + } @Test @@ -185,8 +190,7 @@ public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { //given //when - UpsertSpaceResult upsertSpaceResult = pubNubUnderTest.upsertSpace() - .spaceId(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.upsertSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -196,14 +200,13 @@ public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { .sync(); //then - assertNotNull(upsertSpaceResult); - assertEquals(HttpStatus.SC_OK, upsertSpaceResult.getStatus()); - assertEquals(randomSpaceId, upsertSpaceResult.getData().getId()); - assertEquals(randomName, upsertSpaceResult.getData().getName()); - assertEquals(randomDescription, upsertSpaceResult.getData().getDescription()); - assertNotNull(upsertSpaceResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, upsertSpaceResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, upsertSpaceResult.getData().getType()); + assertNotNull(space); + assertEquals(randomSpaceId, space.getId()); + assertEquals(randomName, space.getName()); + assertEquals(randomDescription, space.getDescription()); + assertNotNull(space.getCustom()); + assertEquals(STATUS_ACTIVE, space.getStatus()); + assertEquals(TYPE_HUMAN, space.getType()); } @Test @@ -215,8 +218,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createSpace() - .spaceId(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -226,8 +228,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { .sync(); //when - UpsertSpaceResult upsertSpaceResult = pubNubUnderTest.upsertSpace() - .spaceId(new SpaceId(randomSpaceId)) + Space spaceAfterUpsert = pubNubUnderTest.upsertSpace(new SpaceId(randomSpaceId)) .name(updatedName) .description(updatedDescription) .custom(updateCustom) @@ -236,35 +237,32 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { .sync(); //then - assertNotNull(upsertSpaceResult); - assertEquals(HttpStatus.SC_OK, upsertSpaceResult.getStatus()); - assertEquals(randomSpaceId, upsertSpaceResult.getData().getId()); - assertEquals(updatedName, upsertSpaceResult.getData().getName()); - assertEquals(updatedDescription, upsertSpaceResult.getData().getDescription()); - assertEquals(updatedDescription, upsertSpaceResult.getData().getDescription()); - assertEquals("\"val1_updated\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) upsertSpaceResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); - assertEquals(updatedStatus, upsertSpaceResult.getData().getStatus()); - assertEquals(updatedType, upsertSpaceResult.getData().getType()); - - FetchSpaceResult fetchSpaceResult = pubNubUnderTest.fetchSpace() - .spaceId(new SpaceId(randomSpaceId)) + assertNotNull(spaceAfterUpsert); + assertEquals(randomSpaceId, spaceAfterUpsert.getId()); + assertEquals(updatedName, spaceAfterUpsert.getName()); + assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); + assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); + assertEquals("\"val1_updated\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, spaceAfterUpsert.getStatus()); + assertEquals(updatedType, spaceAfterUpsert.getType()); + + Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) .sync(); - assertNotNull(fetchSpaceResult); - assertEquals(HttpStatus.SC_OK, fetchSpaceResult.getStatus()); - assertEquals(randomSpaceId, fetchSpaceResult.getData().getId()); - assertEquals(updatedName, fetchSpaceResult.getData().getName()); - assertEquals(updatedDescription, fetchSpaceResult.getData().getDescription()); - assertNotNull(fetchSpaceResult.getData().getCustom()); - assertEquals(updatedStatus, fetchSpaceResult.getData().getStatus()); - assertEquals(updatedType, fetchSpaceResult.getData().getType()); + assertNotNull(space); + assertEquals(randomSpaceId, space.getId()); + assertEquals(updatedName, space.getName()); + assertEquals(updatedDescription, space.getDescription()); + assertNotNull(space.getCustom()); + assertEquals(updatedStatus, space.getStatus()); + assertEquals(updatedType, space.getType()); } @After public void tearDown() throws Exception { - pubNubUnderTest.removeSpace().spaceId(new SpaceId(randomSpaceId)).sync(); + pubNubUnderTest.removeSpace(new SpaceId(randomSpaceId)).sync(); } private String getRandomSpaceIdValue() { diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index d69736857..959bb3a0c 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -6,11 +6,8 @@ import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; -import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; -import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; -import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; +import com.pubnub.api.models.consumer.objects_vsp.user.User; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; @@ -18,8 +15,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; @@ -45,8 +40,7 @@ public void createUserHappyPath() throws PubNubException { //given //when - final CreateUserResult createUserResult = pubNubUnderTest.createUser() - .userId(new UserId(randomUserId)) + final User user = pubNubUnderTest.createUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -58,23 +52,21 @@ public void createUserHappyPath() throws PubNubException { .sync(); //then - assertNotNull(createUserResult); - assertEquals(HttpStatus.SC_OK, createUserResult.getStatus()); - assertEquals(randomUserId, createUserResult.getData().getId()); - assertEquals(randomName, createUserResult.getData().getName()); - assertEquals(randomEmail, createUserResult.getData().getEmail()); - assertEquals(randomProfileUrl, createUserResult.getData().getProfileUrl()); - assertEquals(randomExternalId, createUserResult.getData().getExternalId()); - assertNotNull(createUserResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, createUserResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, createUserResult.getData().getType()); + assertNotNull(user); + assertEquals(randomUserId, user.getId()); + assertEquals(randomName, user.getName()); + assertEquals(randomEmail, user.getEmail()); + assertEquals(randomProfileUrl, user.getProfileUrl()); + assertEquals(randomExternalId, user.getExternalId()); + assertNotNull(user.getCustom()); + assertEquals(STATUS_ACTIVE, user.getStatus()); + assertEquals(TYPE_HUMAN, user.getType()); } @Test public void fetchUserHappyPath() throws PubNubException { //given - final CreateUserResult createUserResult = pubNubUnderTest.createUser() - .userId(new UserId(randomUserId)) + pubNubUnderTest.createUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -86,29 +78,26 @@ public void fetchUserHappyPath() throws PubNubException { .sync(); //when - FetchUserResult fetchUserResult = pubNubUnderTest.fetchUser() - .userId(new UserId(randomUserId)) + User user = pubNubUnderTest.fetchUser(new UserId(randomUserId)) .includeCustom(true) .sync(); - assertNotNull(fetchUserResult); - assertEquals(HttpStatus.SC_OK, fetchUserResult.getStatus()); - assertEquals(randomUserId, fetchUserResult.getData().getId()); - assertEquals(randomName, fetchUserResult.getData().getName()); - assertEquals(randomEmail, fetchUserResult.getData().getEmail()); - assertEquals(randomProfileUrl, fetchUserResult.getData().getProfileUrl()); - assertEquals(randomExternalId, fetchUserResult.getData().getExternalId()); - assertNotNull(fetchUserResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, fetchUserResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, fetchUserResult.getData().getType()); + assertNotNull(user); + assertEquals(randomUserId, user.getId()); + assertEquals(randomName, user.getName()); + assertEquals(randomEmail, user.getEmail()); + assertEquals(randomProfileUrl, user.getProfileUrl()); + assertEquals(randomExternalId, user.getExternalId()); + assertNotNull(user.getCustom()); + assertEquals(STATUS_ACTIVE, user.getStatus()); + assertEquals(TYPE_HUMAN, user.getType()); } @Test public void removeUserHappyPath() throws PubNubException { // given - pubNubUnderTest.createUser() - .userId(new UserId(randomUserId)) + pubNubUnderTest.createUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -120,8 +109,7 @@ public void removeUserHappyPath() throws PubNubException { .sync(); //when - RemoveUserResult removeUserResult = pubNubUnderTest.removeUser() - .userId(new UserId(randomUserId)) + RemoveUserResult removeUserResult = pubNubUnderTest.removeUser(new UserId(randomUserId)) .sync(); //then @@ -129,8 +117,7 @@ public void removeUserHappyPath() throws PubNubException { assertEquals(HttpStatus.SC_OK, removeUserResult.getStatus()); //verify if user not exist - FetchUser fetchUser = pubNubUnderTest.fetchUser() - .userId(new UserId(randomUserId)) + FetchUser fetchUser = pubNubUnderTest.fetchUser(new UserId(randomUserId)) .includeCustom(true); PubNubException exception = assertThrows(PubNubException.class, () -> fetchUser.sync()); @@ -149,8 +136,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createUser() - .userId(new UserId(randomUserId)) + pubNubUnderTest.createUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -162,8 +148,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); // when - UpdateUserResult updateUserResult = pubNubUnderTest.updateUser() - .userId(new UserId(randomUserId)) + User userAfterUpdate = pubNubUnderTest.updateUser(new UserId(randomUserId)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -175,51 +160,46 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); // then - assertNotNull(updateUserResult); - assertEquals(HttpStatus.SC_OK, updateUserResult.getStatus()); - assertEquals(randomUserId, updateUserResult.getData().getId()); - assertEquals(updatedName, updateUserResult.getData().getName()); - assertEquals(updatedEmail, updateUserResult.getData().getEmail()); - assertEquals(updatedProfileUrl, updateUserResult.getData().getProfileUrl()); - assertEquals(updatedExternalId, updateUserResult.getData().getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) updateUserResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); - assertEquals(updatedStatus, updateUserResult.getData().getStatus()); - assertEquals(updatedType, updateUserResult.getData().getType()); - - FetchUserResult fetchUserResult = pubNubUnderTest.fetchUser() - .userId(new UserId(randomUserId)) + assertNotNull(userAfterUpdate); + assertEquals(randomUserId, userAfterUpdate.getId()); + assertEquals(updatedName, userAfterUpdate.getName()); + assertEquals(updatedEmail, userAfterUpdate.getEmail()); + assertEquals(updatedProfileUrl, userAfterUpdate.getProfileUrl()); + assertEquals(updatedExternalId, userAfterUpdate.getExternalId()); + assertEquals("\"val1_updated\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, userAfterUpdate.getStatus()); + assertEquals(updatedType, userAfterUpdate.getType()); + + User user = pubNubUnderTest.fetchUser(new UserId(randomUserId)) .includeCustom(true) .sync(); - assertNotNull(fetchUserResult); - assertEquals(HttpStatus.SC_OK, fetchUserResult.getStatus()); - assertEquals(randomUserId, fetchUserResult.getData().getId()); - assertEquals(updatedName, fetchUserResult.getData().getName()); - assertEquals(updatedEmail, fetchUserResult.getData().getEmail()); - assertEquals(updatedProfileUrl, fetchUserResult.getData().getProfileUrl()); - assertEquals(updatedExternalId, fetchUserResult.getData().getExternalId()); - assertNotNull(fetchUserResult.getData().getCustom()); - assertEquals(updatedStatus, fetchUserResult.getData().getStatus()); - assertEquals(updatedType, fetchUserResult.getData().getType()); + assertNotNull(user); + assertEquals(randomUserId, user.getId()); + assertEquals(updatedName, user.getName()); + assertEquals(updatedEmail, user.getEmail()); + assertEquals(updatedProfileUrl, user.getProfileUrl()); + assertEquals(updatedExternalId, user.getExternalId()); + assertNotNull(user.getCustom()); + assertEquals(updatedStatus, user.getStatus()); + assertEquals(updatedType, user.getType()); } - @Test - public void updateUser_creates_user_if_user_doesnot_exist() throws PubNubException { + @Test(expected = PubNubException.class) + public void updateUser_should_throw_exception_when_updating_user_that_does_not_exist() throws PubNubException { // given String updatedName = "updatedName" + randomName(); // when - UpdateUserResult updateUserResult = pubNubUnderTest.updateUser() - .userId(new UserId(randomUserId)) + User user = pubNubUnderTest.updateUser(new UserId(randomUserId)) .name(updatedName) .sync(); //then - assertEquals(HttpStatus.SC_OK, updateUserResult.getStatus()); - assertEquals(randomUserId, updateUserResult.getData().getId()); - assertEquals(updatedName, updateUserResult.getData().getName()); + assertEquals(randomUserId, user.getId()); + assertEquals(updatedName, user.getName()); } @Test @@ -227,8 +207,7 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { //given //when - UpsertUserResult upsertUserResult = pubNubUnderTest.upsertUser() - .userId(new UserId(randomUserId)) + User user = pubNubUnderTest.upsertUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -240,16 +219,15 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { .sync(); //then - assertNotNull(upsertUserResult); - assertEquals(HttpStatus.SC_OK, upsertUserResult.getStatus()); - assertEquals(randomUserId, upsertUserResult.getData().getId()); - assertEquals(randomName, upsertUserResult.getData().getName()); - assertEquals(randomEmail, upsertUserResult.getData().getEmail()); - assertEquals(randomProfileUrl, upsertUserResult.getData().getProfileUrl()); - assertEquals(randomExternalId, upsertUserResult.getData().getExternalId()); - assertNotNull(upsertUserResult.getData().getCustom()); - assertEquals(STATUS_ACTIVE, upsertUserResult.getData().getStatus()); - assertEquals(TYPE_HUMAN, upsertUserResult.getData().getType()); + assertNotNull(user); + assertEquals(randomUserId, user.getId()); + assertEquals(randomName, user.getName()); + assertEquals(randomEmail, user.getEmail()); + assertEquals(randomProfileUrl, user.getProfileUrl()); + assertEquals(randomExternalId, user.getExternalId()); + assertNotNull(user.getCustom()); + assertEquals(STATUS_ACTIVE, user.getStatus()); + assertEquals(TYPE_HUMAN, user.getType()); } @@ -264,8 +242,7 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createUser() - .userId(new UserId(randomUserId)) + pubNubUnderTest.createUser(new UserId(randomUserId)) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -277,8 +254,7 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { .sync(); //when - UpsertUserResult upsertUserResult = pubNubUnderTest.upsertUser() - .userId(new UserId(randomUserId)) + User user = pubNubUnderTest.upsertUser(new UserId(randomUserId)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -290,37 +266,28 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { .sync(); //then - assertNotNull(upsertUserResult); - assertEquals(HttpStatus.SC_OK, upsertUserResult.getStatus()); - assertEquals(randomUserId, upsertUserResult.getData().getId()); - assertEquals(updatedName, upsertUserResult.getData().getName()); - assertEquals(updatedEmail, upsertUserResult.getData().getEmail()); - assertEquals(updatedProfileUrl, upsertUserResult.getData().getProfileUrl()); - assertEquals(updatedExternalId, upsertUserResult.getData().getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) upsertUserResult.getData().getCustom()).getAsJsonObject().get("param3").toString()); - assertEquals(updatedStatus, upsertUserResult.getData().getStatus()); - assertEquals(updatedType, upsertUserResult.getData().getType()); + assertNotNull(user); + assertEquals(randomUserId, user.getId()); + assertEquals(updatedName, user.getName()); + assertEquals(updatedEmail, user.getEmail()); + assertEquals(updatedProfileUrl, user.getProfileUrl()); + assertEquals(updatedExternalId, user.getExternalId()); + assertEquals("\"val1_updated\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param1").toString()); + assertEquals("\"val2_updated\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param2").toString()); + assertEquals("\"added\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals(updatedStatus, user.getStatus()); + assertEquals(updatedType, user.getType()); } @After public void tearDown() throws Exception { - pubNubUnderTest.removeUser().userId(new UserId(randomUserId)).sync(); + pubNubUnderTest.removeUser(new UserId(randomUserId)).sync(); } private String getRandomUserIdValue() { return "userId" + new Random().nextInt(100000); } - private static List randomTestUUIDs() { - final List uuids = new ArrayList<>(); - for (int i = 0; i < NUMBER_OF_RANDOM_TEST_UUIDS; i++) { - uuids.add(UUID.randomUUID().toString()); - } - return uuids; - } - private String randomExternalId() { return UUID.randomUUID().toString(); } diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index 65a416e94..a10c651f6 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -313,23 +313,32 @@ public DeleteChannelGroup deleteChannelGroup() { // Start Objects API - /** - * @deprecated Use {@link #createUser()} or {@link #updateUser()} or {@link #upsertUser()} instead. - */ - public SetUUIDMetadata setUUIDMetadata() { - return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public CreateUser createUser(@NotNull UserId userId) { + return CreateUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public CreateUser createUser() { - return CreateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + @NotNull + public FetchUser fetchUser(@NotNull UserId userId) { + return FetchUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + + public UpdateUser updateUser(@NotNull UserId userId) { + return UpdateUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpdateUser updateUser() { - return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public UpsertUser upsertUser(@NotNull UserId userId) { + return UpsertUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpsertUser upsertUser() { - return UpsertUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public RemoveUser removeUser(@NotNull UserId userId) { + return new RemoveUser(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + + /** + * @deprecated Use {@link #createUser(UserId)} or {@link #updateUser(UserId)} or {@link #upsertUser(UserId)} instead. + */ + public SetUUIDMetadata setUUIDMetadata() { + return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @NotNull @@ -338,47 +347,46 @@ public GetAllUUIDMetadata getAllUUIDMetadata() { } /** - * @deprecated Use {@link #removeUser()} instead. + * @deprecated Use {@link #fetchUser(UserId)} instead. */ @NotNull public GetUUIDMetadata getUUIDMetadata() { return GetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - @NotNull - public FetchUser fetchUser() { - return FetchUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); - } - /** - * @deprecated Use {@link #removeUser()} instead. + * @deprecated Use {@link #removeUser(UserId)} instead. */ @NotNull public RemoveUUIDMetadata removeUUIDMetadata() { return new RemoveUUIDMetadata(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public RemoveUser removeUser() { - return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public CreateSpace createSpace(@NotNull SpaceId spaceId) { + return CreateSpace.create(spaceId,this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - /** - * @deprecated Use {@link #createSpace()} or {@link #updateSpace()} or {@link #upsertSpace()} instead. - */ - public SetChannelMetadata.Builder setChannelMetadata() { - return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public FetchSpace fetchSpace(@NotNull SpaceId spaceId) { + return FetchSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public CreateSpace createSpace() { - return CreateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public UpdateSpace updateSpace(@NotNull SpaceId spaceId) { + return UpdateSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpdateSpace updateSpace() { - return UpdateSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public UpsertSpace upsertSpace(@NotNull SpaceId spaceId) { + return UpsertSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpsertSpace upsertSpace() { - return UpsertSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public RemoveSpace removeSpace(@NotNull SpaceId spaceId) { + return new RemoveSpace(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + } + + /** + * @deprecated Use {@link #createSpace(SpaceId)} or {@link #updateSpace(SpaceId)} or {@link #upsertSpace(SpaceId)} instead. + */ + public SetChannelMetadata.Builder setChannelMetadata() { + return SetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @NotNull @@ -387,28 +395,20 @@ public GetAllChannelsMetadata getAllChannelsMetadata() { } /** - * @deprecated Use {@link #fetchSpace()} instead. + * @deprecated Use {@link #fetchSpace(SpaceId)} instead. */ @NotNull public GetChannelMetadata.Builder getChannelMetadata() { return GetChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public FetchSpace fetchSpace() { - return FetchSpace.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); - } - /** - * @deprecated Use {@link #removeSpace()} instead. + * @deprecated Use {@link #removeSpace(SpaceId)} instead. */ public RemoveChannelMetadata.Builder removeChannelMetadata() { return RemoveChannelMetadata.builder(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public RemoveSpace removeSpace() { - return new RemoveSpace(this, this.telemetryManager, this.retrofitManager, this.tokenManager); - } - @NotNull public GetMemberships getMemberships() { return GetMemberships.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java deleted file mode 100644 index d1375b1d9..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/SpaceEndpoint.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.SpaceId; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; - -public abstract class SpaceEndpoint extends ObjectApiEndpoint { - protected SpaceId spaceId; - - protected SpaceEndpoint( - final PubNub pubnubInstance, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final CompositeParameterEnricher compositeParameterEnricher, - final TokenManager tokenManager) { - super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - @Override - protected void validateParams() throws PubNubException { - super.validateParams(); - } - - public SELF spaceId(final SpaceId spaceId) { - this.spaceId = spaceId; - return (SELF) this; - } - - protected SpaceId getSpaceId() { - return spaceId; - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java deleted file mode 100644 index e31ff686a..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; - -public abstract class UserEndpoint extends ObjectApiEndpoint { - private UserId userId; - - protected UserEndpoint( - final PubNub pubnubInstance, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final CompositeParameterEnricher compositeParameterEnricher, - final TokenManager tokenManager) { - super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - @Override - protected void validateParams() throws PubNubException { - super.validateParams(); - } - - public SELF userId(final UserId userId) { - this.userId = userId; - return (SELF) this; - } - - protected UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java index ca762da65..0f6229111 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class CreateSpace extends SpaceEndpoint, CreateSpaceResult> implements CustomIncludeAware { +public abstract class CreateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public CreateSpace( final PubNub pubNub, final TelemetryManager telemetry, @@ -24,12 +24,13 @@ public CreateSpace( } public static CreateSpace create( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract CreateSpace name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java index 464da6b15..cb58fcc96 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -9,67 +10,55 @@ import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { +@Accessors(chain = true, fluent = true) +final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter private String name; + @Setter private String description; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public CreateSpaceCommand( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - @Override - public CreateSpace name(String name) { - this.name = name; - return this; - } - - @Override - public CreateSpace description(String description) { - this.description = description; - return this; - } - - @Override - public CreateSpace custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public CreateSpace status(String status) { - this.status = status; - return this; - } - - @Override - public CreateSpace type(String type) { - this.type = type; - return this; + this.spaceId = spaceId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, custom, status, type); String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - - return getRetrofit().getSpaceService().createSpace(subscribeKey, getSpaceId().getValue(), createSpacePayload, effectiveParams); + return getRetrofit() + .getSpaceService() + .createSpace(subscribeKey, spaceId.getValue(), createSpacePayload, effectiveParams); } @Override @@ -78,11 +67,11 @@ public CompositeParameterEnricher getCompositeParameterEnricher() { } @Override - protected CreateSpaceResult createResponse(Response> input) throws PubNubException { + protected Space createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new CreateSpaceResult(input.body()); + return input.body().getData(); } else { - return new CreateSpaceResult(); + return new Space(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java index d4e773691..64b0d7146 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java @@ -1,17 +1,17 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -public abstract class FetchSpace extends SpaceEndpoint, FetchSpaceResult> implements CustomIncludeAware { +public abstract class FetchSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public FetchSpace( final PubNub pubNub, final TelemetryManager telemetry, @@ -22,11 +22,12 @@ public FetchSpace( } public static FetchSpace create( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new FetchSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java index c8b38f91e..55675e3e5 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -2,13 +2,13 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.FetchSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import retrofit2.Call; @@ -16,29 +16,33 @@ import java.util.Map; -public class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { +final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { + private SpaceId spaceId; + public FetchSpaceCommand( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getSpaceService() - .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), getSpaceId().getValue(), effectiveParams); + .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), effectiveParams); } @Override - protected FetchSpaceResult createResponse(Response> input) throws PubNubException { + protected Space createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new FetchSpaceResult(input.body()); + return input.body().getData(); } else { - return new FetchSpaceResult(); + return new Space(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java index b8bea4258..d7d46beb3 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java @@ -3,8 +3,9 @@ import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; @@ -17,21 +18,24 @@ import java.util.Collections; import java.util.Map; -public class RemoveSpace extends SpaceEndpoint, RemoveSpaceResult> { +public class RemoveSpace extends ObjectApiEndpoint, RemoveSpaceResult> { + private SpaceId spaceId; public RemoveSpace( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager) { super(pubNub, telemetry, retrofitInstance, CompositeParameterEnricher.createDefault(), tokenManager); + this.spaceId = spaceId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getSpaceService() - .removeSpace(getPubnub().getConfiguration().getSubscribeKey(), getSpaceId().getValue(), Collections.emptyMap()); + .removeSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), Collections.emptyMap()); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java index 2e390f8f5..5c22b3023 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpdateSpace extends SpaceEndpoint, UpdateSpaceResult> implements CustomIncludeAware { +public abstract class UpdateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public UpdateSpace( final PubNub pubNub, final TelemetryManager telemetry, @@ -24,12 +24,13 @@ public UpdateSpace( } public static UpdateSpace create( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpdateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract UpdateSpace name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java index 2c9f791a6..f290fe41c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -9,29 +10,39 @@ import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; import java.util.HashMap; import java.util.Map; -public class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { +@Accessors(chain = true, fluent = true) +final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter private String name; + @Setter private String description; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public UpdateSpaceCommand( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; } @Override @@ -47,15 +58,15 @@ protected Call> executeCommand(Map effecti String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getSpaceService() - .updateSpace(subscribeKey, getSpaceId().getValue(), updateSpacePayload, effectiveParams); + .updateSpace(subscribeKey, spaceId.getValue(), updateSpacePayload, effectiveParams); } @Override - protected UpdateSpaceResult createResponse(Response> input) throws PubNubException { + protected Space createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new UpdateSpaceResult(input.body()); + return input.body().getData(); } else { - return new UpdateSpaceResult(); + return new Space(); } } @@ -68,34 +79,4 @@ protected PNOperationType getOperationType() { public CompositeParameterEnricher getCompositeParameterEnricher() { return super.getCompositeParameterEnricher(); } - - @Override - public UpdateSpace name(String name) { - this.name = name; - return this; - } - - @Override - public UpdateSpace description(String description) { - this.description = description; - return this; - } - - @Override - public UpdateSpace custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public UpdateSpace status(String status) { - this.status = status; - return this; - } - - @Override - public UpdateSpace type(String type) { - this.type = type; - return this; - } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java index a937f77c6..6b3c4b795 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.SpaceEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpsertSpace extends SpaceEndpoint, UpsertSpaceResult> implements CustomIncludeAware { +public abstract class UpsertSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public UpsertSpace( final PubNub pubNub, final TelemetryManager telemetry, @@ -24,12 +24,13 @@ public UpsertSpace( } public static UpsertSpace create( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertSpaceCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract UpsertSpace name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java index da3519677..70aacfd40 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -9,29 +10,39 @@ import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; import java.util.HashMap; import java.util.Map; -public class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { +@Accessors(chain = true, fluent = true) +final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter private String name; + @Setter private String description; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public UpsertSpaceCommand( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; } @Override @@ -44,15 +55,15 @@ protected Call> executeCommand(Map effecti final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getSpaceService().upsertSpace(subscribeKey, getSpaceId().getValue(), upsertUserPayload, effectiveParams); + return getRetrofit().getSpaceService().upsertSpace(subscribeKey, spaceId.getValue(), upsertUserPayload, effectiveParams); } @Override - protected UpsertSpaceResult createResponse(Response> input) throws PubNubException { + protected Space createResponse(Response> input) throws PubNubException { if (input != null) { - return new UpsertSpaceResult(input.body()); + return input.body().getData(); } else { - return new UpsertSpaceResult(); + return new Space(); } } @@ -65,34 +76,4 @@ protected PNOperationType getOperationType() { public CompositeParameterEnricher getCompositeParameterEnricher() { return super.getCompositeParameterEnricher(); } - - @Override - public UpsertSpace name(String name) { - this.name = name; - return this; - } - - @Override - public UpsertSpace description(String description) { - this.description = description; - return this; - } - - @Override - public UpsertSpace custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public UpsertSpace status(String status) { - this.status = status; - return this; - } - - @Override - public UpsertSpace type(String type) { - this.type = type; - return this; - } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index caaead33d..90c6d2e04 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class CreateUser extends UserEndpoint, CreateUserResult> implements CustomIncludeAware { +public abstract class CreateUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { CreateUser( final PubNub pubNub, @@ -25,12 +25,13 @@ public abstract class CreateUser extends UserEndpoint { +@Accessors(chain = true, fluent = true) +final class CreateUserCommand extends CreateUser implements HavingCustomInclude { + private UserId userId; + @Setter private String name; + @Setter private String email; + @Setter private String profileUrl; + @Setter private String externalId; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public CreateUserCommand( + final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.userId = userId; } @Override @@ -45,11 +58,10 @@ protected Call> executeCommand(Map effectiv } final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getUserService() - .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); + .createUser(subscribeKey, userId.getValue(), createUserPayload, effectiveParams); } @Override @@ -57,55 +69,12 @@ public CompositeParameterEnricher getCompositeParameterEnricher() { return super.getCompositeParameterEnricher(); } - - @Override - public CreateUser name(String name) { - this.name = name; - return this; - } - - @Override - public CreateUser email(String email) { - this.email = email; - return this; - } - - @Override - public CreateUser profileUrl(String profileUrl) { - this.profileUrl = profileUrl; - return this; - } - - @Override - public CreateUser externalId(String externalId) { - this.externalId = externalId; - return this; - } - - @Override - public CreateUser custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public CreateUser status(String status) { - this.status = status; - return this; - } - - @Override - public CreateUser type(String type) { - this.type = type; - return this; - } - @Override - protected CreateUserResult createResponse(Response> input) throws PubNubException { + protected User createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new CreateUserResult(input.body()); + return input.body().getData(); } else { - return new CreateUserResult(); + return new User(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index d610ad02c..44db288a3 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -1,17 +1,17 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -public abstract class FetchUser extends UserEndpoint, FetchUserResult> implements CustomIncludeAware { +public abstract class FetchUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { FetchUser( final PubNub pubnubInstance, @@ -22,12 +22,14 @@ public abstract class FetchUser extends UserEndpoint { +final class FetchUserCommand extends FetchUser implements HavingCustomInclude { + private UserId userId; public FetchUserCommand( + final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.userId = userId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getUserService() - .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); + .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), userId.getValue(), effectiveParams); } @Override - protected FetchUserResult createResponse(Response> input) throws PubNubException { + protected User createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new FetchUserResult(input.body()); + return input.body().getData(); } else { - return new FetchUserResult(); + return new User(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index 29a7fcad9..8c305b9a6 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -3,8 +3,9 @@ import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; @@ -17,20 +18,24 @@ import java.util.Collections; import java.util.Map; -public class RemoveUser extends UserEndpoint, RemoveUserResult> { +public class RemoveUser extends ObjectApiEndpoint, RemoveUserResult> { + private UserId userId; - public RemoveUser(PubNub pubnubInstance, - TelemetryManager telemetry, - RetrofitManager retrofitInstance, - TokenManager tokenManager) { + public RemoveUser( + final UserId userId, + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final TokenManager tokenManager) { super(pubnubInstance, telemetry, retrofitInstance, CompositeParameterEnricher.createDefault(), tokenManager); + this.userId = userId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getUserService() - .removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); + .removeUser(getPubnub().getConfiguration().getSubscribeKey(), userId.getValue(), Collections.emptyMap()); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index 61ca4eabf..5dff1b9f7 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpdateUser extends UserEndpoint, UpdateUserResult> implements CustomIncludeAware { +public abstract class UpdateUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { UpdateUser( final PubNub pubNub, final TelemetryManager telemetryManager, @@ -24,12 +24,13 @@ public abstract class UpdateUser extends UserEndpoint { + private UserId userId; + @Setter private String name; + @Setter private String email; + @Setter private String profileUrl; + @Setter private String externalId; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public UpdateUserCommand( + final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); - + this.userId = userId; } @Override @@ -50,57 +62,15 @@ protected Call> executeCommand(Map effectiv String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getUserService() - .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); - } - - @Override - public UpdateUser name(String name) { - this.name = name; - return this; - } - - @Override - public UpdateUser email(String email) { - this.email = email; - return this; - } - - @Override - public UpdateUser profileUrl(String profileUrl) { - this.profileUrl = profileUrl; - return this; - } - - @Override - public UpdateUser externalId(String externalId) { - this.externalId = externalId; - return this; - } - - @Override - public UpdateUser custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public UpdateUser status(String status) { - this.status = status; - return this; - } - - @Override - public UpdateUser type(String type) { - this.type = type; - return this; + .updateUser(subscribeKey, userId.getValue(), updateUserPayload, effectiveParams); } @Override - protected UpdateUserResult createResponse(Response> input) throws PubNubException { + protected User createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new UpdateUserResult(input.body()); + return input.body().getData(); } else { - return new UpdateUserResult(); + return new User(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index b8c0aec1c..2eb9dda42 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -1,19 +1,19 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.UpsertUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpsertUser extends UserEndpoint, UpsertUserResult> implements CustomIncludeAware { +public abstract class UpsertUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { UpsertUser( final PubNub pubNub, final TelemetryManager telemetry, @@ -24,12 +24,13 @@ public abstract class UpsertUser extends UserEndpoint { + private UserId userId; + @Setter private String name; + @Setter private String email; + @Setter private String profileUrl; + @Setter private String externalId; + @Setter private Map custom; + @Setter private String status; + @Setter private String type; public UpsertUserCommand( + final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.userId = userId; } @Override @@ -46,57 +59,15 @@ protected Call> executeCommand(Map effectiv final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); + return getRetrofit().getUserService().upsertUser(subscribeKey, userId.getValue(), upsertUserPayload, effectiveParams); } @Override - public UpsertUser name(String name) { - this.name = name; - return this; - } - - @Override - public UpsertUser email(String email) { - this.email = email; - return this; - } - - @Override - public UpsertUser profileUrl(String profileUrl) { - this.profileUrl = profileUrl; - return this; - } - - @Override - public UpsertUser externalId(String externalId) { - this.externalId = externalId; - return this; - } - - @Override - public UpsertUser custom(Map custom) { - this.custom = custom; - return this; - } - - @Override - public UpsertUser status(String status) { - this.status = status; - return this; - } - - @Override - public UpsertUser type(String type) { - this.type = type; - return this; - } - - @Override - protected UpsertUserResult createResponse(Response> input) throws PubNubException { + protected User createResponse(Response> input) throws PubNubException { if (input.body() != null) { - return new UpsertUserResult(input.body()); + return input.body().getData(); } else { - return new UpsertUserResult(); + return new User(); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java deleted file mode 100644 index 8c02b8fbe..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/CreateSpaceResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.space; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - - -@NoArgsConstructor -public class CreateSpaceResult extends SpaceResult { - public CreateSpaceResult(final EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java deleted file mode 100644 index fd470fd3d..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/FetchSpaceResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.space; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class FetchSpaceResult extends SpaceResult { - public FetchSpaceResult(EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java index affb8b0ab..89688f7ef 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java @@ -3,6 +3,7 @@ import com.pubnub.api.models.consumer.objects_api.PNObject; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import lombok.experimental.Accessors; @@ -12,6 +13,7 @@ @Accessors(chain = true) @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) +@NoArgsConstructor public class Space extends PNObject { private String name; private String description; diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java deleted file mode 100644 index 9352a4a3b..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/SpaceResult.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.space; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter(AccessLevel.PACKAGE) -@NoArgsConstructor -@ToString(callSuper = true) -public abstract class SpaceResult extends EntityEnvelope { - public SpaceResult(final EntityEnvelope entityEnvelope) { - this.status = entityEnvelope.getStatus(); - this.data = entityEnvelope.getData(); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java deleted file mode 100644 index ac3774e20..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpdateSpaceResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.space; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class UpdateSpaceResult extends SpaceResult { - public UpdateSpaceResult(final EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java deleted file mode 100644 index b24989cb1..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/UpsertSpaceResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.space; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class UpsertSpaceResult extends SpaceResult { - public UpsertSpaceResult(final EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java deleted file mode 100644 index b0239debe..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/CreateUserResult.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class CreateUserResult extends UserResult { - public CreateUserResult(EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} - diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java deleted file mode 100644 index 780c308d0..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/FetchUserResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class FetchUserResult extends UserResult { - public FetchUserResult(EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java deleted file mode 100644 index ae6970e46..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpdateUserResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.*; - -@NoArgsConstructor -public class UpdateUserResult extends UserResult { - public UpdateUserResult(EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java deleted file mode 100644 index abd047aec..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UpsertUserResult.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class UpsertUserResult extends UserResult { - public UpsertUserResult(EntityEnvelope entityEnvelope) { - super(entityEnvelope); - } -} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java deleted file mode 100644 index be6f3f2d6..000000000 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/UserResult.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.pubnub.api.models.consumer.objects_vsp.user; - -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -@Getter -@Setter(AccessLevel.PACKAGE) -@NoArgsConstructor -@ToString(callSuper = true) -public abstract class UserResult extends EntityEnvelope { - public UserResult(final EntityEnvelope entityEnvelope) { - this.status = entityEnvelope.getStatus(); - this.data = entityEnvelope.getData(); - } -} diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java index 9ad80eb2b..a87de9d89 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/space/SpacePayload.java @@ -1,12 +1,8 @@ package com.pubnub.api.models.server.objects_vsp.space; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; +import lombok.Data; -@Getter -@ToString -@AllArgsConstructor +@Data public abstract class SpacePayload { private final String name; private final String description; diff --git a/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java index dd5beca08..e1330b4d9 100644 --- a/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java +++ b/src/main/java/com/pubnub/api/models/server/objects_vsp/user/UserPayload.java @@ -1,12 +1,8 @@ package com.pubnub.api.models.server.objects_vsp.user; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.ToString; +import lombok.Data; -@Getter -@ToString -@AllArgsConstructor +@Data public abstract class UserPayload { private final String name; private final String email; diff --git a/src/main/java/com/pubnub/api/services/ChannelMetadataService.java b/src/main/java/com/pubnub/api/services/ChannelMetadataService.java index 84d6e092e..54ac1377f 100644 --- a/src/main/java/com/pubnub/api/services/ChannelMetadataService.java +++ b/src/main/java/com/pubnub/api/services/ChannelMetadataService.java @@ -22,7 +22,6 @@ public interface ChannelMetadataService { Call> getChannelMetadata(@Path("subKey") String subKey, @Path("channel") String channel, @QueryMap(encoded = true) Map options); @PATCH("/v2/objects/{subKey}/channels/{channel}") - @Headers("Content-Type: application/json; charset=UTF-8") Call> setChannelsMetadata(@Path("subKey") String subKey, @Path("channel") String channel, @Body SetChannelMetadataPayload setChannelMetadataPayload, @QueryMap(encoded = true) Map options); @DELETE("/v2/objects/{subKey}/channels/{channel}") diff --git a/src/main/java/com/pubnub/api/services/UUIDMetadataService.java b/src/main/java/com/pubnub/api/services/UUIDMetadataService.java index 927707fd7..6f18de53f 100644 --- a/src/main/java/com/pubnub/api/services/UUIDMetadataService.java +++ b/src/main/java/com/pubnub/api/services/UUIDMetadataService.java @@ -23,7 +23,6 @@ public interface UUIDMetadataService { Call> getUUIDMetadata(@Path("subKey") String subKey, @Path("uuid") String uuid, @QueryMap(encoded = true) Map options); @PATCH("/v2/objects/{subKey}/uuids/{uuid}") - @Headers("Content-Type: application/json; charset=UTF-8") Call> setUUIDsMetadata(@Path("subKey") String subKey, @Path("uuid") String uuid, @Body SetUUIDMetadataPayload setUUIDMetadataPayload, @QueryMap(encoded = true) Map options); @DELETE("/v2/objects/{subKey}/uuids/{uuid}") diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index a3619803c..14f7ec180 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -22,7 +22,6 @@ public interface SpaceService { @POST("/v3/objects/{subKey}/spaces/{spaceId}") - @Headers("Content-Type: application/json; charset=UTF-8") Call> createSpace(@Path("subKey") String subKey, @Path("spaceId") String spaceId, @Body CreateSpacePayload createSpacePayload, @QueryMap(encoded = true) Map options); @GET("/v3/objects/{subKey}/spaces/{spaceId}") diff --git a/src/main/java/com/pubnub/api/services/vsp/UserService.java b/src/main/java/com/pubnub/api/services/vsp/UserService.java index 242aaa08b..17bf25e9e 100644 --- a/src/main/java/com/pubnub/api/services/vsp/UserService.java +++ b/src/main/java/com/pubnub/api/services/vsp/UserService.java @@ -14,7 +14,6 @@ public interface UserService { @POST("/v3/objects/{subKey}/users/{userId}") - @Headers("Content-Type: application/json; charset=UTF-8") Call> createUser(@Path("subKey") String subKey, @Path("userId") String userId, @Body CreateUserPayload createUserPayload, @QueryMap(encoded = true) Map options); @GET("/v3/objects/{subKey}/users/{userId}") diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java index cc81d5d68..f866f60a9 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceTest.java @@ -5,7 +5,6 @@ import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; import com.pubnub.api.services.vsp.SpaceService; @@ -37,11 +36,11 @@ public class CreateSpaceTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = CreateSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = CreateSpace.create(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.createSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -58,7 +57,6 @@ public void can_createSpace() throws PubNubException { //when objectUnderTest - .spaceId(new SpaceId(testSpaceIdValue)) .name(spaceName) .description(spaceDescription) .custom(testCustom) diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java index 1ef9ae32a..71bb774ab 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceTest.java @@ -4,7 +4,6 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.CreateSpaceResult; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.services.vsp.SpaceService; @@ -31,10 +30,10 @@ public class FetchSpaceTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = FetchSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = FetchSpace.create(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.fetchSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new CreateSpaceResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -42,9 +41,9 @@ public void can_fetch_space() throws PubNubException { //given //when - objectUnderTest.spaceId(new SpaceId(testSpaceIdValue)).sync(); + objectUnderTest.sync(); //then - verify(spaceServiceMock,times(1)).fetchSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any()); + verify(spaceServiceMock, times(1)).fetchSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any()); } } \ No newline at end of file diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java index 76a784df1..e0bd303fc 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java @@ -33,7 +33,7 @@ public class RemoveSpaceTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = new RemoveSpace(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = new RemoveSpace(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.removeSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any())).thenReturn(call); when(call.execute()).thenReturn(Response.success(new RemoveSpaceResult())); @@ -44,7 +44,7 @@ public void can_remove_space() throws PubNubException { //given //when - objectUnderTest.spaceId(new SpaceId(testSpaceIdValue)).sync(); + objectUnderTest.sync(); //then verify(spaceServiceMock).removeSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java index a0f8d864c..6db665b1d 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceTest.java @@ -5,7 +5,6 @@ import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpdateSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; import com.pubnub.api.services.vsp.SpaceService; @@ -37,12 +36,12 @@ public class UpdateSpaceTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpdateSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpdateSpace.create(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.updateSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new UpdateSpaceResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -58,7 +57,6 @@ public void can_updateSpace() throws PubNubException { //when objectUnderTest - .spaceId(new SpaceId(testSpaceIdValue)) .name(updatedName) .description(updatedDescription) .custom(updatedCustom) diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java index 87c2a0625..afb70239d 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceTest.java @@ -5,7 +5,6 @@ import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.consumer.objects_vsp.space.UpsertSpaceResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; import com.pubnub.api.services.vsp.SpaceService; @@ -37,11 +36,11 @@ public class UpsertSpaceTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpsertSpace.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpsertSpace.create(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.upsertSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new UpsertSpaceResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -57,7 +56,6 @@ public void can_upsertSpace() throws PubNubException { //when objectUnderTest - .spaceId(new SpaceId(testSpaceIdValue)) .name(updatedName) .description(updatedDescription) .custom(updatedCustom) diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index e2cb3e0ae..445a4c5e0 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -4,7 +4,6 @@ import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.CreateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; @@ -33,12 +32,12 @@ public class CreateUserTest extends BaseObjectApiTest { @Before - public void setUp() throws IOException { - objectUnderTest = CreateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + public void setUp() throws IOException, PubNubException { + objectUnderTest = CreateUser.create(new UserId(testUserIdValue),pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new CreateUserResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -46,7 +45,7 @@ public void can_createUser_with_userId() throws PubNubException { //given //when - objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + objectUnderTest.sync(); //then verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java index 7cdd0a7a6..b05810fe6 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java @@ -4,7 +4,6 @@ import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.FetchUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.services.vsp.UserService; @@ -29,10 +28,10 @@ public class FetchUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = FetchUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = FetchUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new FetchUserResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -40,7 +39,7 @@ public void can_fetch_user() throws PubNubException { //given //when - objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + objectUnderTest.sync(); //then verify(userServiceMock, times(1)).fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java index 56096321f..3a9581ddc 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java @@ -32,7 +32,7 @@ public class RemoveUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = new RemoveUser(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = new RemoveUser(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); when(call.execute()).thenReturn(Response.success(new RemoveUserResult())); @@ -43,7 +43,7 @@ public void can_remove_user() throws PubNubException, IOException { //given //when - objectUnderTest.userId(new UserId(testUserIdValue)).sync(); + objectUnderTest.sync(); //then verify(userServiceMock, times(1)).removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java index 91bd67f19..00975d644 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java @@ -4,7 +4,6 @@ import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; @@ -35,10 +34,10 @@ public class UpdateUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpdateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpdateUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.updateUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new UpdateUserResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -57,7 +56,6 @@ public void can_update_user_passing_full_object() throws PubNubException { //when objectUnderTest - .userId(new UserId(testUserIdValue)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -90,7 +88,6 @@ public void can_update_user_with_new_name() throws PubNubException { //when objectUnderTest - .userId(new UserId(testUserIdValue)) .name(updatedName) .sync(); @@ -109,7 +106,6 @@ public void can_update_user_with_new_email() throws PubNubException { //when objectUnderTest - .userId(new UserId(testUserIdValue)) .email(updatedEmail) .sync(); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java index c00df93db..fe0ba9db7 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java @@ -4,7 +4,6 @@ import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.BaseObjectApiTest; import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.UpdateUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; @@ -35,11 +34,11 @@ public class UpsertUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpsertUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpsertUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.upsertUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new UpdateUserResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test @@ -55,7 +54,6 @@ public void can_upsertUser() throws PubNubException { String updatedType = "updatedType"; objectUnderTest - .userId(new UserId(testUserIdValue)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) From 4285deb16a9aa1ad03c78a4ee085344cc4cc4337 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 9 Sep 2022 09:59:48 +0200 Subject: [PATCH 15/21] ObjectV3 user/space changes after code review. --- .../objects_vsp/space/SpaceIT.java | 55 ++++++++------ .../integration/objects_vsp/user/UserIT.java | 73 +++++++++++-------- src/main/java/com/pubnub/api/PubNub.java | 37 ++++++---- .../endpoints/objects_vsp/UserEndpoint.java | 41 +++++++++++ .../objects_vsp/space/CreateSpaceCommand.java | 2 +- .../objects_vsp/space/FetchSpaceCommand.java | 2 +- .../objects_vsp/space/UpdateSpaceCommand.java | 2 +- .../objects_vsp/space/UpsertSpaceCommand.java | 2 +- .../objects_vsp/user/CreateUser.java | 8 +- .../objects_vsp/user/CreateUserCommand.java | 7 +- .../endpoints/objects_vsp/user/FetchUser.java | 9 +-- .../objects_vsp/user/FetchUserCommand.java | 7 +- .../objects_vsp/user/RemoveUser.java | 10 +-- .../objects_vsp/user/UpdateUser.java | 6 +- .../objects_vsp/user/UpdateUserCommand.java | 9 +-- .../objects_vsp/user/UpsertUser.java | 6 +- .../objects_vsp/user/UpsertUserCommand.java | 9 +-- .../pubnub/api/services/vsp/SpaceService.java | 1 - .../objects_vsp/user/CreateUserTest.java | 4 +- .../objects_vsp/user/FetchUserTest.java | 4 +- .../objects_vsp/user/RemoveUserTest.java | 14 +++- .../objects_vsp/user/UpdateUserTest.java | 5 +- .../objects_vsp/user/UpsertUserTest.java | 3 +- 23 files changed, 190 insertions(+), 126 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index cac481146..b8e179828 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; +import org.junit.Before; import org.junit.Test; import java.util.Map; @@ -19,16 +20,22 @@ public class SpaceIT extends ObjectsApiBaseIT { - private final String randomSpaceId = getRandomSpaceIdValue(); + private final String randomSpaceIdValue = getRandomSpaceIdValue(); + private SpaceId randomSpaceId; private final String randomName = randomName(); private final String randomDescription = randomDescription(); + @Before + public void setUp() throws Exception { + randomSpaceId = new SpaceId(randomSpaceIdValue); + } + @Test public void createUserHappyPath() throws PubNubException { //given //when - Space space = pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -39,7 +46,7 @@ public void createUserHappyPath() throws PubNubException { //then assertNotNull(space); - assertEquals(randomSpaceId, space.getId()); + assertEquals(randomSpaceIdValue, space.getId()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); assertNotNull(space.getCustom()); @@ -50,7 +57,7 @@ public void createUserHappyPath() throws PubNubException { @Test(expected = PubNubException.class) public void should_throw_exception_when_space_with_the_spaceId_exists() throws PubNubException { //given - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -60,7 +67,7 @@ public void should_throw_exception_when_space_with_the_spaceId_exists() throws P .sync(); //when - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -75,7 +82,7 @@ public void should_throw_exception_when_space_with_the_spaceId_exists() throws P @Test public void removeSpaceHappyPath() throws PubNubException { //given - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -85,7 +92,7 @@ public void removeSpaceHappyPath() throws PubNubException { .sync(); //when - RemoveSpaceResult removeSpaceResult = pubNubUnderTest.removeSpace(new SpaceId(randomSpaceId)).sync(); + RemoveSpaceResult removeSpaceResult = pubNubUnderTest.removeSpace(randomSpaceId).sync(); //then assertEquals(HttpStatus.SC_OK, removeSpaceResult.getStatus()); @@ -96,7 +103,7 @@ public void removeSpaceHappyPath() throws PubNubException { @Test public void fetchSpaceHappyPath() throws PubNubException { //given - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -106,12 +113,12 @@ public void fetchSpaceHappyPath() throws PubNubException { .sync(); //when - Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.fetchSpace(randomSpaceId) .sync(); //then assertNotNull(space); - assertEquals(randomSpaceId, space.getId()); + assertEquals(randomSpaceIdValue, space.getId()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); assertNotNull(space.getCustom()); @@ -129,7 +136,7 @@ public void updateSpace_passing_full_object_happyPath() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -139,7 +146,7 @@ public void updateSpace_passing_full_object_happyPath() throws PubNubException { .sync(); //when - Space updatedSpace = pubNubUnderTest.updateSpace(new SpaceId(randomSpaceId)) + Space updatedSpace = pubNubUnderTest.updateSpace(randomSpaceId) .name(updatedName) .description(updatedDescription) .custom(updateCustom) @@ -149,7 +156,7 @@ public void updateSpace_passing_full_object_happyPath() throws PubNubException { //then assertNotNull(updatedSpace); - assertEquals(randomSpaceId, updatedSpace.getId()); + assertEquals(randomSpaceIdValue, updatedSpace.getId()); assertEquals(updatedName, updatedSpace.getName()); assertEquals(updatedDescription, updatedSpace.getDescription()); assertEquals(updatedDescription, updatedSpace.getDescription()); @@ -159,11 +166,11 @@ public void updateSpace_passing_full_object_happyPath() throws PubNubException { assertEquals(updatedStatus, updatedSpace.getStatus()); assertEquals(updatedType, updatedSpace.getType()); - Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.fetchSpace(randomSpaceId) .sync(); assertNotNull(space); - assertEquals(randomSpaceId, space.getId()); + assertEquals(randomSpaceIdValue, space.getId()); assertEquals(updatedName, space.getName()); assertEquals(updatedDescription, space.getDescription()); assertNotNull(space.getCustom()); @@ -177,7 +184,7 @@ public void updateSpace_should_throw_exception_when_updating_space_that_does_not String updatedName = "updatedName" + randomName(); //when - pubNubUnderTest.updateSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.updateSpace(randomSpaceId) .name(updatedName) .sync(); @@ -190,7 +197,7 @@ public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { //given //when - Space space = pubNubUnderTest.upsertSpace(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.upsertSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -201,7 +208,7 @@ public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { //then assertNotNull(space); - assertEquals(randomSpaceId, space.getId()); + assertEquals(randomSpaceIdValue, space.getId()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); assertNotNull(space.getCustom()); @@ -218,7 +225,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createSpace(new SpaceId(randomSpaceId)) + pubNubUnderTest.createSpace(randomSpaceId) .name(randomName) .description(randomDescription) .custom(customSpaceObject()) @@ -228,7 +235,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { .sync(); //when - Space spaceAfterUpsert = pubNubUnderTest.upsertSpace(new SpaceId(randomSpaceId)) + Space spaceAfterUpsert = pubNubUnderTest.upsertSpace(randomSpaceId) .name(updatedName) .description(updatedDescription) .custom(updateCustom) @@ -238,7 +245,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { //then assertNotNull(spaceAfterUpsert); - assertEquals(randomSpaceId, spaceAfterUpsert.getId()); + assertEquals(randomSpaceIdValue, spaceAfterUpsert.getId()); assertEquals(updatedName, spaceAfterUpsert.getName()); assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); @@ -248,11 +255,11 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { assertEquals(updatedStatus, spaceAfterUpsert.getStatus()); assertEquals(updatedType, spaceAfterUpsert.getType()); - Space space = pubNubUnderTest.fetchSpace(new SpaceId(randomSpaceId)) + Space space = pubNubUnderTest.fetchSpace(randomSpaceId) .sync(); assertNotNull(space); - assertEquals(randomSpaceId, space.getId()); + assertEquals(randomSpaceIdValue, space.getId()); assertEquals(updatedName, space.getName()); assertEquals(updatedDescription, space.getDescription()); assertNotNull(space.getCustom()); @@ -262,7 +269,7 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { @After public void tearDown() throws Exception { - pubNubUnderTest.removeSpace(new SpaceId(randomSpaceId)).sync(); + pubNubUnderTest.removeSpace(randomSpaceId).sync(); } private String getRandomSpaceIdValue() { diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 959bb3a0c..596e1c469 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -5,15 +5,13 @@ import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; -import com.pubnub.api.integration.objects.uuid.UUIDMetadataIT; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import com.pubnub.api.models.consumer.objects_vsp.user.User; import org.apache.commons.lang3.RandomStringUtils; import org.apache.http.HttpStatus; import org.junit.After; +import org.junit.Before; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.Map; import java.util.Random; @@ -25,22 +23,25 @@ import static org.junit.Assert.assertTrue; public class UserIT extends ObjectsApiBaseIT { - private static final Logger LOG = LoggerFactory.getLogger(UUIDMetadataIT.class); - private static final int NUMBER_OF_RANDOM_TEST_UUIDS = 10; - - - private final String randomUserId = getRandomUserIdValue(); + private final String randomUserIdValue = getRandomUserIdValue(); + private UserId randomUserId; private final String randomName = randomName(); private final String randomEmail = randomEmail(); private final String randomProfileUrl = randomProfileUrl(); private final String randomExternalId = randomExternalId(); + @Before + public void setUp() throws Exception { + randomUserId = new UserId(randomUserIdValue); + } + @Test public void createUserHappyPath() throws PubNubException { //given //when - final User user = pubNubUnderTest.createUser(new UserId(randomUserId)) + final User user = pubNubUnderTest.createUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -53,7 +54,7 @@ public void createUserHappyPath() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -66,7 +67,8 @@ public void createUserHappyPath() throws PubNubException { @Test public void fetchUserHappyPath() throws PubNubException { //given - pubNubUnderTest.createUser(new UserId(randomUserId)) + pubNubUnderTest.createUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -78,12 +80,13 @@ public void fetchUserHappyPath() throws PubNubException { .sync(); //when - User user = pubNubUnderTest.fetchUser(new UserId(randomUserId)) + User user = pubNubUnderTest.fetchUser() + .userId(randomUserId) .includeCustom(true) .sync(); assertNotNull(user); - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -97,7 +100,8 @@ public void fetchUserHappyPath() throws PubNubException { @Test public void removeUserHappyPath() throws PubNubException { // given - pubNubUnderTest.createUser(new UserId(randomUserId)) + pubNubUnderTest.createUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -109,7 +113,8 @@ public void removeUserHappyPath() throws PubNubException { .sync(); //when - RemoveUserResult removeUserResult = pubNubUnderTest.removeUser(new UserId(randomUserId)) + RemoveUserResult removeUserResult = pubNubUnderTest.removeUser() + .userId(randomUserId) .sync(); //then @@ -117,7 +122,8 @@ public void removeUserHappyPath() throws PubNubException { assertEquals(HttpStatus.SC_OK, removeUserResult.getStatus()); //verify if user not exist - FetchUser fetchUser = pubNubUnderTest.fetchUser(new UserId(randomUserId)) + FetchUser fetchUser = pubNubUnderTest.fetchUser() + .userId(randomUserId) .includeCustom(true); PubNubException exception = assertThrows(PubNubException.class, () -> fetchUser.sync()); @@ -136,7 +142,8 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createUser(new UserId(randomUserId)) + pubNubUnderTest.createUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -148,7 +155,8 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); // when - User userAfterUpdate = pubNubUnderTest.updateUser(new UserId(randomUserId)) + User userAfterUpdate = pubNubUnderTest.updateUser() + .userId(randomUserId) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -161,7 +169,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { // then assertNotNull(userAfterUpdate); - assertEquals(randomUserId, userAfterUpdate.getId()); + assertEquals(randomUserIdValue, userAfterUpdate.getId()); assertEquals(updatedName, userAfterUpdate.getName()); assertEquals(updatedEmail, userAfterUpdate.getEmail()); assertEquals(updatedProfileUrl, userAfterUpdate.getProfileUrl()); @@ -172,12 +180,13 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { assertEquals(updatedStatus, userAfterUpdate.getStatus()); assertEquals(updatedType, userAfterUpdate.getType()); - User user = pubNubUnderTest.fetchUser(new UserId(randomUserId)) + User user = pubNubUnderTest.fetchUser() + .userId(randomUserId) .includeCustom(true) .sync(); assertNotNull(user); - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(updatedName, user.getName()); assertEquals(updatedEmail, user.getEmail()); assertEquals(updatedProfileUrl, user.getProfileUrl()); @@ -193,12 +202,13 @@ public void updateUser_should_throw_exception_when_updating_user_that_does_not_e String updatedName = "updatedName" + randomName(); // when - User user = pubNubUnderTest.updateUser(new UserId(randomUserId)) + User user = pubNubUnderTest.updateUser() + .userId(randomUserId) .name(updatedName) .sync(); //then - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(updatedName, user.getName()); } @@ -207,7 +217,8 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { //given //when - User user = pubNubUnderTest.upsertUser(new UserId(randomUserId)) + User user = pubNubUnderTest.upsertUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -220,7 +231,7 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -242,7 +253,8 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; - pubNubUnderTest.createUser(new UserId(randomUserId)) + pubNubUnderTest.createUser() + .userId(randomUserId) .name(randomName) .email(randomEmail) .profileUrl(randomProfileUrl) @@ -254,7 +266,8 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { .sync(); //when - User user = pubNubUnderTest.upsertUser(new UserId(randomUserId)) + User user = pubNubUnderTest.upsertUser() + .userId(randomUserId) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -267,7 +280,7 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserId, user.getId()); + assertEquals(randomUserIdValue, user.getId()); assertEquals(updatedName, user.getName()); assertEquals(updatedEmail, user.getEmail()); assertEquals(updatedProfileUrl, user.getProfileUrl()); @@ -281,7 +294,9 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { @After public void tearDown() throws Exception { - pubNubUnderTest.removeUser(new UserId(randomUserId)).sync(); + pubNubUnderTest.removeUser() + .userId(randomUserId) + .sync(); } private String getRandomUserIdValue() { diff --git a/src/main/java/com/pubnub/api/PubNub.java b/src/main/java/com/pubnub/api/PubNub.java index a10c651f6..706efb632 100644 --- a/src/main/java/com/pubnub/api/PubNub.java +++ b/src/main/java/com/pubnub/api/PubNub.java @@ -313,29 +313,33 @@ public DeleteChannelGroup deleteChannelGroup() { // Start Objects API - public CreateUser createUser(@NotNull UserId userId) { - return CreateUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + @NotNull + public CreateUser createUser() { + return CreateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } @NotNull - public FetchUser fetchUser(@NotNull UserId userId) { - return FetchUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + public FetchUser fetchUser() { + return FetchUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpdateUser updateUser(@NotNull UserId userId) { - return UpdateUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + @NotNull + public UpdateUser updateUser() { + return UpdateUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public UpsertUser upsertUser(@NotNull UserId userId) { - return UpsertUser.create(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + @NotNull + public UpsertUser upsertUser() { + return UpsertUser.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } - public RemoveUser removeUser(@NotNull UserId userId) { - return new RemoveUser(userId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); + @NotNull + public RemoveUser removeUser() { + return new RemoveUser(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } /** - * @deprecated Use {@link #createUser(UserId)} or {@link #updateUser(UserId)} or {@link #upsertUser(UserId)} instead. + * @deprecated Use {@link #createUser()} or {@link #updateUser()} or {@link #upsertUser()} instead. */ public SetUUIDMetadata setUUIDMetadata() { return SetUUIDMetadata.create(this, this.telemetryManager, this.retrofitManager, this.tokenManager); @@ -347,7 +351,7 @@ public GetAllUUIDMetadata getAllUUIDMetadata() { } /** - * @deprecated Use {@link #fetchUser(UserId)} instead. + * @deprecated Use {@link #fetchUser()} instead. */ @NotNull public GetUUIDMetadata getUUIDMetadata() { @@ -355,29 +359,34 @@ public GetUUIDMetadata getUUIDMetadata() { } /** - * @deprecated Use {@link #removeUser(UserId)} instead. + * @deprecated Use {@link #removeUser()} instead. */ @NotNull public RemoveUUIDMetadata removeUUIDMetadata() { return new RemoveUUIDMetadata(this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull public CreateSpace createSpace(@NotNull SpaceId spaceId) { - return CreateSpace.create(spaceId,this, this.telemetryManager, this.retrofitManager, this.tokenManager); + return CreateSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull public FetchSpace fetchSpace(@NotNull SpaceId spaceId) { return FetchSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull public UpdateSpace updateSpace(@NotNull SpaceId spaceId) { return UpdateSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull public UpsertSpace upsertSpace(@NotNull SpaceId spaceId) { return UpsertSpace.create(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } + @NotNull public RemoveSpace removeSpace(@NotNull SpaceId spaceId) { return new RemoveSpace(spaceId, this, this.telemetryManager, this.retrofitManager, this.tokenManager); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java new file mode 100644 index 000000000..2e4ebaa25 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java @@ -0,0 +1,41 @@ +package com.pubnub.api.endpoints.objects_vsp; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; + +public abstract class UserEndpoint extends ObjectApiEndpoint { + private UserId userId; + + protected UserEndpoint( + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final CompositeParameterEnricher compositeParameterEnricher, + final TokenManager tokenManager) { + super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + @Override + protected void validateParams() throws PubNubException { + super.validateParams(); + } + + public SELF userId(final UserId userId) { + this.userId = userId; + return (SELF) this; + } + + protected UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java index cb58fcc96..43340ee97 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -35,7 +35,7 @@ final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclud private String type; - public CreateSpaceCommand( + CreateSpaceCommand( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java index 55675e3e5..98b4a8f0a 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -19,7 +19,7 @@ final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { private SpaceId spaceId; - public FetchSpaceCommand( + FetchSpaceCommand( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java index f290fe41c..41ccf9183 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -34,7 +34,7 @@ final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclud @Setter private String type; - public UpdateSpaceCommand( + UpdateSpaceCommand( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java index 70aacfd40..87b2a26c6 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -34,7 +34,7 @@ final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclud @Setter private String type; - public UpsertSpaceCommand( + UpsertSpaceCommand( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index 90c6d2e04..90771b522 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -1,10 +1,9 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; @@ -13,7 +12,7 @@ import java.util.Map; -public abstract class CreateUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { +public abstract class CreateUser extends UserEndpoint, User> implements CustomIncludeAware { CreateUser( final PubNub pubNub, @@ -25,13 +24,12 @@ public abstract class CreateUser extends ObjectApiEndpoint, } public static CreateUser create( - final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateUserCommand(userId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract CreateUser name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 1c38f878a..6caf93181 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -22,7 +22,6 @@ @Accessors(chain = true, fluent = true) final class CreateUserCommand extends CreateUser implements HavingCustomInclude { - private UserId userId; @Setter private String name; @Setter @@ -38,15 +37,13 @@ final class CreateUserCommand extends CreateUser implements HavingCustomInclude< @Setter private String type; - public CreateUserCommand( - final UserId userId, + CreateUserCommand( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.userId = userId; } @Override @@ -61,7 +58,7 @@ protected Call> executeCommand(Map effectiv String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getUserService() - .createUser(subscribeKey, userId.getValue(), createUserPayload, effectiveParams); + .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index 44db288a3..302e7b0be 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -3,15 +3,15 @@ import com.pubnub.api.PubNub; import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -public abstract class FetchUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { +public abstract class FetchUser extends UserEndpoint, User> implements CustomIncludeAware { FetchUser( final PubNub pubnubInstance, @@ -23,14 +23,11 @@ public abstract class FetchUser extends ObjectApiEndpoint, } public static FetchUser create( - final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchUserCommand(userId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - + return new FetchUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java index 74132597e..2589457f1 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -17,24 +17,21 @@ import java.util.Map; final class FetchUserCommand extends FetchUser implements HavingCustomInclude { - private UserId userId; - public FetchUserCommand( - final UserId userId, + FetchUserCommand( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.userId = userId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getUserService() - .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), userId.getValue(), effectiveParams); + .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index 8c305b9a6..f3a4bf863 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -3,9 +3,8 @@ import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; @@ -18,24 +17,21 @@ import java.util.Collections; import java.util.Map; -public class RemoveUser extends ObjectApiEndpoint, RemoveUserResult> { - private UserId userId; +public class RemoveUser extends UserEndpoint, RemoveUserResult> { public RemoveUser( - final UserId userId, final PubNub pubnubInstance, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager) { super(pubnubInstance, telemetry, retrofitInstance, CompositeParameterEnricher.createDefault(), tokenManager); - this.userId = userId; } @Override protected Call> executeCommand(Map effectiveParams) throws PubNubException { return getRetrofit() .getUserService() - .removeUser(getPubnub().getConfiguration().getSubscribeKey(), userId.getValue(), Collections.emptyMap()); + .removeUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), Collections.emptyMap()); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index 5dff1b9f7..e707e4e32 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -5,6 +5,7 @@ import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; @@ -13,7 +14,7 @@ import java.util.Map; -public abstract class UpdateUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { +public abstract class UpdateUser extends UserEndpoint, User> implements CustomIncludeAware { UpdateUser( final PubNub pubNub, final TelemetryManager telemetryManager, @@ -24,13 +25,12 @@ public abstract class UpdateUser extends ObjectApiEndpoint, } public static UpdateUser create( - final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateUserCommand(userId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpdateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract UpdateUser name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java index 27efe57c0..b469c4b8c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -21,8 +21,7 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -public class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { - private UserId userId; +class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { @Setter private String name; @Setter @@ -38,15 +37,13 @@ public class UpdateUserCommand extends UpdateUser implements HavingCustomInclude @Setter private String type; - public UpdateUserCommand( - final UserId userId, + UpdateUserCommand( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); - this.userId = userId; } @Override @@ -62,7 +59,7 @@ protected Call> executeCommand(Map effectiv String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getUserService() - .updateUser(subscribeKey, userId.getValue(), updateUserPayload, effectiveParams); + .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index 2eb9dda42..41ca9d07c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -5,6 +5,7 @@ import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; @@ -13,7 +14,7 @@ import java.util.Map; -public abstract class UpsertUser extends ObjectApiEndpoint, User> implements CustomIncludeAware { +public abstract class UpsertUser extends UserEndpoint, User> implements CustomIncludeAware { UpsertUser( final PubNub pubNub, final TelemetryManager telemetry, @@ -24,13 +25,12 @@ public abstract class UpsertUser extends ObjectApiEndpoint, } public static UpsertUser create( - final UserId userId, final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertUserCommand(userId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } public abstract UpsertUser name(String name); diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java index c8978b419..1966cb9c5 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -21,8 +21,7 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -public class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { - private UserId userId; +class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { @Setter private String name; @Setter @@ -38,15 +37,13 @@ public class UpsertUserCommand extends UpsertUser implements HavingCustomInclude @Setter private String type; - public UpsertUserCommand( - final UserId userId, + UpsertUserCommand( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.userId = userId; } @Override @@ -59,7 +56,7 @@ protected Call> executeCommand(Map effectiv final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getUserService().upsertUser(subscribeKey, userId.getValue(), upsertUserPayload, effectiveParams); + return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); } @Override diff --git a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java index 14f7ec180..4224054fe 100644 --- a/src/main/java/com/pubnub/api/services/vsp/SpaceService.java +++ b/src/main/java/com/pubnub/api/services/vsp/SpaceService.java @@ -10,7 +10,6 @@ import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; -import retrofit2.http.Headers; import retrofit2.http.PATCH; import retrofit2.http.POST; import retrofit2.http.PUT; diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java index 445a4c5e0..b6ec60b80 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserTest.java @@ -33,7 +33,7 @@ public class CreateUserTest extends BaseObjectApiTest { @Before public void setUp() throws IOException, PubNubException { - objectUnderTest = CreateUser.create(new UserId(testUserIdValue),pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = CreateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); @@ -45,7 +45,7 @@ public void can_createUser_with_userId() throws PubNubException { //given //when - objectUnderTest.sync(); + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); //then verify(userServiceMock, times(1)).createUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java index b05810fe6..8a30a09d3 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserTest.java @@ -28,7 +28,7 @@ public class FetchUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = FetchUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = FetchUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); @@ -39,7 +39,7 @@ public void can_fetch_user() throws PubNubException { //given //when - objectUnderTest.sync(); + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); //then verify(userServiceMock, times(1)).fetchUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java index 3a9581ddc..4b6f3b20d 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUserTest.java @@ -32,7 +32,7 @@ public class RemoveUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = new RemoveUser(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = new RemoveUser(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any())).thenReturn(call); when(call.execute()).thenReturn(Response.success(new RemoveUserResult())); @@ -43,10 +43,20 @@ public void can_remove_user() throws PubNubException, IOException { //given //when - objectUnderTest.sync(); + objectUnderTest.userId(new UserId(testUserIdValue)).sync(); //then verify(userServiceMock, times(1)).removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); + } + + @Test + public void can_remove_user_taking_userId_from_config() throws PubNubException, IOException { + //given + //when + objectUnderTest.sync(); + + //then + verify(userServiceMock, times(1)).removeUser(eq(testSubscriptionKey), eq(testUserIdValue), any()); } } diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java index 00975d644..5cc4bb2eb 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserTest.java @@ -34,7 +34,7 @@ public class UpdateUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpdateUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpdateUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.updateUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); @@ -56,6 +56,7 @@ public void can_update_user_passing_full_object() throws PubNubException { //when objectUnderTest + .userId(new UserId(testUserIdValue)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) @@ -88,6 +89,7 @@ public void can_update_user_with_new_name() throws PubNubException { //when objectUnderTest + .userId(new UserId(testUserIdValue)) .name(updatedName) .sync(); @@ -106,6 +108,7 @@ public void can_update_user_with_new_email() throws PubNubException { //when objectUnderTest + .userId(new UserId(testUserIdValue)) .email(updatedEmail) .sync(); diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java index fe0ba9db7..10ed740f2 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserTest.java @@ -34,7 +34,7 @@ public class UpsertUserTest extends BaseObjectApiTest { @Before public void setUp() throws Exception { - objectUnderTest = UpsertUser.create(new UserId(testUserIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); + objectUnderTest = UpsertUser.create(pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getUserService()).thenReturn(userServiceMock); when(userServiceMock.upsertUser(eq(testSubscriptionKey), eq(testUserIdValue), any(), any())).thenReturn(call); @@ -54,6 +54,7 @@ public void can_upsertUser() throws PubNubException { String updatedType = "updatedType"; objectUnderTest + .userId(new UserId(testUserIdValue)) .name(updatedName) .email(updatedEmail) .profileUrl(updatedProfileUrl) From 7d9852e196f61d35d1db8b12f2bc7100323a4284 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 9 Sep 2022 10:06:39 +0200 Subject: [PATCH 16/21] ObjectV3 user/space changes after code review. --- .../api/endpoints/objects_vsp/user/CreateUserCommand.java | 1 - .../com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java | 1 - .../pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java | 1 - .../com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java | 2 -- .../api/endpoints/objects_vsp/user/UpdateUserCommand.java | 1 - .../com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java | 2 -- .../api/endpoints/objects_vsp/user/UpsertUserCommand.java | 1 - 7 files changed, 9 deletions(-) diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 6caf93181..72d3b2507 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -2,7 +2,6 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index 302e7b0be..4d13b53b7 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -1,7 +1,6 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java index 2589457f1..e5adc29a2 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -2,7 +2,6 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index e707e4e32..3e0d29bed 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,9 +1,7 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java index b469c4b8c..ae478f628 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -2,7 +2,6 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index 41ca9d07c..5ed4a2dc3 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -1,9 +1,7 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java index 1966cb9c5..812a26710 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -2,7 +2,6 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; From ba24d8d60769ca293c5dff9ff3bc6e877a45d895 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Fri, 9 Sep 2022 12:44:35 +0200 Subject: [PATCH 17/21] ObjectV3 user/space changes after code review. --- .../java/com/pubnub/api/integration/objects_vsp/user/UserIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index 596e1c469..e783c83ff 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -239,7 +239,6 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { assertNotNull(user.getCustom()); assertEquals(STATUS_ACTIVE, user.getStatus()); assertEquals(TYPE_HUMAN, user.getType()); - } @Test From 1fede60f98a68cfb93262104d81914d728bbb54c Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Mon, 12 Sep 2022 08:33:43 +0200 Subject: [PATCH 18/21] ObjectV3 user/space changes after code review. --- config/findbugs/excludeFilter.xml | 10 ++++ .../objects_vsp/space/SpaceIT.java | 48 ++++++++++++------- .../integration/objects_vsp/user/UserIT.java | 41 ++++++++++------ .../objects_vsp/space/CreateSpaceCommand.java | 5 +- .../objects_vsp/space/FetchSpaceCommand.java | 3 +- .../objects_vsp/space/RemoveSpace.java | 3 +- .../objects_vsp/space/UpdateSpaceCommand.java | 3 +- .../objects_vsp/space/UpsertSpaceCommand.java | 3 +- .../objects_vsp/user/CreateUserCommand.java | 3 +- .../objects_vsp/user/FetchUserCommand.java | 3 +- .../objects_vsp/user/UpdateUserCommand.java | 3 +- .../objects_vsp/user/UpsertUserCommand.java | 3 +- .../util/CustomPayloadJsonInterceptor.java | 4 +- .../consumer/objects_vsp/ObjectVsp.java | 21 ++++++++ .../objects_vsp/space/RemoveSpaceResult.java | 19 ++------ .../consumer/objects_vsp/space/Space.java | 39 +++++++-------- .../consumer/objects_vsp/user/User.java | 33 ++++++------- .../objects_vsp/util/SpaceIdDeserializer.java | 19 ++++++++ .../objects_vsp/util/UserIdDeserializer.java | 19 ++++++++ .../objects_vsp/space/RemoveSpaceTest.java | 2 +- 20 files changed, 185 insertions(+), 99 deletions(-) create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/ObjectVsp.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/SpaceIdDeserializer.java create mode 100644 src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/UserIdDeserializer.java diff --git a/config/findbugs/excludeFilter.xml b/config/findbugs/excludeFilter.xml index cfcbf506f..c70cca556 100644 --- a/config/findbugs/excludeFilter.xml +++ b/config/findbugs/excludeFilter.xml @@ -25,6 +25,16 @@ + + + + + + + + + + diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java index b8e179828..842371757 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/space/SpaceIT.java @@ -1,6 +1,5 @@ package com.pubnub.api.integration.objects_vsp.space; -import com.google.gson.JsonObject; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; import com.pubnub.api.integration.objects.ObjectsApiBaseIT; @@ -46,14 +45,18 @@ public void createUserHappyPath() throws PubNubException { //then assertNotNull(space); - assertEquals(randomSpaceIdValue, space.getId()); + assertEquals(randomSpaceId.getValue(), space.getId().getValue()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); - assertNotNull(space.getCustom()); + assertEquals("val1", space.getCustom().get("param1").toString()); + assertEquals("val2", space.getCustom().get("param2").toString()); assertEquals(STATUS_ACTIVE, space.getStatus()); assertEquals(TYPE_HUMAN, space.getType()); +// assertNotNull(space.getUpdated()); waiting on https://pubnub.atlassian.net/browse/ENG-4203 +// assertNotNull(space.getETag()); } + @Test(expected = PubNubException.class) public void should_throw_exception_when_space_with_the_spaceId_exists() throws PubNubException { //given @@ -96,8 +99,6 @@ public void removeSpaceHappyPath() throws PubNubException { //then assertEquals(HttpStatus.SC_OK, removeSpaceResult.getStatus()); - - } @Test @@ -118,13 +119,14 @@ public void fetchSpaceHappyPath() throws PubNubException { //then assertNotNull(space); - assertEquals(randomSpaceIdValue, space.getId()); + assertEquals(randomSpaceIdValue, space.getId().getValue()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); assertNotNull(space.getCustom()); assertEquals(STATUS_ACTIVE, space.getStatus()); assertEquals(TYPE_HUMAN, space.getType()); - +// assertNotNull(space.getUpdated()); +// assertNotNull(space.getETag()); } @Test @@ -156,26 +158,30 @@ public void updateSpace_passing_full_object_happyPath() throws PubNubException { //then assertNotNull(updatedSpace); - assertEquals(randomSpaceIdValue, updatedSpace.getId()); + assertEquals(randomSpaceIdValue, updatedSpace.getId().getValue()); assertEquals(updatedName, updatedSpace.getName()); assertEquals(updatedDescription, updatedSpace.getDescription()); assertEquals(updatedDescription, updatedSpace.getDescription()); - assertEquals("\"val1_updated\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) updatedSpace.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals("val1_updated", updatedSpace.getCustom().get("param1").toString()); + assertEquals("val2_updated", updatedSpace.getCustom().get("param2").toString()); + assertEquals("added", updatedSpace.getCustom().get("param3").toString()); assertEquals(updatedStatus, updatedSpace.getStatus()); assertEquals(updatedType, updatedSpace.getType()); +// assertNotNull(updatedSpace.getUpdated()); +// assertNotNull(updatedSpace.getETag()); Space space = pubNubUnderTest.fetchSpace(randomSpaceId) .sync(); assertNotNull(space); - assertEquals(randomSpaceIdValue, space.getId()); + assertEquals(randomSpaceIdValue, space.getId().getValue()); assertEquals(updatedName, space.getName()); assertEquals(updatedDescription, space.getDescription()); assertNotNull(space.getCustom()); assertEquals(updatedStatus, space.getStatus()); assertEquals(updatedType, space.getType()); +// assertNotNull(space.getUpdated()); +// assertNotNull(space.getETag()); } @Test(expected = PubNubException.class) @@ -208,12 +214,14 @@ public void upsertSpaceHappyPath_newSpaceCreated() throws PubNubException { //then assertNotNull(space); - assertEquals(randomSpaceIdValue, space.getId()); + assertEquals(randomSpaceIdValue, space.getId().getValue()); assertEquals(randomName, space.getName()); assertEquals(randomDescription, space.getDescription()); assertNotNull(space.getCustom()); assertEquals(STATUS_ACTIVE, space.getStatus()); assertEquals(TYPE_HUMAN, space.getType()); +// assertNotNull(space.getUpdated()); +// assertNotNull(space.getETag()); } @Test @@ -245,26 +253,30 @@ public void upsertSpaceHappyPath_existingSpaceUpdated() throws PubNubException { //then assertNotNull(spaceAfterUpsert); - assertEquals(randomSpaceIdValue, spaceAfterUpsert.getId()); + assertEquals(randomSpaceIdValue, spaceAfterUpsert.getId().getValue()); assertEquals(updatedName, spaceAfterUpsert.getName()); assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); assertEquals(updatedDescription, spaceAfterUpsert.getDescription()); - assertEquals("\"val1_updated\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) spaceAfterUpsert.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals("val1_updated", spaceAfterUpsert.getCustom().get("param1").toString()); + assertEquals("val2_updated", spaceAfterUpsert.getCustom().get("param2").toString()); + assertEquals("added", spaceAfterUpsert.getCustom().get("param3").toString()); assertEquals(updatedStatus, spaceAfterUpsert.getStatus()); assertEquals(updatedType, spaceAfterUpsert.getType()); +// assertNotNull(spaceAfterUpsert.getUpdated()); +// assertNotNull(spaceAfterUpsert.getETag()); Space space = pubNubUnderTest.fetchSpace(randomSpaceId) .sync(); assertNotNull(space); - assertEquals(randomSpaceIdValue, space.getId()); + assertEquals(randomSpaceIdValue, space.getId().getValue()); assertEquals(updatedName, space.getName()); assertEquals(updatedDescription, space.getDescription()); assertNotNull(space.getCustom()); assertEquals(updatedStatus, space.getStatus()); assertEquals(updatedType, space.getType()); +// assertNotNull(space.getUpdated()); +// assertNotNull(space.getETag()); } @After diff --git a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java index e783c83ff..bdc56706b 100644 --- a/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java +++ b/src/integrationTest/java/com/pubnub/api/integration/objects_vsp/user/UserIT.java @@ -1,6 +1,5 @@ package com.pubnub.api.integration.objects_vsp.user; -import com.google.gson.JsonObject; import com.pubnub.api.PubNubException; import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_vsp.user.FetchUser; @@ -54,7 +53,7 @@ public void createUserHappyPath() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserIdValue, user.getId()); + assertEquals(randomUserIdValue, user.getId().getValue()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -62,6 +61,8 @@ public void createUserHappyPath() throws PubNubException { assertNotNull(user.getCustom()); assertEquals(STATUS_ACTIVE, user.getStatus()); assertEquals(TYPE_HUMAN, user.getType()); +// assertNotNull(user.getUpdated()); +// assertNotNull(user.getETag()); } @Test @@ -86,7 +87,7 @@ public void fetchUserHappyPath() throws PubNubException { .sync(); assertNotNull(user); - assertEquals(randomUserIdValue, user.getId()); + assertEquals(randomUserIdValue, user.getId().getValue()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -94,6 +95,8 @@ public void fetchUserHappyPath() throws PubNubException { assertNotNull(user.getCustom()); assertEquals(STATUS_ACTIVE, user.getStatus()); assertEquals(TYPE_HUMAN, user.getType()); +// assertNotNull(user.getUpdated()); +// assertNotNull(user.getETag()); } @@ -138,7 +141,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { String updatedEmail = "updatedEmail" + randomEmail(); String updatedProfileUrl = "updatedProfileUrl" + randomProfileUrl(); String updatedExternalId = "updatedExternalId" + randomExternalId(); - Map updateCustom = updatedCustomUserObject(); + Map updatedCustom = updatedCustomUserObject(); String updatedStatus = "updatedStatus" + STATUS_ACTIVE; String updatedType = "updatedType" + TYPE_HUMAN; @@ -161,7 +164,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .email(updatedEmail) .profileUrl(updatedProfileUrl) .externalId(updatedExternalId) - .custom(updateCustom) + .custom(updatedCustom) .includeCustom(true) .status(updatedStatus) .type(updatedType) @@ -169,16 +172,18 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { // then assertNotNull(userAfterUpdate); - assertEquals(randomUserIdValue, userAfterUpdate.getId()); + assertEquals(randomUserIdValue, userAfterUpdate.getId().getValue()); assertEquals(updatedName, userAfterUpdate.getName()); assertEquals(updatedEmail, userAfterUpdate.getEmail()); assertEquals(updatedProfileUrl, userAfterUpdate.getProfileUrl()); assertEquals(updatedExternalId, userAfterUpdate.getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) userAfterUpdate.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals("val1_updated", userAfterUpdate.getCustom().get("param1")); + assertEquals("val2_updated", userAfterUpdate.getCustom().get("param2").toString()); + assertEquals("added", userAfterUpdate.getCustom().get("param3").toString()); assertEquals(updatedStatus, userAfterUpdate.getStatus()); assertEquals(updatedType, userAfterUpdate.getType()); +// assertNotNull(userAfterUpdate.getUpdated()); //waiting for https://pubnub.atlassian.net/browse/ENG-4203 +// assertNotNull(userAfterUpdate.getETag()); User user = pubNubUnderTest.fetchUser() .userId(randomUserId) @@ -186,7 +191,7 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { .sync(); assertNotNull(user); - assertEquals(randomUserIdValue, user.getId()); + assertEquals(randomUserIdValue, user.getId().getValue()); assertEquals(updatedName, user.getName()); assertEquals(updatedEmail, user.getEmail()); assertEquals(updatedProfileUrl, user.getProfileUrl()); @@ -194,6 +199,8 @@ public void updateUser_passing_full_object_happyPath() throws PubNubException { assertNotNull(user.getCustom()); assertEquals(updatedStatus, user.getStatus()); assertEquals(updatedType, user.getType()); +// assertNotNull(user.getUpdated()); waiting on https://pubnub.atlassian.net/browse/ENG-4203 +// assertNotNull(user.getETag()); } @Test(expected = PubNubException.class) @@ -231,7 +238,7 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserIdValue, user.getId()); + assertEquals(randomUserIdValue, user.getId().getValue()); assertEquals(randomName, user.getName()); assertEquals(randomEmail, user.getEmail()); assertEquals(randomProfileUrl, user.getProfileUrl()); @@ -239,6 +246,8 @@ public void upsertUserHappyPath_newUserCreated() throws PubNubException { assertNotNull(user.getCustom()); assertEquals(STATUS_ACTIVE, user.getStatus()); assertEquals(TYPE_HUMAN, user.getType()); +// assertNotNull(user.getUpdated()); +// assertNotNull(user.getETag()); } @Test @@ -279,16 +288,18 @@ public void upsertUserHappyPath_existingUserUpdated() throws PubNubException { //then assertNotNull(user); - assertEquals(randomUserIdValue, user.getId()); + assertEquals(randomUserIdValue, user.getId().getValue()); assertEquals(updatedName, user.getName()); assertEquals(updatedEmail, user.getEmail()); assertEquals(updatedProfileUrl, user.getProfileUrl()); assertEquals(updatedExternalId, user.getExternalId()); - assertEquals("\"val1_updated\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param1").toString()); - assertEquals("\"val2_updated\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param2").toString()); - assertEquals("\"added\"", ((JsonObject) user.getCustom()).getAsJsonObject().get("param3").toString()); + assertEquals("val1_updated", user.getCustom().get("param1").toString()); + assertEquals("val2_updated", user.getCustom().get("param2").toString()); + assertEquals("added", user.getCustom().get("param3").toString()); assertEquals(updatedStatus, user.getStatus()); assertEquals(updatedType, user.getType()); +// assertNotNull(user.getUpdated()); +// assertNotNull(user.getETag()); } @After diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java index 43340ee97..52cf0c528 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -3,6 +3,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -54,7 +55,7 @@ protected Call> executeCommand(Map effecti customHashMap.putAll(custom); } - final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, custom, status, type); + final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, customHashMap, status, type); String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); return getRetrofit() .getSpaceService() @@ -71,7 +72,7 @@ protected Space createResponse(Response> input) throws Pub if (input.body() != null) { return input.body().getData(); } else { - return new Space(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java index 98b4a8f0a..f89a0b1f2 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -3,6 +3,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -42,7 +43,7 @@ protected Space createResponse(Response> input) throws Pub if (input.body() != null) { return input.body().getData(); } else { - return new Space(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java index d7d46beb3..6a9902b17 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpace.java @@ -40,7 +40,8 @@ protected Call> executeCommand(Map e @Override protected RemoveSpaceResult createResponse(Response> input) throws PubNubException { - return new RemoveSpaceResult(input.body()); + int status = input.body().getStatus(); + return new RemoveSpaceResult(status); } @Override diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java index 41ccf9183..9c7814e0b 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -3,6 +3,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -66,7 +67,7 @@ protected Space createResponse(Response> input) throws Pub if (input.body() != null) { return input.body().getData(); } else { - return new Space(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java index 87b2a26c6..3ccd31140 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -3,6 +3,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -63,7 +64,7 @@ protected Space createResponse(Response> input) throws Pub if (input != null) { return input.body().getData(); } else { - return new Space(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 72d3b2507..1140c6b2c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -70,7 +71,7 @@ protected User createResponse(Response> input) throws PubNu if (input.body() != null) { return input.body().getData(); } else { - return new User(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java index e5adc29a2..28b4afc0e 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -38,7 +39,7 @@ protected User createResponse(Response> input) throws PubNu if (input.body() != null) { return input.body().getData(); } else { - return new User(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java index ae478f628..86a5ee3ad 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -66,7 +67,7 @@ protected User createResponse(Response> input) throws PubNu if (input.body() != null) { return input.body().getData(); } else { - return new User(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java index 812a26710..ad4d58903 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -2,6 +2,7 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; @@ -63,7 +64,7 @@ protected User createResponse(Response> input) throws PubNu if (input.body() != null) { return input.body().getData(); } else { - return new User(); + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); } } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_api/util/CustomPayloadJsonInterceptor.java b/src/main/java/com/pubnub/api/models/consumer/objects_api/util/CustomPayloadJsonInterceptor.java index d6d57593e..2a35db30c 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_api/util/CustomPayloadJsonInterceptor.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_api/util/CustomPayloadJsonInterceptor.java @@ -10,12 +10,14 @@ import com.google.gson.JsonSerializer; import java.lang.reflect.Type; +import java.util.Map; public class CustomPayloadJsonInterceptor implements JsonDeserializer, JsonSerializer { @Override public Object deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return json; + Map map = new Gson().fromJson(json.toString(), Map.class); + return map; } @Override diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/ObjectVsp.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/ObjectVsp.java new file mode 100644 index 000000000..d10df1d06 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/ObjectVsp.java @@ -0,0 +1,21 @@ +package com.pubnub.api.models.consumer.objects_vsp; + +import com.google.gson.annotations.JsonAdapter; +import com.pubnub.api.models.consumer.objects_api.util.CustomPayloadJsonInterceptor; +import lombok.Data; +import lombok.Setter; +import lombok.experimental.Accessors; + +import java.util.Map; + +@Data +@Accessors(chain = true) +public class ObjectVsp { + + @JsonAdapter(CustomPayloadJsonInterceptor.class) + @Setter + protected Map custom; + + protected String updated; + protected String eTag; +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java index 2acdd86a8..9cf7b2347 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/RemoveSpaceResult.java @@ -1,19 +1,8 @@ package com.pubnub.api.models.consumer.objects_vsp.space; -import com.google.gson.JsonElement; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.Data; -@Getter -@Setter(AccessLevel.PACKAGE) -@NoArgsConstructor -@ToString(callSuper = true) -public class RemoveSpaceResult extends EntityEnvelope { - public RemoveSpaceResult(final EntityEnvelope entityEnvelope) { - this.status = entityEnvelope.getStatus(); - } +@Data +public class RemoveSpaceResult { + private final int status; } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java index 89688f7ef..1f4fe5651 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/space/Space.java @@ -1,37 +1,30 @@ package com.pubnub.api.models.consumer.objects_vsp.space; -import com.pubnub.api.models.consumer.objects_api.PNObject; +import com.google.gson.annotations.JsonAdapter; +import com.pubnub.api.SpaceId; +import com.pubnub.api.models.consumer.objects_vsp.ObjectVsp; +import com.pubnub.api.models.consumer.objects_vsp.util.SpaceIdDeserializer; +import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; -import lombok.ToString; -import lombok.experimental.Accessors; -@Getter -@Setter -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@NoArgsConstructor -public class Space extends PNObject { +import java.util.Map; + +@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true) +@Data +public class Space extends ObjectVsp { + + @EqualsAndHashCode.Include + @JsonAdapter(SpaceIdDeserializer.class) + @Setter + private SpaceId id; private String name; private String description; private String status; private String type; - public Space(String id, String name, String description) { - super(id); - this.name = name; - this.description = description; - } - - public Space(String id, String name) { - this(id, name, null); - } - @Override - public PNObject setCustom(Object custom) { + public Space setCustom(Map custom) { super.setCustom(custom); return this; } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java index 8b64005ba..0955c785f 100644 --- a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/user/User.java @@ -1,16 +1,22 @@ package com.pubnub.api.models.consumer.objects_vsp.user; -import com.pubnub.api.models.consumer.objects_api.PNObject; -import lombok.*; -import lombok.experimental.Accessors; +import com.google.gson.annotations.JsonAdapter; +import com.pubnub.api.UserId; +import com.pubnub.api.models.consumer.objects_vsp.ObjectVsp; +import com.pubnub.api.models.consumer.objects_vsp.util.UserIdDeserializer; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Setter; -@Getter -@Setter -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@NoArgsConstructor -public class User extends PNObject { +import java.util.Map; + +@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true) +@Data +public class User extends ObjectVsp { + @EqualsAndHashCode.Include + @JsonAdapter(UserIdDeserializer.class) + @Setter + private UserId id; private String name; private String email; private String externalId; @@ -18,13 +24,8 @@ public class User extends PNObject { private String status; private String type; - public User(String id, String name) { - super(id); - this.name = name; - } - @Override - public User setCustom(Object custom) { + public User setCustom(Map custom) { super.setCustom(custom); return this; } diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/SpaceIdDeserializer.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/SpaceIdDeserializer.java new file mode 100644 index 000000000..ab024e2e5 --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/SpaceIdDeserializer.java @@ -0,0 +1,19 @@ +package com.pubnub.api.models.consumer.objects_vsp.util; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.pubnub.api.SpaceId; +import lombok.SneakyThrows; + +import java.lang.reflect.Type; + +public class SpaceIdDeserializer implements JsonDeserializer { + @SneakyThrows + @Override + public SpaceId deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + String spaceIdValue = json.getAsString(); + return new SpaceId(spaceIdValue); + } +} diff --git a/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/UserIdDeserializer.java b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/UserIdDeserializer.java new file mode 100644 index 000000000..cc20d809b --- /dev/null +++ b/src/main/java/com/pubnub/api/models/consumer/objects_vsp/util/UserIdDeserializer.java @@ -0,0 +1,19 @@ +package com.pubnub.api.models.consumer.objects_vsp.util; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.pubnub.api.UserId; +import lombok.SneakyThrows; + +import java.lang.reflect.Type; + +public class UserIdDeserializer implements JsonDeserializer { + @SneakyThrows + @Override + public UserId deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + String userIdValue = json.getAsString(); + return new UserId(userIdValue); + } +} diff --git a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java index e0bd303fc..946a64c55 100644 --- a/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java +++ b/src/test/java/com/pubnub/api/endpoints/objects_vsp/space/RemoveSpaceTest.java @@ -36,7 +36,7 @@ public void setUp() throws Exception { objectUnderTest = new RemoveSpace(new SpaceId(testSpaceIdValue), pubNubMock, telemetryManagerMock, retrofitManagerMock, new TokenManager()); when(retrofitManagerMock.getSpaceService()).thenReturn(spaceServiceMock); when(spaceServiceMock.removeSpace(eq(testSubscriptionKey), eq(testSpaceIdValue), any())).thenReturn(call); - when(call.execute()).thenReturn(Response.success(new RemoveSpaceResult())); + when(call.execute()).thenReturn(Response.success(new EntityEnvelope<>())); } @Test From a7e19696b1fa6ee311575f5574a4c0101de63873 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Tue, 13 Sep 2022 10:29:59 +0200 Subject: [PATCH 19/21] ObjectV3 user/space changes after code review. Removed *Command classes Removed UserEndpoint classes Made CreateSpace, FetchSpace..., CreateUser, FetchUser... non abstract --- .../endpoints/objects_vsp/UserEndpoint.java | 41 --------- .../objects_vsp/space/CreateSpace.java | 64 ++++++++++++-- .../objects_vsp/space/CreateSpaceCommand.java | 83 ------------------- .../objects_vsp/space/FetchSpace.java | 44 +++++++++- .../objects_vsp/space/FetchSpaceCommand.java | 59 ------------- .../objects_vsp/space/UpdateSpace.java | 65 +++++++++++++-- .../objects_vsp/space/UpdateSpaceCommand.java | 83 ------------------- .../objects_vsp/space/UpsertSpace.java | 63 ++++++++++++-- .../objects_vsp/space/UpsertSpaceCommand.java | 80 ------------------ .../objects_vsp/user/CreateUser.java | 78 ++++++++++++++--- .../objects_vsp/user/CreateUserCommand.java | 82 ------------------ .../endpoints/objects_vsp/user/FetchUser.java | 56 ++++++++++++- .../objects_vsp/user/FetchUserCommand.java | 56 ------------- .../objects_vsp/user/RemoveUser.java | 18 +++- .../objects_vsp/user/UpdateUser.java | 79 +++++++++++++++--- .../objects_vsp/user/UpdateUserCommand.java | 83 ------------------- .../objects_vsp/user/UpsertUser.java | 76 ++++++++++++++--- .../objects_vsp/user/UpsertUserCommand.java | 80 ------------------ 18 files changed, 477 insertions(+), 713 deletions(-) delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java deleted file mode 100644 index 2e4ebaa25..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; - -public abstract class UserEndpoint extends ObjectApiEndpoint { - private UserId userId; - - protected UserEndpoint( - final PubNub pubnubInstance, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final CompositeParameterEnricher compositeParameterEnricher, - final TokenManager tokenManager) { - super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - @Override - protected void validateParams() throws PubNubException { - super.validateParams(); - } - - public SELF userId(final UserId userId) { - this.userId = userId; - return (SELF) this; - } - - protected UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java index 0f6229111..69e97a805 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -1,26 +1,50 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class CreateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class CreateSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + public CreateSpace( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + this.spaceId = spaceId; } public static CreateSpace create( @@ -30,17 +54,41 @@ public static CreateSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract CreateSpace name(String name); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } - public abstract CreateSpace description(String description); + final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, customHashMap, status, type); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getSpaceService() + .createSpace(subscribeKey, spaceId.getValue(), createSpacePayload, effectiveParams); + } - public abstract CreateSpace custom(Map custom); + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } - public abstract CreateSpace status(String status); + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract CreateSpace type(String type); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateSpaceOperation; + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java deleted file mode 100644 index 52cf0c528..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.space; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - - CreateSpaceCommand( - final SpaceId spaceId, - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.spaceId = spaceId; - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, customHashMap, status, type); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getSpaceService() - .createSpace(subscribeKey, spaceId.getValue(), createSpacePayload, effectiveParams); - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } - - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNCreateSpaceOperation; - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java index 64b0d7146..4da563eac 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java @@ -1,24 +1,35 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +public class FetchSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { + private SpaceId spaceId; -public abstract class FetchSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public FetchSpace( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + this.spaceId = spaceId; } public static FetchSpace create( @@ -28,6 +39,33 @@ public static FetchSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new FetchSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getSpaceService() + .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), effectiveParams); + } + + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java deleted file mode 100644 index f89a0b1f2..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.space; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.Map; - -final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { - private SpaceId spaceId; - - FetchSpaceCommand( - final SpaceId spaceId, - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.spaceId = spaceId; - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit() - .getSpaceService() - .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), effectiveParams); - } - - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNFetchSpaceOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java index 5c22b3023..d324b3b85 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java @@ -1,26 +1,50 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class UpdateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class UpdateSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + public UpdateSpace( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + this.spaceId = spaceId; } public static UpdateSpace create( @@ -30,17 +54,42 @@ public static UpdateSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpdateSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpdateSpace name(String name); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } - public abstract UpdateSpace description(String description); + final UpdateSpacePayload updateSpacePayload = new UpdateSpacePayload(name, description, customHashMap, status, type); - public abstract UpdateSpace custom(Map custom); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getSpaceService() + .updateSpace(subscribeKey, spaceId.getValue(), updateSpacePayload, effectiveParams); + } - public abstract UpdateSpace status(String status); + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract UpdateSpace type(String type); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java deleted file mode 100644 index 9c7814e0b..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.space; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - UpdateSpaceCommand( - final SpaceId spaceId, - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.spaceId = spaceId; - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final UpdateSpacePayload updateSpacePayload = new UpdateSpacePayload(name, description, customHashMap, status, type); - - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getSpaceService() - .updateSpace(subscribeKey, spaceId.getValue(), updateSpacePayload, effectiveParams); - } - - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpdateSpaceOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java index 6b3c4b795..69fa3e869 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java @@ -1,26 +1,50 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class UpsertSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class UpsertSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + public UpsertSpace( + final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + this.spaceId = spaceId; } public static UpsertSpace create( @@ -30,16 +54,39 @@ public static UpsertSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpsertSpace name(String name); - public abstract UpsertSpace description(String description); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getSpaceService().upsertSpace(subscribeKey, spaceId.getValue(), upsertUserPayload, effectiveParams); + } - public abstract UpsertSpace custom(Map custom); + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract UpsertSpace status(String status); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertSpaceOperation; + } - public abstract UpsertSpace type(String type); + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java deleted file mode 100644 index 3ccd31140..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.space; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - UpsertSpaceCommand( - final SpaceId spaceId, - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - this.spaceId = spaceId; - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); - - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getSpaceService().upsertSpace(subscribeKey, spaceId.getValue(), upsertUserPayload, effectiveParams); - } - - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpsertSpaceOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index 90771b522..bee45fbda 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -1,18 +1,45 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class CreateUser extends UserEndpoint, User> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class CreateUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { + @Setter + private UserId userId; + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; CreateUser( final PubNub pubNub, @@ -29,20 +56,49 @@ public static CreateUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract CreateUser name(String name); - public abstract CreateUser email(String email); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } - public abstract CreateUser profileUrl(String profileUrl); + final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); + } - public abstract CreateUser externalId(String externalId); + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } - public abstract CreateUser custom(Map custom); + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract CreateUser status(String status); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateUserOperation; + } - public abstract CreateUser type(String type); + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java deleted file mode 100644 index 1140c6b2c..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.user; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -final class CreateUserCommand extends CreateUser implements HavingCustomInclude { - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - CreateUserCommand( - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getUserService() - .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } - - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNCreateUserOperation; - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index 4d13b53b7..f52df2b0b 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -1,16 +1,29 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; -public abstract class FetchUser extends UserEndpoint, User> implements CustomIncludeAware { +import java.util.Map; + +@Accessors(chain = true, fluent = true) +public class FetchUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { + @Setter + private UserId userId; FetchUser( final PubNub pubnubInstance, @@ -27,6 +40,41 @@ public static FetchUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new FetchUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getUserService() + .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); + } + + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchUserOperation; + } + + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java deleted file mode 100644 index 28b4afc0e..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.user; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.Map; - -final class FetchUserCommand extends FetchUser implements HavingCustomInclude { - - FetchUserCommand( - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit() - .getUserService() - .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); - } - - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNFetchUserOperation; - } - - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index f3a4bf863..51601d9eb 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -3,21 +3,27 @@ import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.Setter; +import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; import java.util.Collections; import java.util.Map; -public class RemoveUser extends UserEndpoint, RemoveUserResult> { +@Accessors(chain = true, fluent = true) +public class RemoveUser extends ObjectApiEndpoint, RemoveUserResult> { + @Setter + private UserId userId; public RemoveUser( final PubNub pubnubInstance, @@ -43,4 +49,12 @@ protected RemoveUserResult createResponse(Response> protected PNOperationType getOperationType() { return PNOperationType.PNRemoveUserOperation; } + + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index 3e0d29bed..fbf68cbf2 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,18 +1,46 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class UpdateUser extends UserEndpoint, User> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class UpdateUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { + @Setter + private UserId userId; + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + UpdateUser( final PubNub pubNub, final TelemetryManager telemetryManager, @@ -28,20 +56,49 @@ public static UpdateUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpdateUser(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); } - public abstract UpdateUser name(String name); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } - public abstract UpdateUser email(String email); + final UpdateUserPayload updateUserPayload = new UpdateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - public abstract UpdateUser profileUrl(String profileUrl); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); + } - public abstract UpdateUser externalId(String externalId); + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract UpdateUser custom(Map custom); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateUserOperation; + } - public abstract UpdateUser status(String status); + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } - public abstract UpdateUser type(String type); + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java deleted file mode 100644 index 86a5ee3ad..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.user; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - UpdateUserCommand( - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final UpdateUserPayload updateUserPayload = new UpdateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getUserService() - .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); - } - - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpdateUserOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index 5ed4a2dc3..daa74f62b 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -1,18 +1,46 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; +import java.util.HashMap; import java.util.Map; -public abstract class UpsertUser extends UserEndpoint, User> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public class UpsertUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { + @Setter + private UserId userId; + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + UpsertUser( final PubNub pubNub, final TelemetryManager telemetry, @@ -28,20 +56,46 @@ public static UpsertUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpsertUser name(String name); + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } - public abstract UpsertUser email(String email); + final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - public abstract UpsertUser profileUrl(String profileUrl); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); + } - public abstract UpsertUser externalId(String externalId); + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } - public abstract UpsertUser custom(Map custom); + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertUserOperation; + } - public abstract UpsertUser status(String status); + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } - public abstract UpsertUser type(String type); + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java deleted file mode 100644 index ad4d58903..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp.user; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.builder.PubNubErrorBuilder; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; -import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.HashMap; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - - UpsertUserCommand( - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); - } - - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpsertUserOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } -} From 30339ac576c60b01116dbd9345e121656c7f4167 Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Tue, 13 Sep 2022 13:39:09 +0200 Subject: [PATCH 20/21] Revert "ObjectV3 user/space changes after code review." This reverts commit a7e19696b1fa6ee311575f5574a4c0101de63873. --- .../endpoints/objects_vsp/UserEndpoint.java | 41 +++++++++ .../objects_vsp/space/CreateSpace.java | 64 ++------------ .../objects_vsp/space/CreateSpaceCommand.java | 83 +++++++++++++++++++ .../objects_vsp/space/FetchSpace.java | 44 +--------- .../objects_vsp/space/FetchSpaceCommand.java | 59 +++++++++++++ .../objects_vsp/space/UpdateSpace.java | 65 ++------------- .../objects_vsp/space/UpdateSpaceCommand.java | 83 +++++++++++++++++++ .../objects_vsp/space/UpsertSpace.java | 63 ++------------ .../objects_vsp/space/UpsertSpaceCommand.java | 80 ++++++++++++++++++ .../objects_vsp/user/CreateUser.java | 78 +++-------------- .../objects_vsp/user/CreateUserCommand.java | 82 ++++++++++++++++++ .../endpoints/objects_vsp/user/FetchUser.java | 56 +------------ .../objects_vsp/user/FetchUserCommand.java | 56 +++++++++++++ .../objects_vsp/user/RemoveUser.java | 18 +--- .../objects_vsp/user/UpdateUser.java | 79 +++--------------- .../objects_vsp/user/UpdateUserCommand.java | 83 +++++++++++++++++++ .../objects_vsp/user/UpsertUser.java | 76 +++-------------- .../objects_vsp/user/UpsertUserCommand.java | 80 ++++++++++++++++++ 18 files changed, 713 insertions(+), 477 deletions(-) create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java create mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java new file mode 100644 index 000000000..2e4ebaa25 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java @@ -0,0 +1,41 @@ +package com.pubnub.api.endpoints.objects_vsp; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; + +public abstract class UserEndpoint extends ObjectApiEndpoint { + private UserId userId; + + protected UserEndpoint( + final PubNub pubnubInstance, + final TelemetryManager telemetry, + final RetrofitManager retrofitInstance, + final CompositeParameterEnricher compositeParameterEnricher, + final TokenManager tokenManager) { + super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); + } + + @Override + protected void validateParams() throws PubNubException { + super.validateParams(); + } + + public SELF userId(final UserId userId) { + this.userId = userId; + return (SELF) this; + } + + protected UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java index 69e97a805..0f6229111 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -1,50 +1,26 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class CreateSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - +public abstract class CreateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public CreateSpace( - final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - this.spaceId = spaceId; } public static CreateSpace create( @@ -54,41 +30,17 @@ public static CreateSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } + public abstract CreateSpace name(String name); - final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, customHashMap, status, type); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getSpaceService() - .createSpace(subscribeKey, spaceId.getValue(), createSpacePayload, effectiveParams); - } + public abstract CreateSpace description(String description); - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract CreateSpace custom(Map custom); - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract CreateSpace status(String status); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNCreateSpaceOperation; - } + public abstract CreateSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java new file mode 100644 index 000000000..52cf0c528 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -0,0 +1,83 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.CreateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + + CreateSpaceCommand( + final SpaceId spaceId, + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final CreateSpacePayload createSpacePayload = new CreateSpacePayload(name, description, customHashMap, status, type); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getSpaceService() + .createSpace(subscribeKey, spaceId.getValue(), createSpacePayload, effectiveParams); + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateSpaceOperation; + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java index 4da563eac..64b0d7146 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java @@ -1,35 +1,24 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import retrofit2.Call; -import retrofit2.Response; - -import java.util.Map; - -public class FetchSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { - private SpaceId spaceId; +public abstract class FetchSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public FetchSpace( - final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - this.spaceId = spaceId; } public static FetchSpace create( @@ -39,33 +28,6 @@ public static FetchSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit() - .getSpaceService() - .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), effectiveParams); - } - - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNFetchSpaceOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); + return new FetchSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java new file mode 100644 index 000000000..f89a0b1f2 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -0,0 +1,59 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { + private SpaceId spaceId; + + FetchSpaceCommand( + final SpaceId spaceId, + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getSpaceService() + .fetchSpace(getPubnub().getConfiguration().getSubscribeKey(), spaceId.getValue(), effectiveParams); + } + + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java index d324b3b85..5c22b3023 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java @@ -1,50 +1,26 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class UpdateSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - +public abstract class UpdateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public UpdateSpace( - final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - this.spaceId = spaceId; } public static UpdateSpace create( @@ -54,42 +30,17 @@ public static UpdateSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpdateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } + public abstract UpdateSpace name(String name); - final UpdateSpacePayload updateSpacePayload = new UpdateSpacePayload(name, description, customHashMap, status, type); + public abstract UpdateSpace description(String description); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getSpaceService() - .updateSpace(subscribeKey, spaceId.getValue(), updateSpacePayload, effectiveParams); - } + public abstract UpdateSpace custom(Map custom); - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract UpdateSpace status(String status); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpdateSpaceOperation; - } - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract UpdateSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java new file mode 100644 index 000000000..9c7814e0b --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -0,0 +1,83 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpdateSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + UpdateSpaceCommand( + final SpaceId spaceId, + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpdateSpacePayload updateSpacePayload = new UpdateSpacePayload(name, description, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getSpaceService() + .updateSpace(subscribeKey, spaceId.getValue(), updateSpacePayload, effectiveParams); + } + + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java index 69fa3e869..6b3c4b795 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java @@ -1,50 +1,26 @@ package com.pubnub.api.endpoints.objects_vsp.space; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; import com.pubnub.api.SpaceId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class UpsertSpace extends ObjectApiEndpoint, Space> implements HavingCustomInclude { - private final SpaceId spaceId; - @Setter - private String name; - @Setter - private String description; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - +public abstract class UpsertSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { public UpsertSpace( - final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetry, final RetrofitManager retrofitInstance, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - this.spaceId = spaceId; } public static UpsertSpace create( @@ -54,39 +30,16 @@ public static UpsertSpace create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertSpace(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } + public abstract UpsertSpace name(String name); - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } - - final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); - - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getSpaceService().upsertSpace(subscribeKey, spaceId.getValue(), upsertUserPayload, effectiveParams); - } + public abstract UpsertSpace description(String description); - @Override - protected Space createResponse(Response> input) throws PubNubException { - if (input != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract UpsertSpace custom(Map custom); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpsertSpaceOperation; - } + public abstract UpsertSpace status(String status); - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract UpsertSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java new file mode 100644 index 000000000..3ccd31140 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -0,0 +1,80 @@ +package com.pubnub.api.endpoints.objects_vsp.space; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.SpaceId; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.space.Space; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.space.UpsertSpacePayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { + private final SpaceId spaceId; + @Setter + private String name; + @Setter + private String description; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + UpsertSpaceCommand( + final SpaceId spaceId, + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + this.spaceId = spaceId; + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpsertSpacePayload upsertUserPayload = new UpsertSpacePayload(name, description, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getSpaceService().upsertSpace(subscribeKey, spaceId.getValue(), upsertUserPayload, effectiveParams); + } + + @Override + protected Space createResponse(Response> input) throws PubNubException { + if (input != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertSpaceOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index bee45fbda..90771b522 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -1,45 +1,18 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class CreateUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { - @Setter - private UserId userId; - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; +public abstract class CreateUser extends UserEndpoint, User> implements CustomIncludeAware { CreateUser( final PubNub pubNub, @@ -56,49 +29,20 @@ public static CreateUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new CreateUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new CreateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } + public abstract CreateUser name(String name); - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } + public abstract CreateUser email(String email); - final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getUserService() - .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); - } + public abstract CreateUser profileUrl(String profileUrl); - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract CreateUser externalId(String externalId); - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract CreateUser custom(Map custom); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNCreateUserOperation; - } + public abstract CreateUser status(String status); - private UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } + public abstract CreateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java new file mode 100644 index 000000000..1140c6b2c --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -0,0 +1,82 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.CreateUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +final class CreateUserCommand extends CreateUser implements HavingCustomInclude { + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + CreateUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final CreateUserPayload createUserPayload = new CreateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .createUser(subscribeKey, effectiveUserId().getValue(), createUserPayload, effectiveParams); + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } + + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNCreateUserOperation; + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index f52df2b0b..4d13b53b7 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -1,29 +1,16 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.Map; - -@Accessors(chain = true, fluent = true) -public class FetchUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { - @Setter - private UserId userId; +public abstract class FetchUser extends UserEndpoint, User> implements CustomIncludeAware { FetchUser( final PubNub pubnubInstance, @@ -40,41 +27,6 @@ public static FetchUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new FetchUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); - } - - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - return getRetrofit() - .getUserService() - .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); - } - - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } - - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNFetchUserOperation; - } - - - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } - - private UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } + return new FetchUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java new file mode 100644 index 000000000..28b4afc0e --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -0,0 +1,56 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.Map; + +final class FetchUserCommand extends FetchUser implements HavingCustomInclude { + + FetchUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + return getRetrofit() + .getUserService() + .fetchUser(getPubnub().getConfiguration().getSubscribeKey(), effectiveUserId().getValue(), effectiveParams); + } + + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNFetchUserOperation; + } + + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java index 51601d9eb..f3a4bf863 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/RemoveUser.java @@ -3,27 +3,21 @@ import com.google.gson.JsonElement; import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.RemoveUserResult; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import lombok.Setter; -import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; import java.util.Collections; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class RemoveUser extends ObjectApiEndpoint, RemoveUserResult> { - @Setter - private UserId userId; +public class RemoveUser extends UserEndpoint, RemoveUserResult> { public RemoveUser( final PubNub pubnubInstance, @@ -49,12 +43,4 @@ protected RemoveUserResult createResponse(Response> protected PNOperationType getOperationType() { return PNOperationType.PNRemoveUserOperation; } - - private UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index fbf68cbf2..3e0d29bed 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,46 +1,18 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class UpdateUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { - @Setter - private UserId userId; - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - +public abstract class UpdateUser extends UserEndpoint, User> implements CustomIncludeAware { UpdateUser( final PubNub pubNub, final TelemetryManager telemetryManager, @@ -56,49 +28,20 @@ public static UpdateUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpdateUser(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); + return new UpdateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } + public abstract UpdateUser name(String name); - final UpdateUserPayload updateUserPayload = new UpdateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + public abstract UpdateUser email(String email); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit() - .getUserService() - .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); - } + public abstract UpdateUser profileUrl(String profileUrl); - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract UpdateUser externalId(String externalId); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpdateUserOperation; - } + public abstract UpdateUser custom(Map custom); - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract UpdateUser status(String status); - private UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } + public abstract UpdateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java new file mode 100644 index 000000000..86a5ee3ad --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -0,0 +1,83 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.UpdateUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + UpdateUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + //This is workaround to accept custom maps that are instances of anonymous classes not handled by gson + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpdateUserPayload updateUserPayload = new UpdateUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit() + .getUserService() + .updateUser(subscribeKey, effectiveUserId().getValue(), updateUserPayload, effectiveParams); + } + + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpdateUserOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index daa74f62b..5ed4a2dc3 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -1,46 +1,18 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; -import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; -import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; -import lombok.Setter; -import lombok.experimental.Accessors; -import retrofit2.Call; -import retrofit2.Response; -import java.util.HashMap; import java.util.Map; -@Accessors(chain = true, fluent = true) -public class UpsertUser extends ObjectApiEndpoint, User> implements HavingCustomInclude { - @Setter - private UserId userId; - @Setter - private String name; - @Setter - private String email; - @Setter - private String profileUrl; - @Setter - private String externalId; - @Setter - private Map custom; - @Setter - private String status; - @Setter - private String type; - +public abstract class UpsertUser extends UserEndpoint, User> implements CustomIncludeAware { UpsertUser( final PubNub pubNub, final TelemetryManager telemetry, @@ -56,46 +28,20 @@ public static UpsertUser create( final RetrofitManager retrofitManager, final TokenManager tokenManager) { final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); - return new UpsertUser(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + return new UpsertUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - @Override - protected Call> executeCommand(Map effectiveParams) throws PubNubException { - final HashMap customHashMap = new HashMap<>(); - if (custom != null) { - customHashMap.putAll(custom); - } + public abstract UpsertUser name(String name); - final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + public abstract UpsertUser email(String email); - String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); - return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); - } + public abstract UpsertUser profileUrl(String profileUrl); - @Override - protected User createResponse(Response> input) throws PubNubException { - if (input.body() != null) { - return input.body().getData(); - } else { - throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); - } - } + public abstract UpsertUser externalId(String externalId); - @Override - protected PNOperationType getOperationType() { - return PNOperationType.PNUpsertUserOperation; - } + public abstract UpsertUser custom(Map custom); - @Override - public CompositeParameterEnricher getCompositeParameterEnricher() { - return super.getCompositeParameterEnricher(); - } + public abstract UpsertUser status(String status); - private UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } + public abstract UpsertUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java new file mode 100644 index 000000000..ad4d58903 --- /dev/null +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -0,0 +1,80 @@ +package com.pubnub.api.endpoints.objects_vsp.user; + +import com.pubnub.api.PubNub; +import com.pubnub.api.PubNubException; +import com.pubnub.api.builder.PubNubErrorBuilder; +import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; +import com.pubnub.api.enums.PNOperationType; +import com.pubnub.api.managers.RetrofitManager; +import com.pubnub.api.managers.TelemetryManager; +import com.pubnub.api.managers.token_manager.TokenManager; +import com.pubnub.api.models.consumer.objects_vsp.user.User; +import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import com.pubnub.api.models.server.objects_vsp.user.UpsertUserPayload; +import lombok.Setter; +import lombok.experimental.Accessors; +import retrofit2.Call; +import retrofit2.Response; + +import java.util.HashMap; +import java.util.Map; + +@Accessors(chain = true, fluent = true) +class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { + @Setter + private String name; + @Setter + private String email; + @Setter + private String profileUrl; + @Setter + private String externalId; + @Setter + private Map custom; + @Setter + private String status; + @Setter + private String type; + + UpsertUserCommand( + final PubNub pubNub, + final TelemetryManager telemetryManager, + final RetrofitManager retrofitManager, + final TokenManager tokenManager, + final CompositeParameterEnricher compositeParameterEnricher) { + super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + } + + @Override + protected Call> executeCommand(Map effectiveParams) throws PubNubException { + final HashMap customHashMap = new HashMap<>(); + if (custom != null) { + customHashMap.putAll(custom); + } + + final UpsertUserPayload upsertUserPayload = new UpsertUserPayload(name, email, externalId, profileUrl, customHashMap, status, type); + + String subscribeKey = getPubnub().getConfiguration().getSubscribeKey(); + return getRetrofit().getUserService().upsertUser(subscribeKey, effectiveUserId().getValue(), upsertUserPayload, effectiveParams); + } + + @Override + protected User createResponse(Response> input) throws PubNubException { + if (input.body() != null) { + return input.body().getData(); + } else { + throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INTERNAL_ERROR).build(); + } + } + + @Override + protected PNOperationType getOperationType() { + return PNOperationType.PNUpsertUserOperation; + } + + @Override + public CompositeParameterEnricher getCompositeParameterEnricher() { + return super.getCompositeParameterEnricher(); + } +} From 8c7a637ab8bc69dc3276e0652240c809899edc3e Mon Sep 17 00:00:00 2001 From: "marcin.cebo" Date: Tue, 13 Sep 2022 18:50:52 +0200 Subject: [PATCH 21/21] ObjectV3 user/space changes after code review. Introduced interfaces for all User/Space operations e.g. CreateUser, CreateSpace --- .../endpoints/objects_api/utils/Include.java | 5 ++- .../endpoints/objects_vsp/UserEndpoint.java | 41 ------------------- .../objects_vsp/space/CreateSpace.java | 25 ++++------- .../objects_vsp/space/CreateSpaceCommand.java | 6 +-- .../objects_vsp/space/FetchSpace.java | 15 ++----- .../objects_vsp/space/FetchSpaceCommand.java | 5 ++- .../objects_vsp/space/UpdateSpace.java | 25 ++++------- .../objects_vsp/space/UpdateSpaceCommand.java | 5 ++- .../objects_vsp/space/UpsertSpace.java | 25 ++++------- .../objects_vsp/space/UpsertSpaceCommand.java | 5 ++- .../objects_vsp/user/CreateUser.java | 33 ++++++--------- .../objects_vsp/user/CreateUserCommand.java | 17 +++++++- .../endpoints/objects_vsp/user/FetchUser.java | 22 ++++------ .../objects_vsp/user/FetchUserCommand.java | 20 +++++++-- .../objects_vsp/user/RemoveUser.java | 18 +++++++- .../objects_vsp/user/UpdateUser.java | 32 ++++++--------- .../objects_vsp/user/UpdateUserCommand.java | 14 ++++++- .../objects_vsp/user/UpsertUser.java | 32 ++++++--------- .../objects_vsp/user/UpsertUserCommand.java | 16 +++++++- 19 files changed, 165 insertions(+), 196 deletions(-) delete mode 100644 src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java diff --git a/src/main/java/com/pubnub/api/endpoints/objects_api/utils/Include.java b/src/main/java/com/pubnub/api/endpoints/objects_api/utils/Include.java index 2c7104193..331405523 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_api/utils/Include.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_api/utils/Include.java @@ -1,6 +1,7 @@ package com.pubnub.api.endpoints.objects_api.utils; import com.pubnub.api.endpoints.Endpoint; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import java.util.ArrayList; import java.util.Collection; @@ -17,11 +18,11 @@ public class Include implements ParameterEnricher { static final String INCLUDE_UUID_PARAM_VALUE = "uuid"; static final String INCLUDE_UUID_CUSTOM_PARAM_VALUE = "uuid.custom"; - public interface CustomIncludeAware> { + public interface CustomIncludeAware> { T includeCustom(boolean includeCustom); } - public interface HavingCustomInclude> + public interface HavingCustomInclude> extends CustomIncludeAware, HavingCompositeParameterEnricher { @Override default T includeCustom(boolean includeCustom) { diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java deleted file mode 100644 index 2e4ebaa25..000000000 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/UserEndpoint.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.pubnub.api.endpoints.objects_vsp; - -import com.pubnub.api.PubNub; -import com.pubnub.api.PubNubException; -import com.pubnub.api.UserId; -import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; -import com.pubnub.api.managers.RetrofitManager; -import com.pubnub.api.managers.TelemetryManager; -import com.pubnub.api.managers.token_manager.TokenManager; - -public abstract class UserEndpoint extends ObjectApiEndpoint { - private UserId userId; - - protected UserEndpoint( - final PubNub pubnubInstance, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final CompositeParameterEnricher compositeParameterEnricher, - final TokenManager tokenManager) { - super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - @Override - protected void validateParams() throws PubNubException { - super.validateParams(); - } - - public SELF userId(final UserId userId) { - this.userId = userId; - return (SELF) this; - } - - protected UserId effectiveUserId() { - try { - return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); - } catch (PubNubException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java index 0f6229111..db17d5c01 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpace.java @@ -3,27 +3,18 @@ import com.pubnub.api.PubNub; import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class CreateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { - public CreateSpace( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } +public interface CreateSpace extends RemoteAction, CustomIncludeAware { - public static CreateSpace create( + static CreateSpace create( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, @@ -33,14 +24,14 @@ public static CreateSpace create( return new CreateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract CreateSpace name(String name); + CreateSpace name(String name); - public abstract CreateSpace description(String description); + CreateSpace description(String description); - public abstract CreateSpace custom(Map custom); + CreateSpace custom(Map custom); - public abstract CreateSpace status(String status); + CreateSpace status(String status); - public abstract CreateSpace type(String type); + CreateSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java index 52cf0c528..52a372a06 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/CreateSpaceCommand.java @@ -5,6 +5,7 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -22,7 +23,7 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclude { +final class CreateSpaceCommand extends ObjectApiEndpoint, Space> implements CreateSpace, HavingCustomInclude { private final SpaceId spaceId; @Setter private String name; @@ -35,7 +36,6 @@ final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclud @Setter private String type; - CreateSpaceCommand( final SpaceId spaceId, final PubNub pubNub, @@ -43,7 +43,7 @@ final class CreateSpaceCommand extends CreateSpace implements HavingCustomInclud final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); this.spaceId = spaceId; } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java index 64b0d7146..497fb9249 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpace.java @@ -3,25 +3,16 @@ import com.pubnub.api.PubNub; import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; -public abstract class FetchSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { - public FetchSpace( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } +public interface FetchSpace extends RemoteAction, CustomIncludeAware { - public static FetchSpace create( + static FetchSpace create( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java index f89a0b1f2..528987ea5 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/FetchSpaceCommand.java @@ -5,6 +5,7 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -17,7 +18,7 @@ import java.util.Map; -final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude { +final class FetchSpaceCommand extends ObjectApiEndpoint, Space> implements FetchSpace, HavingCustomInclude { private SpaceId spaceId; FetchSpaceCommand( @@ -27,7 +28,7 @@ final class FetchSpaceCommand extends FetchSpace implements HavingCustomInclude< final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); this.spaceId = spaceId; } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java index 5c22b3023..0d5ab8a13 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpace.java @@ -3,27 +3,18 @@ import com.pubnub.api.PubNub; import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpdateSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { - public UpdateSpace( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } +public interface UpdateSpace extends RemoteAction, CustomIncludeAware { - public static UpdateSpace create( + static UpdateSpace create( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, @@ -33,14 +24,14 @@ public static UpdateSpace create( return new UpdateSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpdateSpace name(String name); + UpdateSpace name(String name); - public abstract UpdateSpace description(String description); + UpdateSpace description(String description); - public abstract UpdateSpace custom(Map custom); + UpdateSpace custom(Map custom); - public abstract UpdateSpace status(String status); + UpdateSpace status(String status); - public abstract UpdateSpace type(String type); + UpdateSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java index 9c7814e0b..d2845ca1e 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpdateSpaceCommand.java @@ -5,6 +5,7 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -22,7 +23,7 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclude { +final class UpdateSpaceCommand extends ObjectApiEndpoint, Space> implements UpdateSpace, HavingCustomInclude { private final SpaceId spaceId; @Setter private String name; @@ -42,7 +43,7 @@ final class UpdateSpaceCommand extends UpdateSpace implements HavingCustomInclud final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); this.spaceId = spaceId; } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java index 6b3c4b795..998d39597 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpace.java @@ -3,27 +3,18 @@ import com.pubnub.api.PubNub; import com.pubnub.api.SpaceId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; -import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.space.Space; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpsertSpace extends ObjectApiEndpoint, Space> implements CustomIncludeAware { - public UpsertSpace( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } +public interface UpsertSpace extends RemoteAction, CustomIncludeAware { - public static UpsertSpace create( + static UpsertSpace create( final SpaceId spaceId, final PubNub pubNub, final TelemetryManager telemetryManager, @@ -33,13 +24,13 @@ public static UpsertSpace create( return new UpsertSpaceCommand(spaceId, pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpsertSpace name(String name); + UpsertSpace name(String name); - public abstract UpsertSpace description(String description); + UpsertSpace description(String description); - public abstract UpsertSpace custom(Map custom); + UpsertSpace custom(Map custom); - public abstract UpsertSpace status(String status); + UpsertSpace status(String status); - public abstract UpsertSpace type(String type); + UpsertSpace type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java index 3ccd31140..330cfb2dc 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/space/UpsertSpaceCommand.java @@ -5,6 +5,7 @@ import com.pubnub.api.SpaceId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -22,7 +23,7 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclude { +final class UpsertSpaceCommand extends ObjectApiEndpoint, Space> implements UpsertSpace, HavingCustomInclude { private final SpaceId spaceId; @Setter private String name; @@ -42,7 +43,7 @@ final class UpsertSpaceCommand extends UpsertSpace implements HavingCustomInclud final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); this.spaceId = spaceId; } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java index 90771b522..e4e7675c1 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUser.java @@ -1,29 +1,20 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class CreateUser extends UserEndpoint, User> implements CustomIncludeAware { +public interface CreateUser extends RemoteAction, CustomIncludeAware { - CreateUser( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - public static CreateUser create( + static CreateUser create( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, @@ -32,17 +23,19 @@ public static CreateUser create( return new CreateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract CreateUser name(String name); + CreateUser userId(UserId userId); + + CreateUser name(String name); - public abstract CreateUser email(String email); + CreateUser email(String email); - public abstract CreateUser profileUrl(String profileUrl); + CreateUser profileUrl(String profileUrl); - public abstract CreateUser externalId(String externalId); + CreateUser externalId(String externalId); - public abstract CreateUser custom(Map custom); + CreateUser custom(Map custom); - public abstract CreateUser status(String status); + CreateUser status(String status); - public abstract CreateUser type(String type); + CreateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java index 1140c6b2c..30be74c7e 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/CreateUserCommand.java @@ -2,8 +2,10 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -21,7 +23,9 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -final class CreateUserCommand extends CreateUser implements HavingCustomInclude { +final class CreateUserCommand extends ObjectApiEndpoint, User> implements CreateUser, HavingCustomInclude { + @Setter + private UserId userId; @Setter private String name; @Setter @@ -43,7 +47,7 @@ final class CreateUserCommand extends CreateUser implements HavingCustomInclude< final RetrofitManager retrofitManager, final TokenManager tokenManager, final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); + super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); } @Override @@ -79,4 +83,13 @@ protected User createResponse(Response> input) throws PubNu protected PNOperationType getOperationType() { return PNOperationType.PNCreateUserOperation; } + + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } + } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java index 4d13b53b7..34a11dda9 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUser.java @@ -1,27 +1,20 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.experimental.Accessors; -public abstract class FetchUser extends UserEndpoint, User> implements CustomIncludeAware { +@Accessors(chain = true, fluent = true) +public interface FetchUser extends RemoteAction, CustomIncludeAware { - FetchUser( - final PubNub pubnubInstance, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubnubInstance, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } - - public static FetchUser create( + static FetchUser create( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, @@ -29,4 +22,7 @@ public static FetchUser create( final CompositeParameterEnricher compositeParameterEnricher = CompositeParameterEnricher.createDefault(); return new FetchUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } + + FetchUser userId(UserId userId); + } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java index 28b4afc0e..d023daf21 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/FetchUserCommand.java @@ -2,8 +2,10 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -11,12 +13,17 @@ import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; import com.pubnub.api.models.server.objects_api.EntityEnvelope; +import lombok.Setter; +import lombok.experimental.Accessors; import retrofit2.Call; import retrofit2.Response; import java.util.Map; -final class FetchUserCommand extends FetchUser implements HavingCustomInclude { +@Accessors(chain = true, fluent = true) +final class FetchUserCommand extends ObjectApiEndpoint, User> implements FetchUser, HavingCustomInclude { + @Setter + private UserId userId; FetchUserCommand( final PubNub pubNub, @@ -24,7 +31,7 @@ final class FetchUserCommand extends FetchUser implements HavingCustomInclude, RemoveUserResult> { +@Accessors(chain = true, fluent = true) +public class RemoveUser extends ObjectApiEndpoint, RemoveUserResult> { + @Setter + private UserId userId; public RemoveUser( final PubNub pubnubInstance, @@ -43,4 +49,12 @@ protected RemoveUserResult createResponse(Response> protected PNOperationType getOperationType() { return PNOperationType.PNRemoveUserOperation; } + + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java index 3e0d29bed..1dab54d3c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUser.java @@ -1,28 +1,20 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpdateUser extends UserEndpoint, User> implements CustomIncludeAware { - UpdateUser( - final PubNub pubNub, - final TelemetryManager telemetryManager, - final RetrofitManager retrofitManager, - final CompositeParameterEnricher compositeParameterEnricher, - final TokenManager tokenManager) { - super(pubNub, telemetryManager, retrofitManager, compositeParameterEnricher, tokenManager); - } +public interface UpdateUser extends RemoteAction, CustomIncludeAware { - public static UpdateUser create( + static UpdateUser create( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, @@ -31,17 +23,19 @@ public static UpdateUser create( return new UpdateUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpdateUser name(String name); + UpdateUser userId(UserId userId); + + UpdateUser name(String name); - public abstract UpdateUser email(String email); + UpdateUser email(String email); - public abstract UpdateUser profileUrl(String profileUrl); + UpdateUser profileUrl(String profileUrl); - public abstract UpdateUser externalId(String externalId); + UpdateUser externalId(String externalId); - public abstract UpdateUser custom(Map custom); + UpdateUser custom(Map custom); - public abstract UpdateUser status(String status); + UpdateUser status(String status); - public abstract UpdateUser type(String type); + UpdateUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java index 86a5ee3ad..e71e576e3 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpdateUserCommand.java @@ -2,8 +2,10 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -21,7 +23,9 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -class UpdateUserCommand extends UpdateUser implements HavingCustomInclude { +class UpdateUserCommand extends ObjectApiEndpoint, User> implements UpdateUser, HavingCustomInclude { + @Setter + private UserId userId; @Setter private String name; @Setter @@ -80,4 +84,12 @@ protected PNOperationType getOperationType() { public CompositeParameterEnricher getCompositeParameterEnricher() { return super.getCompositeParameterEnricher(); } + + private UserId effectiveUserId() { + try { + return (userId != null) ? userId : getPubnub().getConfiguration().getUserId(); + } catch (PubNubException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java index 5ed4a2dc3..ed0ffcafb 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUser.java @@ -1,28 +1,20 @@ package com.pubnub.api.endpoints.objects_vsp.user; import com.pubnub.api.PubNub; +import com.pubnub.api.UserId; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; import com.pubnub.api.endpoints.objects_api.utils.Include.CustomIncludeAware; -import com.pubnub.api.endpoints.objects_vsp.UserEndpoint; +import com.pubnub.api.endpoints.remoteaction.RemoteAction; import com.pubnub.api.managers.RetrofitManager; import com.pubnub.api.managers.TelemetryManager; import com.pubnub.api.managers.token_manager.TokenManager; import com.pubnub.api.models.consumer.objects_vsp.user.User; -import com.pubnub.api.models.server.objects_api.EntityEnvelope; import java.util.Map; -public abstract class UpsertUser extends UserEndpoint, User> implements CustomIncludeAware { - UpsertUser( - final PubNub pubNub, - final TelemetryManager telemetry, - final RetrofitManager retrofitInstance, - final TokenManager tokenManager, - final CompositeParameterEnricher compositeParameterEnricher) { - super(pubNub, telemetry, retrofitInstance, compositeParameterEnricher, tokenManager); - } +public interface UpsertUser extends RemoteAction, CustomIncludeAware { - public static UpsertUser create( + static UpsertUser create( final PubNub pubNub, final TelemetryManager telemetryManager, final RetrofitManager retrofitManager, @@ -31,17 +23,19 @@ public static UpsertUser create( return new UpsertUserCommand(pubNub, telemetryManager, retrofitManager, tokenManager, compositeParameterEnricher); } - public abstract UpsertUser name(String name); + UpsertUser userId(UserId userId); + + UpsertUser name(String name); - public abstract UpsertUser email(String email); + UpsertUser email(String email); - public abstract UpsertUser profileUrl(String profileUrl); + UpsertUser profileUrl(String profileUrl); - public abstract UpsertUser externalId(String externalId); + UpsertUser externalId(String externalId); - public abstract UpsertUser custom(Map custom); + UpsertUser custom(Map custom); - public abstract UpsertUser status(String status); + UpsertUser status(String status); - public abstract UpsertUser type(String type); + UpsertUser type(String type); } diff --git a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java index ad4d58903..45c7ce23c 100644 --- a/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java +++ b/src/main/java/com/pubnub/api/endpoints/objects_vsp/user/UpsertUserCommand.java @@ -2,8 +2,10 @@ import com.pubnub.api.PubNub; import com.pubnub.api.PubNubException; +import com.pubnub.api.UserId; import com.pubnub.api.builder.PubNubErrorBuilder; import com.pubnub.api.endpoints.objects_api.CompositeParameterEnricher; +import com.pubnub.api.endpoints.objects_api.ObjectApiEndpoint; import com.pubnub.api.endpoints.objects_api.utils.Include.HavingCustomInclude; import com.pubnub.api.enums.PNOperationType; import com.pubnub.api.managers.RetrofitManager; @@ -21,7 +23,9 @@ import java.util.Map; @Accessors(chain = true, fluent = true) -class UpsertUserCommand extends UpsertUser implements HavingCustomInclude { +class UpsertUserCommand extends ObjectApiEndpoint, User> implements UpsertUser, HavingCustomInclude { + @Setter + private UserId userId; @Setter private String name; @Setter @@ -43,7 +47,7 @@ class UpsertUserCommand extends UpsertUser implements HavingCustomInclude