Skip to content

Commit 9fc5816

Browse files
committed
Implement chat room users api
1 parent 2c3ab9f commit 9fc5816

6 files changed

Lines changed: 175 additions & 0 deletions

File tree

library/src/main/java/me/proxer/library/api/chat/ChatApi.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,11 @@ public ChatMessagesEndpoint messages(final String roomId) {
4545
public SendChatMessageEndpoint sendMessage(final String roomId, final String message) {
4646
return new SendChatMessageEndpoint(internalApi, roomId, message);
4747
}
48+
49+
/**
50+
* Returns the respective endpoint.
51+
*/
52+
public ChatRoomUsersEndpoint roomUsers(final String roomId) {
53+
return new ChatRoomUsersEndpoint(internalApi, roomId);
54+
}
4855
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package me.proxer.library.api.chat;
2+
3+
import lombok.experimental.Accessors;
4+
import me.proxer.library.api.Endpoint;
5+
import me.proxer.library.api.ProxerCall;
6+
import me.proxer.library.entity.chat.ChatRoomUser;
7+
8+
import java.util.List;
9+
10+
/**
11+
* Endpoint for retrieving messages in a chat room.
12+
* <p>
13+
* This behaves differently based on the parameter messageId:
14+
* 1) messageId = 0: Returns the last messages from the chat room.
15+
* 2) messageId != 0: Returns all messages older than that passed from the chat room.
16+
*
17+
* @author Ruben Gees
18+
*/
19+
@Accessors(fluent = true)
20+
public final class ChatRoomUsersEndpoint implements Endpoint<List<ChatRoomUser>> {
21+
22+
private final InternalApi internalApi;
23+
24+
/**
25+
* Sets the id of the room to load.
26+
*/
27+
private final String roomId;
28+
29+
ChatRoomUsersEndpoint(final InternalApi internalApi, final String roomId) {
30+
this.internalApi = internalApi;
31+
this.roomId = roomId;
32+
}
33+
34+
/**
35+
* {@inheritDoc}
36+
*/
37+
@Override
38+
public ProxerCall<List<ChatRoomUser>> build() {
39+
return internalApi.roomUsers(roomId);
40+
}
41+
}

library/src/main/java/me/proxer/library/api/chat/InternalApi.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import me.proxer.library.api.ProxerCall;
44
import me.proxer.library.entity.chat.ChatMessage;
55
import me.proxer.library.entity.chat.ChatRoom;
6+
import me.proxer.library.entity.chat.ChatRoomUser;
67
import retrofit2.http.Field;
78
import retrofit2.http.FormUrlEncoded;
89
import retrofit2.http.GET;
@@ -32,4 +33,7 @@ ProxerCall<List<ChatMessage>> messages(@Query("room_id") String roomId,
3233
@POST("chat/newmessage")
3334
ProxerCall<String> sendMessage(@Field("room_id") String roomId,
3435
@Field("message") String message);
36+
37+
@GET("chat/roomusers")
38+
ProxerCall<List<ChatRoomUser>> roomUsers(@Query("room_id") String roomId);
3539
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package me.proxer.library.entity.chat;
2+
3+
import com.squareup.moshi.Json;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Getter;
6+
import lombok.Value;
7+
import me.proxer.library.entity.ProxerIdItem;
8+
import me.proxer.library.entity.ProxerImageItem;
9+
10+
import javax.annotation.Nullable;
11+
12+
/**
13+
* Entity representing a user, active in a {@link ChatRoom}.
14+
*
15+
* @author Ruben Gees
16+
*/
17+
@Value
18+
@EqualsAndHashCode(onParam = @__({@Nullable}))
19+
public class ChatRoomUser implements ProxerIdItem, ProxerImageItem {
20+
21+
/**
22+
* Returns the id of this user.
23+
*/
24+
@Getter(onMethod = @__({@Override}))
25+
@Json(name = "uid")
26+
private String id;
27+
28+
/**
29+
* Returns the name.
30+
*/
31+
@Json(name = "username")
32+
private String name;
33+
34+
/**
35+
* {@inheritDoc}
36+
*/
37+
@Getter(onMethod = @__({@Override}))
38+
@Json(name = "avatar")
39+
private String image;
40+
41+
/**
42+
* Returns the status.
43+
*/
44+
@Json(name = "status")
45+
private String status;
46+
47+
/**
48+
* Returns if this user is a moderator.
49+
*/
50+
@Json(name = "mod")
51+
private boolean isModerator;
52+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package me.proxer.library.api.chat;
2+
3+
import me.proxer.library.ProxerTest;
4+
import me.proxer.library.api.ProxerException;
5+
import me.proxer.library.entity.chat.ChatRoomUser;
6+
import okhttp3.mockwebserver.MockResponse;
7+
import org.junit.Test;
8+
9+
import java.io.IOException;
10+
import java.util.List;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
/**
15+
* @author Ruben Gees
16+
*/
17+
public class ChatRoomUsersEndpointTest extends ProxerTest {
18+
19+
@Test
20+
public void testDefault() throws IOException, ProxerException {
21+
server.enqueue(new MockResponse().setBody(fromResource("chat_room_users.json")));
22+
23+
final List<ChatRoomUser> result = api.chat()
24+
.roomUsers("123")
25+
.build()
26+
.execute();
27+
28+
assertThat(result).first().isEqualTo(buildFirstUser());
29+
assertThat(result).last().isEqualTo(buildLastUser());
30+
}
31+
32+
@Test
33+
public void testPath() throws ProxerException, IOException, InterruptedException {
34+
server.enqueue(new MockResponse().setBody(fromResource("chat_room_users.json")));
35+
36+
api.chat().roomUsers("12")
37+
.build()
38+
.execute();
39+
40+
assertThat(server.takeRequest().getPath()).isEqualTo("/api/v1/chat/roomusers?room_id=12");
41+
}
42+
43+
private ChatRoomUser buildFirstUser() {
44+
return new ChatRoomUser("730019", "Akaya-", "730019_0bvh9W.jpg",
45+
"My heart is sinking like a stone, in an ocean of it's own.", false);
46+
}
47+
48+
private ChatRoomUser buildLastUser() {
49+
return new ChatRoomUser("229687", "Aver", "229687_FYkLhC.png", "....", true);
50+
}
51+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"error": 0,
3+
"message": "Abrage erfolgreich.",
4+
"data": [
5+
{
6+
"uid": "730019",
7+
"username": "Akaya-",
8+
"avatar": "730019_0bvh9W.jpg",
9+
"status": "My heart is sinking like a stone, in an ocean of it's own.",
10+
"mod": "0"
11+
},
12+
{
13+
"uid": "229687",
14+
"username": "Aver",
15+
"avatar": "229687_FYkLhC.png",
16+
"status": "....",
17+
"mod": "1"
18+
}
19+
]
20+
}

0 commit comments

Comments
 (0)