Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions local.properties.example

This file was deleted.

118 changes: 115 additions & 3 deletions src/main/java/io/getstream/chat/java/models/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import io.getstream.chat.java.models.User.UserBanRequestData.UserBanRequest;
import io.getstream.chat.java.models.User.UserCreateGuestRequestData.UserCreateGuestRequest;
import io.getstream.chat.java.models.User.UserDeactivateRequestData.UserDeactivateRequest;
import io.getstream.chat.java.models.User.UserDeleteManyRequestData.UserDeleteManyRequest;
import io.getstream.chat.java.models.User.UserListRequestData.UserListRequest;
import io.getstream.chat.java.models.User.UserMuteRequestData.UserMuteRequest;
import io.getstream.chat.java.models.User.UserPartialUpdateRequestData.UserPartialUpdateRequest;
Expand Down Expand Up @@ -927,6 +926,94 @@ public static class UserDeleteManyResponse extends StreamResponseObject {
private String taskId;
}

@Builder(
builderClassName = "UserDeactivateManyRequest",
builderMethodName = "",
buildMethodName = "internalBuild")
@Getter
@EqualsAndHashCode
public static class UserDeactivateManyRequestData {
@NotNull
@JsonProperty("user_ids")
private List<String> userIds;

@Nullable
@JsonProperty("created_by_id")
private String createdById;

@Nullable
@JsonProperty("mark_channels_deleted")
private Boolean markChannelsDeleted;

@Nullable
@JsonProperty("mark_messages_deleted")
private Boolean markMessagesDeleted;

public static class UserDeactivateManyRequest
extends StreamRequest<UserDeactivateManyResponse> {
@Override
protected Call<UserDeactivateManyResponse> generateCall(Client client)
throws StreamException {
var data = this.internalBuild();
return client.create(UserService.class).deactivateUsers(data);
}
}
}

@Data
@EqualsAndHashCode(callSuper = true)
public static class UserDeactivateManyResponse extends StreamResponseObject {
@JsonProperty("task_id")
private String taskId;

@JsonProperty("duration")
private String duration;
}

@Builder(
builderClassName = "UserReactivateManyRequest",
builderMethodName = "",
buildMethodName = "internalBuild")
@Getter
@EqualsAndHashCode
public static class UserReactivateManyRequestData {
@NotNull
@JsonProperty("user_ids")
private List<String> userIds;

@Nullable
@JsonProperty("created_by_id")
private String createdById;

@Nullable
@JsonProperty("restore_channels")
private Boolean restoreChannels;

@Nullable
@JsonProperty("restore_messages")
private Boolean restoreMessages;

public static class UserReactivateManyRequest
extends StreamRequest<UserReactivateManyResponse> {
@Override
protected Call<UserReactivateManyResponse> generateCall(Client client)
throws StreamException {
var data = this.internalBuild();
return client.create(UserService.class).reactivateUsers(data);
}
}
}

@Data
@EqualsAndHashCode(callSuper = true)
public static class UserReactivateManyResponse extends StreamResponseObject {
@JsonProperty("task_id")
private String taskId;

@JsonProperty("duration")
private String duration;
}

