Skip to content

Commit c77e4ef

Browse files
GwFreak01GwFreak01
authored andcommitted
feat(poll): add query polls endpoint
- Add QueryPollsResponse class with pagination support - Add QueryPollsRequestData with QueryPollsRequest builder class - Add query() static factory method - Add POST /polls/query service method - Add unit tests for basic query and query with filter/sort
1 parent 83e611a commit c77e4ef

File tree

3 files changed

+138
-0
lines changed

3 files changed

+138
-0
lines changed

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

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,71 @@ protected Call<StreamResponseObject> generateCall(Client client) throws StreamEx
556556
}
557557
}
558558

559+
/** Response for querying polls. */
560+
@Data
561+
@NoArgsConstructor
562+
@EqualsAndHashCode(callSuper = true)
563+
public static class QueryPollsResponse extends StreamResponseObject {
564+
@Nullable
565+
@JsonProperty("polls")
566+
private List<Poll> polls;
567+
568+
@Nullable
569+
@JsonProperty("next")
570+
private String next;
571+
572+
@Nullable
573+
@JsonProperty("prev")
574+
private String prev;
575+
}
576+
577+
/** Request data for querying polls. */
578+
@Builder(
579+
builderClassName = "QueryPollsRequest",
580+
builderMethodName = "",
581+
buildMethodName = "internalBuild")
582+
@Getter
583+
@EqualsAndHashCode
584+
public static class QueryPollsRequestData {
585+
@Nullable
586+
@JsonProperty("filter")
587+
private Map<String, Object> filter;
588+
589+
@Singular
590+
@Nullable
591+
@JsonProperty("sort")
592+
private List<Sort> sorts;
593+
594+
@Nullable
595+
@JsonProperty("limit")
596+
private Integer limit;
597+
598+
@Nullable
599+
@JsonProperty("next")
600+
private String next;
601+
602+
@Nullable
603+
@JsonProperty("prev")
604+
private String prev;
605+
606+
@Nullable
607+
@JsonProperty("user_id")
608+
private String userId;
609+
610+
@Nullable
611+
@JsonProperty("user")
612+
private UserRequestObject user;
613+
614+
public static class QueryPollsRequest extends StreamRequest<QueryPollsResponse> {
615+
public QueryPollsRequest() {}
616+
617+
@Override
618+
protected Call<QueryPollsResponse> generateCall(Client client) throws StreamException {
619+
return client.create(PollService.class).query(this.internalBuild());
620+
}
621+
}
622+
}
623+
559624
/** Request data for creating a poll. */
560625
@Builder(
561626
builderClassName = "CreatePollRequest",
@@ -709,4 +774,14 @@ public static DeletePollOptionRequest deleteOption(
709774
@NotNull String pollId, @NotNull String optionId) {
710775
return new DeletePollOptionRequest(pollId, optionId);
711776
}
777+
778+
/**
779+
* Queries polls.
780+
*
781+
* @return the created request
782+
*/
783+
@NotNull
784+
public static QueryPollsRequestData.QueryPollsRequest query() {
785+
return new QueryPollsRequestData.QueryPollsRequest();
786+
}
712787
}

src/main/java/io/getstream/chat/java/services/PollService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.getstream.chat.java.models.Poll.CreatePollResponse;
77
import io.getstream.chat.java.models.Poll.GetPollResponse;
88
import io.getstream.chat.java.models.Poll.PartialUpdatePollRequestData;
9+
import io.getstream.chat.java.models.Poll.QueryPollsRequestData;
10+
import io.getstream.chat.java.models.Poll.QueryPollsResponse;
911
import io.getstream.chat.java.models.Poll.UpdatePollOptionRequestData;
1012
import io.getstream.chat.java.models.Poll.UpdatePollOptionResponse;
1113
import io.getstream.chat.java.models.Poll.UpdatePollRequestData;
@@ -112,4 +114,13 @@ Call<StreamResponseObject> deleteOption(
112114
@NotNull @Path("poll_id") String pollId,
113115
@NotNull @Path("option_id") String optionId,
114116
@Nullable @Query("user_id") String userId);
117+
118+
/**
119+
* Queries polls.
120+
*
121+
* @param request The query polls request data
122+
* @return A response with the matching polls
123+
*/
124+
@POST("polls/query")
125+
Call<QueryPollsResponse> query(@NotNull @Body QueryPollsRequestData request);
115126
}

src/test/java/io/getstream/chat/java/PollTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
import io.getstream.chat.java.models.Poll.CreatePollResponse;
66
import io.getstream.chat.java.models.Poll.GetPollResponse;
77
import io.getstream.chat.java.models.Poll.PollOptionRequestObject;
8+
import io.getstream.chat.java.models.Poll.QueryPollsResponse;
89
import io.getstream.chat.java.models.Poll.UpdatePollOptionResponse;
910
import io.getstream.chat.java.models.Poll.UpdatePollResponse;
1011
import io.getstream.chat.java.models.Poll.VotingVisibility;
12+
import io.getstream.chat.java.models.Sort;
1113
import io.getstream.chat.java.models.framework.StreamResponseObject;
14+
import java.util.Map;
1215
import java.util.UUID;
1316
import org.junit.jupiter.api.Assertions;
1417
import org.junit.jupiter.api.DisplayName;
@@ -378,4 +381,53 @@ void whenDeletingPollOption_thenNoException() {
378381

379382
Assertions.assertNotNull(deleteResponse);
380383
}
384+
385+
@DisplayName("Can query polls")
386+
@Test
387+
void whenQueryingPolls_thenNoException() {
388+
// Create a poll first
389+
Assertions.assertDoesNotThrow(
390+
() ->
391+
Poll.create()
392+
.name("Query Poll " + UUID.randomUUID())
393+
.userId(testUserRequestObject.getId())
394+
.option(PollOptionRequestObject.builder().text("Option 1").build())
395+
.request());
396+
397+
// Query polls
398+
QueryPollsResponse queryResponse =
399+
Assertions.assertDoesNotThrow(
400+
() -> Poll.query().userId(testUserRequestObject.getId()).request());
401+
402+
Assertions.assertNotNull(queryResponse);
403+
Assertions.assertNotNull(queryResponse.getPolls());
404+
}
405+
406+
@DisplayName("Can query polls with filter and sort")
407+
@Test
408+
void whenQueryingPollsWithFilterAndSort_thenNoException() {
409+
// Create a poll first
410+
String pollName = "Filter Poll " + UUID.randomUUID();
411+
Assertions.assertDoesNotThrow(
412+
() ->
413+
Poll.create()
414+
.name(pollName)
415+
.userId(testUserRequestObject.getId())
416+
.option(PollOptionRequestObject.builder().text("Option 1").build())
417+
.request());
418+
419+
// Query polls with filter and sort
420+
QueryPollsResponse queryResponse =
421+
Assertions.assertDoesNotThrow(
422+
() ->
423+
Poll.query()
424+
.filter(Map.of("name", pollName))
425+
.sort(Sort.builder().field("created_at").direction(Sort.Direction.DESC).build())
426+
.limit(10)
427+
.userId(testUserRequestObject.getId())
428+
.request());
429+
430+
Assertions.assertNotNull(queryResponse);
431+
Assertions.assertNotNull(queryResponse.getPolls());
432+
}
381433
}

0 commit comments

Comments
 (0)