Allow account endpoint to be filtered on various fields.

This commit is contained in:
James Cole
2024-08-03 06:00:22 +02:00
parent c8646e20cb
commit b213148ae8
11 changed files with 259 additions and 106 deletions

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts;
use FireflyIII\Models\Account;
use FireflyIII\Rules\Account\IsValidAccountType;
use FireflyIII\Rules\IsAllowedGroupAction;
use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Rules\IsValidDateRange;
@@ -20,6 +21,7 @@ class AccountCollectionQuery extends ResourceQuery
public function rules(): array
{
Log::debug(__METHOD__);
$validFilters = config('api.valid_api_filters')[Account::class];
return [
'fields' => [
@@ -47,7 +49,8 @@ class AccountCollectionQuery extends ResourceQuery
'filter' => [
'nullable',
'array',
JsonApiRule::filter(),
JsonApiRule::filter($validFilters),
new IsValidAccountType()
],
'include' => [
'nullable',

View File

@@ -2,6 +2,8 @@
namespace FireflyIII\JsonApi\V2\Accounts;
use FireflyIII\Rules\BelongsUser;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\Rule;
use LaravelJsonApi\Laravel\Http\Requests\ResourceRequest;
use LaravelJsonApi\Validation\Rule as JsonApiRule;
@@ -16,8 +18,17 @@ class AccountRequest extends ResourceRequest
*/
public function rules(): array
{
Log::debug(__METHOD__);
die('am i used');
return [
// @TODO
'type' => [
new BelongsUser()
],
'name' => [
'nullable',
'string',
'max:255',
],
];
}

View File

@@ -79,11 +79,13 @@ class AccountSchema extends Schema
*/
public function filters(): array
{
// Log::debug(__METHOD__);
return [
Filter::make('id'),
];
Log::debug(__METHOD__);
$array = [];
$config = config('api.valid_api_filters')[Account::class];
foreach ($config as $entry) {
$array[] = Filter::make($entry);
}
return $array;
}
public function repository(): AccountRepository

View File

@@ -23,6 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\JsonApi\V2\Accounts\Capabilities;
use FireflyIII\Models\Account;
use FireflyIII\Support\Http\Api\AccountFilter;
use FireflyIII\Support\JsonApi\CollectsCustomParameters;
use FireflyIII\Support\JsonApi\Concerns\UsergroupAware;
use FireflyIII\Support\JsonApi\Enrichments\AccountEnrichment;
@@ -44,6 +46,7 @@ class AccountQuery extends QueryAll implements HasPagination
use UsergroupAware;
use ValidateSortParameters;
use CollectsCustomParameters;
use AccountFilter;
#[\Override]
/**
@@ -56,6 +59,7 @@ class AccountQuery extends QueryAll implements HasPagination
Log::debug(__METHOD__);
// collect filters
$filters = $this->queryParameters->filter();
// collect sort options
$sort = $this->queryParameters->sortFields();
// collect pagination based on the page
@@ -77,7 +81,7 @@ class AccountQuery extends QueryAll implements HasPagination
// add sort and filter parameters to the query.
$query = $this->addSortParams($query, $sort);
$query = $this->addFilterParams('account', $query, $filters);
$query = $this->addFilterParams(Account::class, $query, $filters);
// collect the result.