From 78f727278278e328d62adcfdccc8f1e226f0fd9a Mon Sep 17 00:00:00 2001 From: clayton Date: Thu, 17 Aug 2023 22:15:11 -0700 Subject: [PATCH 1/4] Move kudosu stats to include on `UserCompactTransformer` --- app/Transformers/UserCompactTransformer.php | 9 +++++++++ app/Transformers/UserTransformer.php | 5 +---- resources/views/docs/_structures/user.md | 3 +-- resources/views/docs/_structures/user_compact.md | 10 ++++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/app/Transformers/UserCompactTransformer.php b/app/Transformers/UserCompactTransformer.php index f1f3603d0ba..fbbbf529141 100644 --- a/app/Transformers/UserCompactTransformer.php +++ b/app/Transformers/UserCompactTransformer.php @@ -69,6 +69,7 @@ class UserCompactTransformer extends TransformerAbstract 'is_nat', 'is_restricted', 'is_silenced', + 'kudosu', 'loved_beatmapset_count', 'mapping_follower_count', 'monthly_playcounts', @@ -285,6 +286,14 @@ public function includeIsSilenced(User $user) return $this->primitive($user->isSilenced()); } + public function includeKudosu(User $user): ResourceInterface + { + return $this->primitive([ + 'available' => $user->osu_kudosavailable, + 'total' => $user->osu_kudostotal, + ]); + } + public function includeLovedBeatmapsetCount(User $user) { return $this->primitive($user->profileBeatmapsetCountByGroupedStatus('loved')); diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php index 7b394eff7da..b3e27a2aaea 100644 --- a/app/Transformers/UserTransformer.php +++ b/app/Transformers/UserTransformer.php @@ -21,6 +21,7 @@ class UserTransformer extends UserCompactTransformer 'is_nat', 'is_restricted', 'is_silenced', + 'kudosu', ]; public function transform(User $user) @@ -35,10 +36,6 @@ public function transform(User $user) 'has_supported' => $user->hasSupported(), 'interests' => $user->user_interests, 'join_date' => json_time($user->user_regdate), - 'kudosu' => [ - 'total' => $user->osu_kudostotal, - 'available' => $user->osu_kudosavailable, - ], 'location' => $user->user_from, 'max_blocks' => $user->maxBlocks(), 'max_friends' => $user->maxFriends(), diff --git a/resources/views/docs/_structures/user.md b/resources/views/docs/_structures/user.md index 3db8e1374d5..207cf5752c1 100644 --- a/resources/views/docs/_structures/user.md +++ b/resources/views/docs/_structures/user.md @@ -170,8 +170,6 @@ discord | string? | | has_supported | boolean | whether or not ever being a supporter in the past interests | string? | | join_date | Timestamp | | -kudosu.available | number | | -kudosu.total | number | | location | string? | | max_blocks | number | maximum number of users allowed to be blocked max_friends | number | maximum number of friends allowed to be added @@ -190,6 +188,7 @@ In addition, the following [optional attributes on UserCompact](#usercompact-opt - country - cover - is_restricted (present only if this is the currently authenticated user) +- kudosu
diff --git a/resources/views/docs/_structures/user_compact.md b/resources/views/docs/_structures/user_compact.md index fd301a1c047..e96311ee61f 100644 --- a/resources/views/docs/_structures/user_compact.md +++ b/resources/views/docs/_structures/user_compact.md @@ -55,6 +55,7 @@ graveyard_beatmapset_count | number groups | [UserGroup](#usergroup)[] guest_beatmapset_count | number is_restricted | boolean? +kudosu | [UserCompact.Kudosu](#usercompact-kudosu) loved_beatmapset_count | number mapping_follower_count | number monthly_playcounts | [UserMonthlyPlaycount](#usermonthlyplaycount)[] @@ -118,3 +119,12 @@ awarded_at | Timestamp | | description | string | | image_url | string | | url | string | | + +
+ +### Kudosu + +Field | Type +----------|----- +available | number +total | number From 5fde2c2d940facd635dac4412b98b2a23caa8631 Mon Sep 17 00:00:00 2001 From: clayton Date: Thu, 17 Aug 2023 22:15:11 -0700 Subject: [PATCH 2/4] Add API route for kudosu ranking --- app/Http/Controllers/RankingController.php | 25 +++++++++++++++++++++- routes/web.php | 1 + tests/api_routes.json | 16 ++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/RankingController.php b/app/Http/Controllers/RankingController.php index 06d331bf9d7..f19d99d2ce4 100644 --- a/app/Http/Controllers/RankingController.php +++ b/app/Http/Controllers/RankingController.php @@ -12,6 +12,7 @@ use App\Models\User; use App\Models\UserStatistics; use App\Transformers\SelectOptionTransformer; +use App\Transformers\UserCompactTransformer; use DB; use Illuminate\Pagination\LengthAwarePaginator; @@ -221,6 +222,19 @@ public function index($mode, $type) return ext_view("rankings.{$type}", array_merge($this->defaultViewVars, compact('scores'))); } + /** + * Get Kudosu Ranking + * + * Gets the kudosu ranking. + * + * --- + * + * ### Response format + * + * Returns an array of [UserCompact](#usercompact) with `kudosu` included. + * + * @queryParam page Ranking page. Example: 1 + */ public function kudosu() { static $maxResults = 1000; @@ -229,10 +243,19 @@ public function kudosu() $page = min(get_int(request('page')) ?? 1, $maxPage); $scores = User::default() - ->with('country') ->orderBy('osu_kudostotal', 'desc') ->paginate(static::PAGE_SIZE, ['*'], 'page', $page, $maxResults); + if (is_json_request()) { + return json_collection( + $scores, + new UserCompactTransformer(), + 'kudosu', + ); + } + + $scores->loadMissing('country'); + return ext_view('rankings.kudosu', compact('scores')); } diff --git a/routes/web.php b/routes/web.php index ac2994702d2..8c6bfbf470e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -517,6 +517,7 @@ // POST /api/v2/notifications/mark-read Route::post('notifications/mark-read', 'NotificationsController@markRead')->name('notifications.mark-read'); + Route::get('rankings/kudosu', 'RankingController@kudosu'); // GET /api/v2/rankings/:mode/:type Route::get('rankings/{mode}/{type}', 'RankingController@index'); Route::resource('spotlights', 'SpotlightsController', ['only' => ['index']]); diff --git a/tests/api_routes.json b/tests/api_routes.json index c6fa6c9cdd3..6df699f0890 100644 --- a/tests/api_routes.json +++ b/tests/api_routes.json @@ -1023,6 +1023,22 @@ ], "scopes": [] }, + { + "uri": "api/v2/rankings/kudosu", + "methods": [ + "GET", + "HEAD" + ], + "controller": "App\\Http\\Controllers\\RankingController@kudosu", + "middlewares": [ + "App\\Http\\Middleware\\ThrottleRequests:1200,1,api:", + "App\\Http\\Middleware\\RequireScopes", + "App\\Http\\Middleware\\RequireScopes:public" + ], + "scopes": [ + "public" + ] + }, { "uri": "api/v2/rankings/{mode}/{type}", "methods": [ From 4e85fc2865e9b8037a4987aa24b2abaf0f7d774b Mon Sep 17 00:00:00 2001 From: clayton Date: Wed, 13 Sep 2023 15:52:26 -0700 Subject: [PATCH 3/4] Return rankings object instead of array directly --- app/Http/Controllers/RankingController.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/RankingController.php b/app/Http/Controllers/RankingController.php index f19d99d2ce4..9a63805e329 100644 --- a/app/Http/Controllers/RankingController.php +++ b/app/Http/Controllers/RankingController.php @@ -231,7 +231,9 @@ public function index($mode, $type) * * ### Response format * - * Returns an array of [UserCompact](#usercompact) with `kudosu` included. + * Field | Type | Description + * ------- | ----------------------------- | ----------- + * ranking | [UserCompact](#usercompact)[] | Includes `kudosu`. * * @queryParam page Ranking page. Example: 1 */ @@ -247,11 +249,11 @@ public function kudosu() ->paginate(static::PAGE_SIZE, ['*'], 'page', $page, $maxResults); if (is_json_request()) { - return json_collection( + return ['ranking' => json_collection( $scores, new UserCompactTransformer(), 'kudosu', - ); + )]; } $scores->loadMissing('country'); From 5898adfbf3c9d0f3f10d8ef3f95aa97013c893b6 Mon Sep 17 00:00:00 2001 From: clayton Date: Wed, 13 Sep 2023 15:52:59 -0700 Subject: [PATCH 4/4] Fix structure order in UserCompact docs --- .../views/docs/_structures/user_compact.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/views/docs/_structures/user_compact.md b/resources/views/docs/_structures/user_compact.md index e96311ee61f..d05f02eb711 100644 --- a/resources/views/docs/_structures/user_compact.md +++ b/resources/views/docs/_structures/user_compact.md @@ -76,6 +76,15 @@ unread_pm_count | | user_achievements | | user_preferences | | +
+ +### Kudosu + +Field | Type +----------|----- +available | number +total | number +
### ProfileBanner @@ -119,12 +128,3 @@ awarded_at | Timestamp | | description | string | | image_url | string | | url | string | | - -
- -### Kudosu - -Field | Type -----------|----- -available | number -total | number