diff --git a/framework/core/src/Api/Endpoint/Concerns/ExtractsListingParams.php b/framework/core/src/Api/Endpoint/Concerns/ExtractsListingParams.php index eb23f5d1f..48f6a2d01 100644 --- a/framework/core/src/Api/Endpoint/Concerns/ExtractsListingParams.php +++ b/framework/core/src/Api/Endpoint/Concerns/ExtractsListingParams.php @@ -15,7 +15,7 @@ trait ExtractsListingParams protected ?Closure $extractLimitCallback = null; protected ?Closure $extractOffsetCallback = null; - public int $limit = 20; + public ?int $limit = null; public int $maxLimit = 50; public ?string $defaultSort = null; diff --git a/framework/core/src/Api/Resource/DiscussionResource.php b/framework/core/src/Api/Resource/DiscussionResource.php index 6729f0479..3f7218347 100644 --- a/framework/core/src/Api/Resource/DiscussionResource.php +++ b/framework/core/src/Api/Resource/DiscussionResource.php @@ -8,6 +8,7 @@ use Flarum\Api\Endpoint; use Flarum\Api\Endpoint\Create; use Flarum\Api\JsonApi; use Flarum\Api\Schema; +use Flarum\Api\Sort\SortColumn; use Flarum\Bus\Dispatcher; use Flarum\Discussion\Command\ReadDiscussion; use Flarum\Discussion\Discussion; @@ -20,7 +21,6 @@ use Flarum\Post\PostRepository; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; class DiscussionResource extends AbstractDatabaseResource { diff --git a/framework/core/src/Api/Resource/GroupResource.php b/framework/core/src/Api/Resource/GroupResource.php index fbf67e29e..f38fbb6bb 100644 --- a/framework/core/src/Api/Resource/GroupResource.php +++ b/framework/core/src/Api/Resource/GroupResource.php @@ -4,6 +4,7 @@ namespace Flarum\Api\Resource; use Flarum\Api\Endpoint; use Flarum\Api\Schema; +use Flarum\Api\Sort\SortColumn; use Flarum\Group\Event\Deleting; use Flarum\Group\Event\Saving; use Flarum\Group\Group; @@ -11,7 +12,6 @@ use Flarum\Http\RequestUtil; use Flarum\Locale\TranslatorInterface; use Illuminate\Database\Eloquent\Builder; use Tobyz\JsonApiServer\Context; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; class GroupResource extends AbstractDatabaseResource { diff --git a/framework/core/src/Api/Resource/PostResource.php b/framework/core/src/Api/Resource/PostResource.php index 108aa1852..f9f97b771 100644 --- a/framework/core/src/Api/Resource/PostResource.php +++ b/framework/core/src/Api/Resource/PostResource.php @@ -6,6 +6,7 @@ use Carbon\Carbon; use Flarum\Api\Context; use Flarum\Api\Endpoint; use Flarum\Api\Schema; +use Flarum\Api\Sort\SortColumn; use Flarum\Bus\Dispatcher; use Flarum\Discussion\Command\ReadDiscussion; use Flarum\Discussion\Discussion; @@ -19,7 +20,6 @@ use Flarum\Post\PostRepository; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Arr; use Tobyz\JsonApiServer\Exception\BadRequestException; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; class PostResource extends AbstractDatabaseResource { diff --git a/framework/core/src/Api/Resource/UserResource.php b/framework/core/src/Api/Resource/UserResource.php index 52dac17f7..3330b4537 100644 --- a/framework/core/src/Api/Resource/UserResource.php +++ b/framework/core/src/Api/Resource/UserResource.php @@ -5,6 +5,7 @@ namespace Flarum\Api\Resource; use Flarum\Api\Context; use Flarum\Api\Endpoint; use Flarum\Api\Schema; +use Flarum\Api\Sort\SortColumn; use Flarum\Foundation\ValidationException; use Flarum\Http\SlugManager; use Flarum\Locale\TranslatorInterface; @@ -22,7 +23,6 @@ use Illuminate\Support\Arr; use Illuminate\Support\Str; use Intervention\Image\ImageManager; use InvalidArgumentException; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; class UserResource extends AbstractDatabaseResource { diff --git a/framework/core/src/Api/Sort/SortColumn.php b/framework/core/src/Api/Sort/SortColumn.php new file mode 100644 index 000000000..492e348d0 --- /dev/null +++ b/framework/core/src/Api/Sort/SortColumn.php @@ -0,0 +1,10 @@ + $endpointClass + * @param class-string<\Flarum\Api\Endpoint\Endpoint>|array<\Flarum\Api\Endpoint\Endpoint> $endpointClass the class name of the endpoint. + * or an array of class names of the endpoints. * @param callable|class-string $mutator a callable that accepts an endpoint and returns the modified endpoint. */ - public function endpoint(string $endpointClass, callable|string $mutator): self + public function endpoint(string|array $endpointClass, callable|string $mutator): self { - $this->endpoint[$endpointClass] = $mutator; + foreach ((array) $endpointClass as $endpointClassItem) { + $this->endpoint[$endpointClassItem] = $mutator; + } return $this; } @@ -102,12 +105,14 @@ class ApiResource implements ExtenderInterface /** * Modify a field. * - * @param string $field the name of the field. + * @param string|string[] $field the name of the field or an array of field names. * @param callable|class-string $mutator a callable that accepts a field and returns the modified field. */ - public function field(string $field, callable|string $mutator): self + public function field(string|array $field, callable|string $mutator): self { - $this->field[$field] = $mutator; + foreach ((array) $field as $fieldItem) { + $this->field[$fieldItem] = $mutator; + } return $this; } @@ -140,12 +145,14 @@ class ApiResource implements ExtenderInterface /** * Modify a sort. * - * @param string $sort the name of the sort. + * @param string|string[] $sort the name of the sort or an array of sort names. * @param callable|class-string $mutator a callable that accepts a sort and returns the modified sort. */ - public function sort(string $sort, callable|string $mutator): self + public function sort(string|array $sort, callable|string $mutator): self { - $this->sort[$sort] = $mutator; + foreach ((array) $sort as $sortItem) { + $this->sort[$sortItem] = $mutator; + } return $this; } diff --git a/framework/core/src/Foundation/Site.php b/framework/core/src/Foundation/Site.php index 0f0ce1591..3eca6db0e 100644 --- a/framework/core/src/Foundation/Site.php +++ b/framework/core/src/Foundation/Site.php @@ -9,15 +9,8 @@ namespace Flarum\Foundation; -use Flarum\Api\Endpoint\Show; -use Flarum\Api\Resource\DiscussionResource; -use Flarum\Api\Resource\UserResource; -use Flarum\Api\Schema\Relationship\ToMany; -use Flarum\Discussion\Discussion; -use Flarum\User\User; use Illuminate\Support\Arr; use RuntimeException; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; class Site { diff --git a/framework/core/tests/integration/extenders/ApiControllerTest.php b/framework/core/tests/integration/extenders/ApiControllerTest.php index 77196f252..3d665ed0a 100644 --- a/framework/core/tests/integration/extenders/ApiControllerTest.php +++ b/framework/core/tests/integration/extenders/ApiControllerTest.php @@ -17,8 +17,7 @@ use Flarum\Api\Resource\AbstractDatabaseResource; use Flarum\Api\Resource\DiscussionResource; use Flarum\Api\Resource\UserResource; use Flarum\Api\Schema\Relationship\ToMany; -use Flarum\Api\Serializer\DiscussionSerializer; -use Flarum\Api\Serializer\UserSerializer; +use Flarum\Api\Sort\SortColumn; use Flarum\Discussion\Discussion; use Flarum\Extend; use Flarum\Foundation\ValidationException; @@ -27,7 +26,6 @@ use Flarum\Testing\integration\RetrievesAuthorizedUsers; use Flarum\Testing\integration\TestCase; use Flarum\User\User; use Illuminate\Support\Arr; -use Tobyz\JsonApiServer\Laravel\Sort\SortColumn; use Tobyz\JsonApiServer\Schema\Field\Field; class ApiControllerTest extends TestCase