diff --git a/app/Docs/Attributes/SortCustom.php b/app/Docs/Attributes/Sort.php similarity index 96% rename from app/Docs/Attributes/SortCustom.php rename to app/Docs/Attributes/Sort.php index e338e155ba0..c925922a278 100644 --- a/app/Docs/Attributes/SortCustom.php +++ b/app/Docs/Attributes/Sort.php @@ -11,7 +11,7 @@ use Knuckles\Scribe\Attributes\GenericParam; #[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_CLASS)] -class SortCustom extends GenericParam +class Sort extends GenericParam { public function __construct( array|string $sorts, diff --git a/app/Docs/Attributes/SortId.php b/app/Docs/Attributes/SortId.php deleted file mode 100644 index 9960a381d7e..00000000000 --- a/app/Docs/Attributes/SortId.php +++ /dev/null @@ -1,23 +0,0 @@ -. Licensed under the GNU Affero General Public License v3.0. -// See the LICENCE file in the repository root for full licence text. - -declare(strict_types=1); - -namespace App\Docs\Attributes; - -use Attribute; -use Knuckles\Scribe\Attributes\GenericParam; - -#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_FUNCTION | Attribute::TARGET_METHOD | Attribute::TARGET_CLASS)] -class SortId extends GenericParam -{ - public function __construct( - string $description = '`id_desc` for newest first; `id_asc` for oldest first. Defaults to `id_desc`.', - bool $required = false, - ?string $example = null, - ) { - parent::__construct('sort', 'string', $description, $required, $example ?? 'No-example'); - } -} diff --git a/app/Docs/Strategies/GetFromQueryParamAttribute.php b/app/Docs/Strategies/GetFromQueryParamAttribute.php index 8669f2f9f8a..83d7fb3e73e 100644 --- a/app/Docs/Strategies/GetFromQueryParamAttribute.php +++ b/app/Docs/Strategies/GetFromQueryParamAttribute.php @@ -10,8 +10,7 @@ use App\Docs\Attributes\Limit; use App\Docs\Attributes\Offset; use App\Docs\Attributes\Page; -use App\Docs\Attributes\SortCustom; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use Http\Message\Authentication\QueryParam; use Knuckles\Scribe\Extracting\Strategies\GetParamsFromAttributeStrategy; @@ -22,7 +21,6 @@ class GetFromQueryParamAttribute extends GetParamsFromAttributeStrategy Offset::class, Page::class, QueryParam::class, - SortCustom::class, - SortId::class, + Sort::class, ]; } diff --git a/app/Http/Controllers/BeatmapDiscussionPostsController.php b/app/Http/Controllers/BeatmapDiscussionPostsController.php index 0c3abd81990..b3665d1728a 100644 --- a/app/Http/Controllers/BeatmapDiscussionPostsController.php +++ b/app/Http/Controllers/BeatmapDiscussionPostsController.php @@ -7,7 +7,7 @@ use App\Docs\Attributes\Limit; use App\Docs\Attributes\Page; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Exceptions\ModelNotSavedException; use App\Libraries\BeatmapsetDiscussion\Discussion; use App\Libraries\BeatmapsetDiscussion\Reply; @@ -73,7 +73,7 @@ public function destroy($id) * @queryParam user integer The `id` of the [User](#user). * @queryParam with_deleted boolean This param has no effect as api calls do not currently receive group permissions. */ - #[Limit, Page, SortId] + #[Limit, Page, Sort('IdSort')] public function index() { $bundle = new BeatmapsetDiscussionPostsBundle(request()->all()); diff --git a/app/Http/Controllers/BeatmapDiscussionsController.php b/app/Http/Controllers/BeatmapDiscussionsController.php index d5cea6bfefa..ba913b9db65 100644 --- a/app/Http/Controllers/BeatmapDiscussionsController.php +++ b/app/Http/Controllers/BeatmapDiscussionsController.php @@ -7,7 +7,7 @@ use App\Docs\Attributes\Limit; use App\Docs\Attributes\Page; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Exceptions\ModelNotSavedException; use App\Libraries\BeatmapsetDiscussion\Review; use App\Libraries\BeatmapsetDiscussionsBundle; @@ -102,7 +102,7 @@ public function destroy($id) * @queryParam user integer The `id` of the [User](#user). * @queryParam with_deleted boolean This param has no effect as api calls do not currently receive group permissions. No-example */ - #[Limit, Page, SortId] + #[Limit, Page, Sort('IdSort')] public function index() { $bundle = new BeatmapsetDiscussionsBundle(request()->all()); diff --git a/app/Http/Controllers/BeatmapsetDiscussionVotesController.php b/app/Http/Controllers/BeatmapsetDiscussionVotesController.php index cd8cbc03454..d28e2ec7af8 100644 --- a/app/Http/Controllers/BeatmapsetDiscussionVotesController.php +++ b/app/Http/Controllers/BeatmapsetDiscussionVotesController.php @@ -7,7 +7,7 @@ use App\Docs\Attributes\Limit; use App\Docs\Attributes\Page; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Libraries\BeatmapsetDiscussionVotesBundle; /** @@ -49,7 +49,7 @@ public function __construct() * @queryParam user integer The `id` of the [User](#user) giving the votes. * @queryParam with_deleted boolean This param has no effect as api calls do not currently receive group permissions. No-example */ - #[Limit, Page, SortId] + #[Limit, Page, Sort('IdSort')] public function index() { $bundle = new BeatmapsetDiscussionVotesBundle(request()->all()); diff --git a/app/Http/Controllers/CommentsController.php b/app/Http/Controllers/CommentsController.php index 9cb3befc969..cf6b05188ae 100644 --- a/app/Http/Controllers/CommentsController.php +++ b/app/Http/Controllers/CommentsController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers; -use App\Docs\Attributes\SortCustom; +use App\Docs\Attributes\Sort; use App\Exceptions\ModelNotSavedException; use App\Jobs\Notifications\CommentNew; use App\Libraries\CommentBundle; @@ -77,7 +77,7 @@ public function destroy($id) * @queryParam cursor Pagination option. See [CommentSort](#commentsort) for detail. The format follows [Cursor](#cursor) except it's not currently included in the response. No-example * @queryParam parent_id integer Limit to comments which are reply to the specified id. Specify 0 to get top level comments. Example: 1 */ - #[SortCustom('CommentSort', 'Defaults to `new` for guests and user-specified default when authenticated.', 'new')] + #[Sort('CommentSort', 'Defaults to `new` for guests and user-specified default when authenticated.', 'new')] public function index() { $params = request()->all(); diff --git a/app/Http/Controllers/EventsController.php b/app/Http/Controllers/EventsController.php index 3573e166528..fd22cb0bf76 100644 --- a/app/Http/Controllers/EventsController.php +++ b/app/Http/Controllers/EventsController.php @@ -7,7 +7,7 @@ namespace App\Http\Controllers; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Models\Event; /** @@ -52,7 +52,7 @@ public function __construct() * cursor_string: "eyJldmVudF9pZCI6OH0" * } */ - #[SortId] + #[Sort('IdSort')] public function index() { $params = request()->all(); diff --git a/app/Http/Controllers/Forum/TopicsController.php b/app/Http/Controllers/Forum/TopicsController.php index ff0a6793c8d..aff00aa901d 100644 --- a/app/Http/Controllers/Forum/TopicsController.php +++ b/app/Http/Controllers/Forum/TopicsController.php @@ -6,7 +6,7 @@ namespace App\Http\Controllers\Forum; use App\Docs\Attributes\Limit; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Exceptions\ModelNotSavedException; use App\Jobs\Notifications\ForumTopicReply; use App\Libraries\NewForumTopic; @@ -314,7 +314,7 @@ public function reply($id) * "sort": "id_asc" * } */ - #[Limit(20, 1, 50, 'Maximum number of posts to be returned'), SortId] + #[Limit(20, 1, 50, 'Maximum number of posts to be returned'), Sort('IdSort')] public function show($id) { $topic = Topic::with(['forum'])->withTrashed()->findOrFail($id); diff --git a/app/Http/Controllers/MatchesController.php b/app/Http/Controllers/MatchesController.php index 029b81fde23..f98bfb85c5e 100644 --- a/app/Http/Controllers/MatchesController.php +++ b/app/Http/Controllers/MatchesController.php @@ -6,7 +6,7 @@ namespace App\Http\Controllers; use App\Docs\Attributes\Limit; -use App\Docs\Attributes\SortId; +use App\Docs\Attributes\Sort; use App\Models\LegacyMatch\LegacyMatch; use App\Models\User; use App\Transformers\LegacyMatch\EventTransformer; @@ -60,7 +60,7 @@ public function __construct() * "cursor_string": "eyJtYXRjaF9pZCI6MTE0NDI4Njg1fQ" * } */ - #[Limit(50, 1, 50), SortId] + #[Limit(50, 1, 50), Sort('IdSort')] public function index() { $params = request()->all(); diff --git a/app/Http/Controllers/Multiplayer/Rooms/Playlist/ScoresController.php b/app/Http/Controllers/Multiplayer/Rooms/Playlist/ScoresController.php index 88e7fbe78a0..dad9c25c502 100644 --- a/app/Http/Controllers/Multiplayer/Rooms/Playlist/ScoresController.php +++ b/app/Http/Controllers/Multiplayer/Rooms/Playlist/ScoresController.php @@ -6,7 +6,7 @@ namespace App\Http\Controllers\Multiplayer\Rooms\Playlist; use App\Docs\Attributes\Limit; -use App\Docs\Attributes\SortCustom; +use App\Docs\Attributes\Sort; use App\Exceptions\InvariantException; use App\Http\Controllers\Controller as BaseController; use App\Libraries\ClientCheck; @@ -47,7 +47,7 @@ public function __construct() * @usesCursor */ #[Limit(50, 1, 50)] - #[SortCustom('MultiplayerScoresSort')] + #[Sort('MultiplayerScoresSort')] public function index($roomId, $playlistId) { $playlist = PlaylistItem::where('room_id', $roomId)->findOrFail($playlistId); diff --git a/app/Http/Controllers/Multiplayer/RoomsController.php b/app/Http/Controllers/Multiplayer/RoomsController.php index c8fb03136f1..7d368e6f3bf 100644 --- a/app/Http/Controllers/Multiplayer/RoomsController.php +++ b/app/Http/Controllers/Multiplayer/RoomsController.php @@ -6,7 +6,7 @@ namespace App\Http\Controllers\Multiplayer; use App\Docs\Attributes\Limit; -use App\Docs\Attributes\SortCustom; +use App\Docs\Attributes\Sort; use App\Exceptions\InvariantException; use App\Http\Controllers\Controller as BaseController; use App\Models\Model; @@ -32,7 +32,7 @@ public function __construct() * @queryParam season_id Season ID to return Rooms from. No-example * @queryParam type_group `playlists` (default) or `realtime`. No-example */ - #[Limit(250, 1, 250), SortCustom(['ended', 'created'])] + #[Limit(250, 1, 250), Sort(['ended', 'created'])] public function index() { $apiVersion = api_version(); diff --git a/resources/views/docs/_structures/id_sort.md b/resources/views/docs/_structures/id_sort.md new file mode 100644 index 00000000000..4760b96f4b3 --- /dev/null +++ b/resources/views/docs/_structures/id_sort.md @@ -0,0 +1,9 @@ +## IdSort + +Available sort types are `id_asc`, `id_desc`. + +Name | Description +------- | ---------------------------- +id_asc | Sort by oldest first. +id_desc | Sort by newest first. +