@Builder(
builderClassName = "UserReactivateRequest",
builderMethodName = "",
Expand Down Expand Up @@ -1334,8 +1421,33 @@ public static UserDeleteRequest delete(@NotNull String userId) {
* @return the created request
*/
@NotNull
public static UserDeleteManyRequest deleteMany(@NotNull List<String> userIds) {
return new UserDeleteManyRequest().userIds(userIds);
public static UserDeleteManyRequestData.UserDeleteManyRequest deleteMany(
@NotNull List<String> userIds) {
return new UserDeleteManyRequestData.UserDeleteManyRequest().userIds(userIds);
}

/**
* Creates a deactivate users request
*
* @param userIds list of user ids to be deactivated
* @return the created request
*/
@NotNull
public static UserDeactivateManyRequestData.UserDeactivateManyRequest deactivateUsers(
@NotNull List<String> userIds) {
return new UserDeactivateManyRequestData.UserDeactivateManyRequest().userIds(userIds);
}

/**
* Creates a reactivate users request
*
* @param userIds list of user ids to be reactivated
* @return the created request
*/
@NotNull
public static UserReactivateManyRequestData.UserReactivateManyRequest reactivateUsers(
@NotNull List<String> userIds) {
return new UserReactivateManyRequestData.UserReactivateManyRequest().userIds(userIds);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ Call<UserDeleteResponse> delete(
@Nullable @Query("hard_delete") Boolean hardDelete,
@Nullable @Query("delete_conversation_channels") Boolean deleteConversationChannels);

@POST("users/deactivate")
Call<UserDeactivateManyResponse> deactivateUsers(
@NotNull @Body UserDeactivateManyRequestData userDeactivateManyRequestData);

@POST("users/delete")
Call<UserDeleteManyResponse> deleteMany(@NotNull @Body UserDeleteManyRequestData data);

Expand All @@ -47,6 +51,10 @@ Call<UserReactivateResponse> reactivate(
@NotNull @Path("user_id") String userId,
@NotNull @Body UserReactivateRequestData userReactivateRequestData);

@POST("users/reactivate")
Call<UserReactivateManyResponse> reactivateUsers(
@NotNull @Body UserReactivateManyRequestData userReactivateManyRequestData);

@POST("moderation/mute")
Call<UserMuteResponse> mute(@NotNull @Body UserMuteRequestData userMuteRequestData);

Expand Down
62 changes: 62 additions & 0 deletions src/test/java/io/getstream/chat/java/UserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,68 @@ void whenDeleteManyUsersWithIllegalCondition_thenItFails() {
});
}

@Test
@DisplayName("Can deactivate many users")
void whenDeactivateManyUsers_thenTaskIdIsReturned() {
var userIds = new ArrayList<String>();

for (var i = 0; i < 3; i++) {
String userId = RandomStringUtils.randomAlphabetic(10);
UserUpsertRequest usersUpsertRequest = User.upsert();
var userObject = UserRequestObject.builder().id(userId).name("User to deactivate").build();
usersUpsertRequest.user(userObject);
Assertions.assertDoesNotThrow(
(ThrowingSupplier<UserUpsertResponse>) usersUpsertRequest::request);
userIds.add(userId);
}

Assertions.assertDoesNotThrow(
() -> {
var taskId =
User.deactivateUsers(userIds)
.createdById(testUserRequestObject.getId())
.request()
.getTaskId();

Assertions.assertNotNull(taskId);
});
}

@Test
@DisplayName("Can reactivate many users")
void whenReactivateManyUsers_thenTaskIdIsReturned() {
var userIds = new ArrayList<String>();

for (var i = 0; i < 3; i++) {
String userId = RandomStringUtils.randomAlphabetic(10);
UserUpsertRequest usersUpsertRequest = User.upsert();
var userObject = UserRequestObject.builder().id(userId).name("User to reactivate").build();
usersUpsertRequest.user(userObject);
Assertions.assertDoesNotThrow(
(ThrowingSupplier<UserUpsertResponse>) usersUpsertRequest::request);
userIds.add(userId);
}

// First deactivate them in bulk so they can be reactivated
Assertions.assertDoesNotThrow(
() ->
User.deactivateUsers(userIds)
.createdById(testUserRequestObject.getId())
.request()
.getTaskId());

Assertions.assertDoesNotThrow(
() -> {
var taskId =
User.reactivateUsers(userIds)
.createdById(testUserRequestObject.getId())
.request()
.getTaskId();

Assertions.assertNotNull(taskId);
});
}

@DisplayName("Can mute user")
@Test
void whenMutingUser_thenIsMuted() {
Expand Down
Loading