diff --git a/src/main/java/io/getstream/chat/java/models/ExportUsers.java b/src/main/java/io/getstream/chat/java/models/ExportUsers.java new file mode 100644 index 000000000..a20d509b7 --- /dev/null +++ b/src/main/java/io/getstream/chat/java/models/ExportUsers.java @@ -0,0 +1,56 @@ +package io.getstream.chat.java.models; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.getstream.chat.java.models.framework.StreamRequest; +import io.getstream.chat.java.models.framework.StreamResponseObject; +import io.getstream.chat.java.services.ExportUsersService; +import io.getstream.chat.java.services.framework.Client; +import java.util.List; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; +import retrofit2.Call; + +@Data +@NoArgsConstructor +public class ExportUsers { + + @Builder( + builderClassName = "ExportUsersRequest", + builderMethodName = "", + buildMethodName = "internalBuild") + public static class ExportUsersRequestData { + @JsonProperty("user_ids") + private List userIds; + + public static class ExportUsersRequest extends StreamRequest { + @Override + protected Call generateCall(Client client) { + return client.create(ExportUsersService.class).exportUsers(this.internalBuild()); + } + } + } + + @Data + @NoArgsConstructor + @EqualsAndHashCode(callSuper = true) + public static class ExportUsersResponse extends StreamResponseObject { + @NotNull + @JsonProperty("task_id") + private String taskId; + } + + /** + * Creates a export users request + * + * @param userIds list of user IDs to be exported + * @return the created request + */ + @NotNull + public static ExportUsers.ExportUsersRequestData.ExportUsersRequest exportUsers( + @NotNull List userIds) { + return new ExportUsers.ExportUsersRequestData.ExportUsersRequest().userIds(userIds); + } +} diff --git a/src/main/java/io/getstream/chat/java/services/ExportUsersService.java b/src/main/java/io/getstream/chat/java/services/ExportUsersService.java new file mode 100644 index 000000000..14da6884f --- /dev/null +++ b/src/main/java/io/getstream/chat/java/services/ExportUsersService.java @@ -0,0 +1,12 @@ +package io.getstream.chat.java.services; + +import io.getstream.chat.java.models.ExportUsers; +import org.jetbrains.annotations.NotNull; +import retrofit2.Call; +import retrofit2.http.*; + +public interface ExportUsersService { + @POST("export/users") + Call exportUsers( + @NotNull @Body ExportUsers.ExportUsersRequestData exportUsersRequest); +} diff --git a/src/test/java/io/getstream/chat/java/BasicTest.java b/src/test/java/io/getstream/chat/java/BasicTest.java index ced9d8f7c..f67d349f4 100644 --- a/src/test/java/io/getstream/chat/java/BasicTest.java +++ b/src/test/java/io/getstream/chat/java/BasicTest.java @@ -174,6 +174,7 @@ private static void createTestChannel() throws StreamException { } static void upsertUsers() throws StreamException { + testUsersRequestObjects.clear(); testUserRequestObject = UserRequestObject.builder() .id(RandomStringUtils.randomAlphabetic(10)) diff --git a/src/test/java/io/getstream/chat/java/ExportUsersTest.java b/src/test/java/io/getstream/chat/java/ExportUsersTest.java new file mode 100644 index 000000000..9c840f0b9 --- /dev/null +++ b/src/test/java/io/getstream/chat/java/ExportUsersTest.java @@ -0,0 +1,37 @@ +package io.getstream.chat.java; + +import io.getstream.chat.java.models.*; +import java.util.List; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class ExportUsersTest extends BasicTest { + @DisplayName("Export users") + @Test + void exportUsersTest() { + var userId = RandomStringUtils.randomAlphabetic(10); + Assertions.assertDoesNotThrow( + () -> User.upsert().user(User.UserRequestObject.builder().id(userId).build()).request()); + + var userIds = List.of(userId); + var exportUsersResponse = + Assertions.assertDoesNotThrow(() -> ExportUsers.exportUsers(userIds).request()); + Assertions.assertNotEquals("", exportUsersResponse.getTaskId()); + + var taskId = exportUsersResponse.getTaskId(); + + var taskCompleted = false; + for (int i = 0; i < 10; i++) { + var taskStatus = + Assertions.assertDoesNotThrow(() -> TaskStatus.get(taskId).request()).getStatus(); + if (taskStatus.equals("completed")) { + taskCompleted = true; + break; + } + Assertions.assertDoesNotThrow(() -> Thread.sleep(500)); + } + Assertions.assertTrue(taskCompleted); + } +}