2424import okhttp3 .Request ;
2525import okhttp3 .Response ;
2626import okhttp3 .ResponseBody ;
27+ import so .trophy .resources .streaks .requests .StreaksListRequest ;
2728import so .trophy .resources .streaks .requests .StreaksRankingsRequest ;
29+ import so .trophy .types .BulkStreakResponseItem ;
2830import so .trophy .types .ErrorBody ;
2931import so .trophy .types .StreakRankingUser ;
3032
@@ -36,31 +38,28 @@ public StreaksClient(ClientOptions clientOptions) {
3638 }
3739
3840 /**
39- * Get the top users by streak length (active or longest) .
41+ * Get the streak lengths of a list of users, ranked by streak length from longest to shortest .
4042 */
41- public List <StreakRankingUser > rankings () {
42- return rankings ( StreaksRankingsRequest .builder ().build ());
43+ public List <BulkStreakResponseItem > list () {
44+ return list ( StreaksListRequest .builder ().build ());
4345 }
4446
4547 /**
46- * Get the top users by streak length (active or longest) .
48+ * Get the streak lengths of a list of users, ranked by streak length from longest to shortest .
4749 */
48- public List <StreakRankingUser > rankings ( StreaksRankingsRequest request ) {
49- return rankings (request ,null );
50+ public List <BulkStreakResponseItem > list ( StreaksListRequest request ) {
51+ return list (request ,null );
5052 }
5153
5254 /**
53- * Get the top users by streak length (active or longest) .
55+ * Get the streak lengths of a list of users, ranked by streak length from longest to shortest .
5456 */
55- public List <StreakRankingUser > rankings ( StreaksRankingsRequest request ,
57+ public List <BulkStreakResponseItem > list ( StreaksListRequest request ,
5658 RequestOptions requestOptions ) {
5759 HttpUrl .Builder httpUrl = HttpUrl .parse (this .clientOptions .environment ().getUrl ()).newBuilder ()
5860
59- .addPathSegments ("streaks/rankings" );if (request .getLimit ().isPresent ()) {
60- httpUrl .addQueryParameter ("limit" , request .getLimit ().get ().toString ());
61- }
62- if (request .getType ().isPresent ()) {
63- httpUrl .addQueryParameter ("type" , request .getType ().get ().toString ());
61+ .addPathSegments ("streaks" );if (request .getUserIds ().isPresent ()) {
62+ httpUrl .addQueryParameter ("userIds" , request .getUserIds ().get ());
6463 }
6564 Request .Builder _requestBuilder = new Request .Builder ()
6665 .url (httpUrl .build ())
@@ -75,7 +74,7 @@ public List<StreakRankingUser> rankings(StreaksRankingsRequest request,
7574 try (Response response = client .newCall (okhttpRequest ).execute ()) {
7675 ResponseBody responseBody = response .body ();
7776 if (response .isSuccessful ()) {
78- return ObjectMappers .JSON_MAPPER .readValue (responseBody .string (), new TypeReference <List <StreakRankingUser >>() {});
77+ return ObjectMappers .JSON_MAPPER .readValue (responseBody .string (), new TypeReference <List <BulkStreakResponseItem >>() {});
7978 }
8079 String responseBodyString = responseBody != null ? responseBody .string () : "{}" ;
8180 try {
@@ -93,4 +92,63 @@ public List<StreakRankingUser> rankings(StreaksRankingsRequest request,
9392 throw new TrophyApiException ("Network error executing HTTP request" , e );
9493 }
9594 }
96- }
95+
96+ /**
97+ * Get the top users by streak length (active or longest).
98+ */
99+ public List <StreakRankingUser > rankings () {
100+ return rankings (StreaksRankingsRequest .builder ().build ());
101+ }
102+
103+ /**
104+ * Get the top users by streak length (active or longest).
105+ */
106+ public List <StreakRankingUser > rankings (StreaksRankingsRequest request ) {
107+ return rankings (request ,null );
108+ }
109+
110+ /**
111+ * Get the top users by streak length (active or longest).
112+ */
113+ public List <StreakRankingUser > rankings (StreaksRankingsRequest request ,
114+ RequestOptions requestOptions ) {
115+ HttpUrl .Builder httpUrl = HttpUrl .parse (this .clientOptions .environment ().getUrl ()).newBuilder ()
116+
117+ .addPathSegments ("streaks/rankings" );if (request .getLimit ().isPresent ()) {
118+ httpUrl .addQueryParameter ("limit" , request .getLimit ().get ().toString ());
119+ }
120+ if (request .getType ().isPresent ()) {
121+ httpUrl .addQueryParameter ("type" , request .getType ().get ().toString ());
122+ }
123+ Request .Builder _requestBuilder = new Request .Builder ()
124+ .url (httpUrl .build ())
125+ .method ("GET" , null )
126+ .headers (Headers .of (clientOptions .headers (requestOptions )))
127+ .addHeader ("Content-Type" , "application/json" ).addHeader ("Accept" , "application/json" );
128+ Request okhttpRequest = _requestBuilder .build ();
129+ OkHttpClient client = clientOptions .httpClient ();
130+ if (requestOptions != null && requestOptions .getTimeout ().isPresent ()) {
131+ client = clientOptions .httpClientWithTimeout (requestOptions );
132+ }
133+ try (Response response = client .newCall (okhttpRequest ).execute ()) {
134+ ResponseBody responseBody = response .body ();
135+ if (response .isSuccessful ()) {
136+ return ObjectMappers .JSON_MAPPER .readValue (responseBody .string (), new TypeReference <List <StreakRankingUser >>() {});
137+ }
138+ String responseBodyString = responseBody != null ? responseBody .string () : "{}" ;
139+ try {
140+ switch (response .code ()) {
141+ case 401 :throw new UnauthorizedError (ObjectMappers .JSON_MAPPER .readValue (responseBodyString , ErrorBody .class ));
142+ case 422 :throw new UnprocessableEntityError (ObjectMappers .JSON_MAPPER .readValue (responseBodyString , ErrorBody .class ));
143+ }
144+ }
145+ catch (JsonProcessingException ignored ) {
146+ // unable to map error response, throwing generic error
147+ }
148+ throw new TrophyApiApiException ("Error with status code " + response .code (), response .code (), ObjectMappers .JSON_MAPPER .readValue (responseBodyString , Object .class ));
149+ }
150+ catch (IOException e ) {
151+ throw new TrophyApiException ("Network error executing HTTP request" , e );
152+ }
153+ }
154+ }
0 commit comments