diff --git a/example/Example.java b/example/Example.java index 678782cc..772aad5b 100644 --- a/example/Example.java +++ b/example/Example.java @@ -221,6 +221,20 @@ public static void main(String[] args) throws Exception { // playerFeed.addActivity(activity); userFeed.addActivity(activity); + // Get activities sorted by the ranking method along with externalRankingVars + Map mp=new LinkedHashMap(); + + mp.put("boolVal",true); + mp.put("music",1); + mp.put("sports",2.1); + mp.put("string","str"); + response = userFeed.feed.getActivities( + new Limit(69), + new Offset(13), + DefaultOptions.DEFAULT_FILTER, + "rank", + new RankingVars(mp) + ); /* -------------------------------------------------------- */ // Batch following many feeds diff --git a/src/main/java/io/getstream/client/FlatFeed.java b/src/main/java/io/getstream/client/FlatFeed.java index 1f7ef366..f10e8824 100644 --- a/src/main/java/io/getstream/client/FlatFeed.java +++ b/src/main/java/io/getstream/client/FlatFeed.java @@ -8,8 +8,10 @@ import io.getstream.core.models.FeedID; import io.getstream.core.options.*; import io.getstream.core.utils.DefaultOptions; + import java.io.IOException; import java.util.List; + import java8.util.concurrent.CompletableFuture; import java8.util.concurrent.CompletionException; @@ -104,6 +106,28 @@ limit, offset, filter, DefaultOptions.DEFAULT_MARKER, new Ranking(ranking) }); } + CompletableFuture> getActivities( + Limit limit, Offset offset, Filter filter, String ranking, RankingVars rankingVars) throws StreamException { + + final RequestOption[] options = + ranking == null + ? new RequestOption[] {limit, offset, filter, DefaultOptions.DEFAULT_MARKER} + : new RequestOption[] { + limit, offset, filter, DefaultOptions.DEFAULT_MARKER, new Ranking(ranking), rankingVars + }; + return getClient() + .getActivities(getID(), options) + .thenApply( + response -> { + try { + return deserializeContainer(response, Activity.class); + } catch (StreamException | IOException e) { + throw new CompletionException(e); + } + }); + } + + public CompletableFuture> getCustomActivities(Class type) throws StreamException { return getCustomActivities( type, diff --git a/src/main/java/io/getstream/core/options/RankingVars.java b/src/main/java/io/getstream/core/options/RankingVars.java new file mode 100644 index 00000000..3bb06286 --- /dev/null +++ b/src/main/java/io/getstream/core/options/RankingVars.java @@ -0,0 +1,36 @@ +package io.getstream.core.options; + +import com.fasterxml.jackson.databind.ObjectMapper; +import io.getstream.core.http.Request; +import java8.util.concurrent.CompletionException; + +import java.io.IOException; +import java.util.Map; + +public final class RankingVars implements RequestOption{ + + private final String rankingVarsJSON; + + public RankingVars(Map externalVars) { + String rankingVarsJSON; + try { + ObjectMapper objectMapper = new ObjectMapper(); + rankingVarsJSON = objectMapper.writeValueAsString(externalVars); + } + catch (IOException e){ + throw new CompletionException(e); + } + + this.rankingVarsJSON = rankingVarsJSON; + } + + public String getRankingVars() { + return rankingVarsJSON; + } + + @Override + public void apply(Request.Builder builder) { + builder.addQueryParameter("ranking_vars", rankingVarsJSON); + } +} + diff --git a/src/test/java/io/getstream/client/ClientTest.java b/src/test/java/io/getstream/client/ClientTest.java index 017250d5..242a2340 100644 --- a/src/test/java/io/getstream/client/ClientTest.java +++ b/src/test/java/io/getstream/client/ClientTest.java @@ -6,11 +6,13 @@ import io.getstream.core.http.HTTPClient; import io.getstream.core.http.Request; import io.getstream.core.http.Response; -import io.getstream.core.options.EnrichmentFlags; -import io.getstream.core.options.Filter; -import io.getstream.core.options.Limit; -import io.getstream.core.options.Offset; +import io.getstream.core.options.*; + import java.net.URL; +import java.util.Map; +import java.util.LinkedHashMap; + +import io.getstream.core.utils.DefaultOptions; import java8.util.concurrent.CompletableFuture; import org.junit.Test; @@ -155,6 +157,37 @@ public void enrichedFeedURL() throws Exception { assertNull(httpClient.lastRequest.getBody()); } + @Test + public void feedURLExternalRanking() throws Exception { + MockHTTPClient httpClient = new MockHTTPClient(); + Client client = Client.builder(apiKey, secret).httpClient(httpClient).build(); + FlatFeed feed = client.flatFeed("flat", "1"); + + Map mp=new LinkedHashMap(); + + mp.put("boolVal",true); + mp.put("music",1); + mp.put("sports",2.1); + mp.put("string","str"); + feed.getActivities( + new Limit(69), + new Offset(13), + DefaultOptions.DEFAULT_FILTER, + "rank", + new RankingVars(mp) + ); + + assertNotNull(httpClient.lastRequest); + URL feedURL = + new URL( + "https://us-east-api.stream-io-api.com:443/api/v1.0/feed/flat/1/?api_key=" + + apiKey + + "&limit=69&offset=13&ranking=rank&ranking_vars=%7B%22boolVal%22:true,%22music%22:1,%22sports%22:2.1,%22string%22:%22str%22%7D"); + assertEquals(httpClient.lastRequest.getURL(), feedURL); + assertEquals(httpClient.lastRequest.getMethod(), Request.Method.GET); + assertNull(httpClient.lastRequest.getBody()); + } + @Test public void feedFollowURL() throws Exception { MockHTTPClient httpClient = new MockHTTPClient();