Skip to content

Commit 76bfad2

Browse files
itsmeadishaljam
andauthored
feat: add block user feature (#147)
* feat: add block user feature * fix: unused comments * fix: lint --------- Co-authored-by: Ali Momen Sani <ali.momensani91@gmail.com>
1 parent 7dd4839 commit 76bfad2

File tree

4 files changed

+236
-0
lines changed

4 files changed

+236
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package io.getstream.chat.java.models;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import io.getstream.chat.java.models.framework.StreamRequest;
5+
import io.getstream.chat.java.models.framework.StreamResponseObject;
6+
import io.getstream.chat.java.services.BlockUserService;
7+
import io.getstream.chat.java.services.framework.Client;
8+
import java.util.Date;
9+
import java.util.List;
10+
import lombok.*;
11+
import org.jetbrains.annotations.NotNull;
12+
import retrofit2.Call;
13+
14+
@Data
15+
@NoArgsConstructor
16+
public class BlockUser {
17+
18+
@Builder(
19+
builderClassName = "BlockUserRequest",
20+
builderMethodName = "",
21+
buildMethodName = "internalBuild")
22+
public static class BlockUserRequestData {
23+
@NotNull
24+
@JsonProperty("blocked_user_id")
25+
private String blockedUserID;
26+
27+
@NotNull
28+
@JsonProperty("user_id")
29+
private String userID;
30+
31+
public static class BlockUserRequest extends StreamRequest<BlockUserResponse> {
32+
@Override
33+
protected Call<BlockUserResponse> generateCall(Client client) {
34+
var data = this.internalBuild();
35+
return client.create(BlockUserService.class).blockUser(data);
36+
}
37+
}
38+
}
39+
40+
@Builder(
41+
builderClassName = "UnblockUserRequest",
42+
builderMethodName = "",
43+
buildMethodName = "internalBuild")
44+
public static class UnblockUserRequestData {
45+
@NotNull
46+
@JsonProperty("blocked_user_id")
47+
private String blockedUserID;
48+
49+
@NotNull
50+
@JsonProperty("user_id")
51+
private String userID;
52+
53+
public static class UnblockUserRequest extends StreamRequest<UnblockUserResponse> {
54+
@Override
55+
protected Call<UnblockUserResponse> generateCall(Client client) {
56+
var data = this.internalBuild();
57+
return client.create(BlockUserService.class).unblockUser(data);
58+
}
59+
}
60+
}
61+
62+
@NotNull
63+
public static BlockUserRequestData.BlockUserRequest blockUser() {
64+
return new BlockUserRequestData.BlockUserRequest();
65+
}
66+
67+
@NotNull
68+
public static UnblockUserRequestData.UnblockUserRequest unblockUser() {
69+
return new UnblockUserRequestData.UnblockUserRequest();
70+
}
71+
72+
@Data
73+
@EqualsAndHashCode(callSuper = true)
74+
@NoArgsConstructor
75+
public static class BlockUserResponse extends StreamResponseObject {
76+
@JsonProperty("blocked_by_user_id")
77+
private String blockedByUserID;
78+
79+
@JsonProperty("blocked_user_id")
80+
private String blockedUserID;
81+
82+
@JsonProperty("created_at")
83+
private Date createdAt;
84+
}
85+
86+
@Data
87+
@EqualsAndHashCode(callSuper = true)
88+
@NoArgsConstructor
89+
public static class UnblockUserResponse extends StreamResponseObject {}
90+
91+
@Data
92+
@EqualsAndHashCode(callSuper = true)
93+
@NoArgsConstructor
94+
public static class GetBlockedUsersResponse extends StreamResponseObject {
95+
@JsonProperty("blocks")
96+
private List<BlockedUserResponse> blockedUsers;
97+
}
98+
99+
@Data
100+
@NoArgsConstructor
101+
public static class BlockedUserResponse {
102+
@JsonProperty("user")
103+
private User blockedByUser;
104+
105+
@JsonProperty("user_id")
106+
private String blockedByUserID;
107+
108+
@JsonProperty("blocked_user")
109+
private User blockedUser;
110+
111+
@JsonProperty("blocked_user_id")
112+
private String blockedUserID;
113+
114+
@JsonProperty("created_at")
115+
private Date createdAt;
116+
}
117+
118+
@Builder(
119+
builderClassName = "GetBlockedUsersRequest",
120+
builderMethodName = "",
121+
buildMethodName = "internalBuild")
122+
public static class GetBlockedUsersRequestData {
123+
@NotNull
124+
@JsonProperty("user_id")
125+
private String blockedByUserID;
126+
127+
public static class GetBlockedUsersRequest extends StreamRequest<GetBlockedUsersResponse> {
128+
private String blockedByUserID;
129+
130+
public GetBlockedUsersRequest(String blockedByUserID) {
131+
this.blockedByUserID = blockedByUserID;
132+
}
133+
134+
@Override
135+
protected Call<GetBlockedUsersResponse> generateCall(Client client) {
136+
return client.create(BlockUserService.class).getBlockedUsers(blockedByUserID);
137+
}
138+
}
139+
}
140+
141+
@NotNull
142+
public static GetBlockedUsersRequestData.GetBlockedUsersRequest getBlockedUsers(
143+
String blockedByUserID) {
144+
return new GetBlockedUsersRequestData.GetBlockedUsersRequest(blockedByUserID);
145+
}
146+
}

src/main/java/io/getstream/chat/java/models/User.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ public Map<String, Object> getAdditionalFields() {
119119
return this.additionalFields;
120120
}
121121

122+
@Nullable
123+
@JsonProperty("blocked_user_ids")
124+
private List<String> blockedUserIDs;
125+
122126
@JsonAnySetter
123127
public void setAdditionalField(String name, Object value) {
124128
this.additionalFields.put(name, value);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.getstream.chat.java.services;
2+
3+
import io.getstream.chat.java.models.BlockUser;
4+
import io.getstream.chat.java.models.BlockUser.BlockUserResponse;
5+
import io.getstream.chat.java.models.BlockUser.GetBlockedUsersResponse;
6+
import org.jetbrains.annotations.NotNull;
7+
import retrofit2.Call;
8+
import retrofit2.http.Body;
9+
import retrofit2.http.GET;
10+
import retrofit2.http.POST;
11+
import retrofit2.http.Query;
12+
13+
public interface BlockUserService {
14+
@POST("users/block")
15+
Call<BlockUserResponse> blockUser(@NotNull @Body BlockUser.BlockUserRequestData data);
16+
17+
@POST("users/unblock")
18+
Call<BlockUser.UnblockUserResponse> unblockUser(
19+
@NotNull @Body BlockUser.UnblockUserRequestData data);
20+
21+
@GET("users/block")
22+
Call<GetBlockedUsersResponse> getBlockedUsers(@Query("user_id") String blockedByUserID);
23+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.getstream.chat.java;
2+
3+
import io.getstream.chat.java.models.*;
4+
import io.getstream.chat.java.models.BlockUser.*;
5+
import org.junit.jupiter.api.Assertions;
6+
import org.junit.jupiter.api.DisplayName;
7+
import org.junit.jupiter.api.Test;
8+
9+
public class BlockUserTest extends BasicTest {
10+
@Test
11+
@DisplayName("Block User")
12+
void blockUserGetUnBlock() {
13+
Assertions.assertDoesNotThrow(
14+
() -> {
15+
var channel = Assertions.assertDoesNotThrow(BasicTest::createRandomChannel).getChannel();
16+
Assertions.assertNotNull(channel);
17+
18+
var blockingUser = testUsersRequestObjects.get(0);
19+
var blockedUser = testUsersRequestObjects.get(1);
20+
BlockUser.BlockUserRequestData.BlockUserRequest blockRequest =
21+
BlockUser.blockUser().blockedUserID(blockedUser.getId()).userID(blockingUser.getId());
22+
BlockUser.BlockUserResponse blockResponse = blockRequest.request();
23+
Assertions.assertEquals(blockResponse.getBlockedByUserID(), blockingUser.getId());
24+
Assertions.assertEquals(blockResponse.getBlockedUserID(), blockedUser.getId());
25+
Assertions.assertNotNull(blockResponse.getCreatedAt());
26+
27+
BlockUser.GetBlockedUsersRequestData.GetBlockedUsersRequest getBlockedUsersRequest =
28+
BlockUser.getBlockedUsers(blockingUser.getId());
29+
30+
BlockUser.GetBlockedUsersResponse getBlockedUsersResponse =
31+
getBlockedUsersRequest.request();
32+
Assertions.assertFalse(getBlockedUsersResponse.getBlockedUsers().isEmpty());
33+
Assertions.assertEquals(
34+
getBlockedUsersResponse.getBlockedUsers().get(0).getBlockedUserID(),
35+
blockedUser.getId());
36+
37+
var users = User.list().filterCondition("id", blockingUser.getId()).request();
38+
Assertions.assertNotNull(users.getUsers().get(0).getBlockedUserIDs());
39+
Assertions.assertEquals(
40+
users.getUsers().get(0).getBlockedUserIDs().get(0), blockedUser.getId());
41+
42+
// Unblocking the user
43+
BlockUser.UnblockUserRequestData.UnblockUserRequest unblockRequest =
44+
BlockUser.unblockUser()
45+
.blockedUserID(blockedUser.getId())
46+
.userID(blockingUser.getId());
47+
48+
BlockUser.UnblockUserResponse unblockResponse = unblockRequest.request();
49+
Assertions.assertNotNull(unblockResponse);
50+
51+
// Verify user is unblocked
52+
getBlockedUsersRequest = BlockUser.getBlockedUsers(blockingUser.getId());
53+
54+
getBlockedUsersResponse = getBlockedUsersRequest.request();
55+
Assertions.assertTrue(getBlockedUsersResponse.getBlockedUsers().isEmpty());
56+
57+
users = User.list().filterCondition("id", blockingUser.getId()).request();
58+
Assertions.assertTrue(
59+
users.getUsers().get(0).getBlockedUserIDs() == null
60+
|| users.getUsers().get(0).getBlockedUserIDs().isEmpty());
61+
});
62+
}
63+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy