diff --git a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php index faa6743b05..87ec754725 100644 --- a/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php +++ b/app/Api/V2/Request/Autocomplete/AutocompleteRequest.php @@ -49,7 +49,7 @@ class AutocompleteRequest extends FormRequest public function getParameters(): array { $array = [ - 'date' => $this->date('date'), + 'date' => $this->convertDateTime('date'), 'query' => $this->clearString((string) $this->get('query')), 'size' => $this->integerFromValue('size'), 'page' => $this->integerFromValue('page'), diff --git a/app/Api/V2/Request/Chart/ChartRequest.php b/app/Api/V2/Request/Chart/ChartRequest.php index 4445ede506..2951e06f73 100644 --- a/app/Api/V2/Request/Chart/ChartRequest.php +++ b/app/Api/V2/Request/Chart/ChartRequest.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V2\Request\Chart; use FireflyIII\Enums\UserRoleEnum; -use FireflyIII\JsonApi\Rules\IsValidFilter; -use FireflyIII\Rules\IsFilterValueIn; use FireflyIII\Support\Http\Api\ParsesQueryFilters; use FireflyIII\Support\Http\Api\ValidatesUserGroupTrait; use FireflyIII\Support\Request\ChecksLogin; @@ -33,8 +31,6 @@ use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Log; use Illuminate\Validation\Validator; -use LaravelJsonApi\Core\Query\QueryParameters; -use LaravelJsonApi\Validation\Rule as JsonApiRule; /** * Class ChartRequest @@ -50,52 +46,29 @@ class ChartRequest extends FormRequest public function getParameters(): array { - $queryParameters = QueryParameters::cast($this->all()); - + //$queryParameters = QueryParameters::cast($this->all()); return [ - 'start' => $this->dateOrToday($queryParameters, 'start')->startOfDay(), - 'end' => $this->dateOrToday($queryParameters, 'end')->endOfDay(), - 'preselected' => $this->stringFromQueryParams($queryParameters, 'preselected', 'empty'), - 'period' => $this->stringFromFilterParams($queryParameters, 'period', '1M'), - 'accounts' => $this->arrayOfStrings($queryParameters, 'accounts'), - // preselected heeft maar een paar toegestane waardes, dat moet ook goed gaan. - // 'query' => $this->arrayOfStrings($queryParameters, 'query'), - // 'size' => $this->integerFromQueryParams($queryParameters,'size', 50), - // 'account_types' => $this->getAccountTypeParameter($this->arrayOfStrings($queryParameters, 'account_types')), + 'start' => $this->convertDateTime('start')?->startOfDay(), + 'end' => $this->convertDateTime('end')?->endOfDay(), + 'preselected' => $this->convertString('preselected', 'empty'), + 'period' => $this->convertString('period', '1M'), + 'accounts' => $this->arrayFromValue($this->get('accounts')), ]; - // collect accounts based on this list? } - // return [ - // 'accounts' => $this->getAccountList(), - // 'preselected' => $this->convertString('preselected'), - // ]; - // } - /** * The rules that the incoming request must be matched against. */ public function rules(): array { return [ - 'fields' => JsonApiRule::notSupported(), - 'filter' => ['nullable', 'array', - new IsValidFilter(['start', 'end', 'preselected', 'accounts', 'period']), - new IsFilterValueIn('preselected', config('firefly.preselected_accounts')), - ], - 'include' => JsonApiRule::notSupported(), - 'page' => JsonApiRule::notSupported(), - 'sort' => JsonApiRule::notSupported(), - // 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - // 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', + 'start' => 'required|date|after:1900-01-01|before:2099-12-31|before_or_equal:end', + 'end' => 'required|date|after:1900-01-01|before:2099-12-31|after_or_equal:start', + 'preselected' => sprintf('nullable|in:%s', implode(',', config('firefly.preselected_accounts'))), + 'period' => sprintf('nullable|in:%s', implode(',', config('firefly.valid_view_ranges'))), + 'accounts.*' => 'exists:accounts,id', ]; - // return [ - // 'start' => 'required|date|after:1900-01-01|before:2099-12-31', - // 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', - // 'preselected' => sprintf('in:%s', implode(',', config('firefly.preselected_accounts'))), - // 'accounts.*' => 'exists:accounts,id', - // ]; } public function withValidator(Validator $validator): void diff --git a/app/Support/Http/Api/CollectsAccountsFromFilter.php b/app/Support/Http/Api/CollectsAccountsFromFilter.php index 31d45eacd9..1e93ed255a 100644 --- a/app/Support/Http/Api/CollectsAccountsFromFilter.php +++ b/app/Support/Http/Api/CollectsAccountsFromFilter.php @@ -36,10 +36,12 @@ trait CollectsAccountsFromFilter $collection = new Collection(); // always collect from the query parameter, even when it's empty. - foreach ($queryParameters['accounts'] as $accountId) { - $account = $this->repository->find((int) $accountId); - if (null !== $account) { - $collection->push($account); + if (null !== $queryParameters['accounts']) { + foreach ($queryParameters['accounts'] as $accountId) { + $account = $this->repository->find((int) $accountId); + if (null !== $account) { + $collection->push($account); + } } } diff --git a/app/Support/Request/ConvertsDataTypes.php b/app/Support/Request/ConvertsDataTypes.php index a04d3fc02a..88c88bcdc4 100644 --- a/app/Support/Request/ConvertsDataTypes.php +++ b/app/Support/Request/ConvertsDataTypes.php @@ -105,11 +105,11 @@ trait ConvertsDataTypes /** * Return string value. */ - public function convertString(string $field): string + public function convertString(string $field, string $default = ''): string { $entry = $this->get($field); if (!is_scalar($entry)) { - return ''; + return $default; } return (string)$this->clearString((string)$entry); diff --git a/routes/api.php b/routes/api.php index c4403f67c3..6199e682b0 100644 --- a/routes/api.php +++ b/routes/api.php @@ -47,9 +47,9 @@ Route::group( ], static function (): void { Route::get('accounts', ['uses' => 'AccountController@accounts', 'as' => 'accounts']); - Route::get('categories', ['uses' => 'CategoryController@categories', 'as' => 'categories']); - Route::get('tags', ['uses' => 'TagController@tags', 'as' => 'tags']); - Route::get('transaction-descriptions', ['uses' => 'TransactionController@transactionDescriptions', 'as' => 'transaction-descriptions']); + //Route::get('categories', ['uses' => 'CategoryController@categories', 'as' => 'categories']); + //Route::get('tags', ['uses' => 'TagController@tags', 'as' => 'tags']); + //Route::get('transaction-descriptions', ['uses' => 'TransactionController@transactionDescriptions', 'as' => 'transaction-descriptions']); } ); @@ -58,12 +58,12 @@ Route::group( [ 'namespace' => 'FireflyIII\Api\V2\Controllers\Chart', 'prefix' => 'v2/chart', - 'as' => 'api.v1.chart.', + 'as' => 'api.v2.chart.', ], static function (): void { - Route::get('account/dashboard', ['uses' => 'AccountController@dashboard', 'as' => 'account.dashboard']); - Route::get('budget/dashboard', ['uses' => 'BudgetController@dashboard', 'as' => 'budget.dashboard']); - Route::get('category/dashboard', ['uses' => 'CategoryController@dashboard', 'as' => 'category.dashboard']); + //Route::get('account/dashboard', ['uses' => 'AccountController@dashboard', 'as' => 'account.dashboard']); + //Route::get('budget/dashboard', ['uses' => 'BudgetController@dashboard', 'as' => 'budget.dashboard']); + //Route::get('category/dashboard', ['uses' => 'CategoryController@dashboard', 'as' => 'category.dashboard']); Route::get('balance/balance', ['uses' => 'BalanceController@balance', 'as' => 'balance.balance']); } ); @@ -77,7 +77,7 @@ Route::group( 'as' => 'api.v2.summary.', ], static function (): void { - Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']); + //Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']); } ); // V2 API route for all kinds of Transaction lists. @@ -91,11 +91,11 @@ Route::group( ], static function (): void { // basic list - Route::get('transactions', ['uses' => 'TransactionController@list', 'as' => 'transactions.list']); + //Route::get('transactions', ['uses' => 'TransactionController@list', 'as' => 'transactions.list']); // list by parent or related object. // note how the check is done on the user group, not the user itself. - Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']); + //Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']); } ); @@ -109,7 +109,7 @@ Route::group( 'as' => 'api.v2.net-worth.', ], static function (): void { - Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']); + //Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']); } ); @@ -135,10 +135,10 @@ Route::group( 'as' => 'api.v2.subscriptions.', ], static function (): void { - Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); - Route::get('{userGroupBill}', ['uses' => 'ShowController@show', 'as' => 'show']); - Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']); - Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']); +// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); +// Route::get('{userGroupBill}', ['uses' => 'ShowController@show', 'as' => 'show']); +// Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']); +// Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']); } ); @@ -150,7 +150,7 @@ Route::group( 'as' => 'api.v2.piggy-banks.', ], static function (): void { - Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); +// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); } ); @@ -162,7 +162,7 @@ Route::group( 'as' => 'api.v2.currencies.', ], static function (): void { - Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); +// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); } ); @@ -174,9 +174,9 @@ Route::group( 'as' => 'api.v2.transactions.', ], static function (): void { - Route::post('', ['uses' => 'StoreController@post', 'as' => 'store']); - Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']); - Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']); +// Route::post('', ['uses' => 'StoreController@post', 'as' => 'store']); +// Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']); +// Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']); } ); // infinite (transactions) list: @@ -187,7 +187,7 @@ Route::group( 'as' => 'api.v2.infinite.transactions.', ], static function (): void { - Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']); +// Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']); } ); @@ -199,11 +199,11 @@ Route::group( 'as' => 'api.v2.budgets', ], static function (): void { - Route::get('', ['uses' => 'Budget\IndexController@index', 'as' => 'index']); - Route::get('{budget}', ['uses' => 'Budget\ShowController@show', 'as' => 'show']); - Route::get('{budget}/limits', ['uses' => 'BudgetLimit\IndexController@index', 'as' => 'budget-limits.index']); - Route::get('sum/budgeted', ['uses' => 'Budget\SumController@budgeted', 'as' => 'sum.budgeted']); - Route::get('sum/spent', ['uses' => 'Budget\SumController@spent', 'as' => 'sum.spent']); +// Route::get('', ['uses' => 'Budget\IndexController@index', 'as' => 'index']); +// Route::get('{budget}', ['uses' => 'Budget\ShowController@show', 'as' => 'show']); +// Route::get('{budget}/limits', ['uses' => 'BudgetLimit\IndexController@index', 'as' => 'budget-limits.index']); +// Route::get('sum/budgeted', ['uses' => 'Budget\SumController@budgeted', 'as' => 'sum.budgeted']); +// Route::get('sum/spent', ['uses' => 'Budget\SumController@spent', 'as' => 'sum.spent']); // Route::get('{budget}/budgeted', ['uses' => 'Budget\ShowController@budgeted', 'as' => 'budget.budgeted']); // Route::get('{budget}/spent', ['uses' => 'Budget\ShowController@spent', 'as' => 'budget.spent']); } @@ -217,7 +217,7 @@ Route::group( 'as' => 'api.v2.system.', ], static function (): void { - Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']); +// Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']); } ); @@ -229,32 +229,32 @@ Route::group( 'as' => 'api.v2.user-groups.', ], static function (): void { - Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); - Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']); - Route::get('{userGroup}', ['uses' => 'ShowController@show', 'as' => 'show']); - Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']); - Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']); - Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']); - Route::delete('{userGroup}', ['uses' => 'DestroyController@destroy', 'as' => 'destroy']); +// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']); +// Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']); +// Route::get('{userGroup}', ['uses' => 'ShowController@show', 'as' => 'show']); +// Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']); +// Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']); +// Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']); +// Route::delete('{userGroup}', ['uses' => 'DestroyController@destroy', 'as' => 'destroy']); } ); // V2 JSON API ROUTES -JsonApiRoute::server('v2')->prefix('v2') - ->resources(function (ResourceRegistrar $server): void { - // ACCOUNTS - $server->resource('accounts', AccountController::class) - ->relationships(function (Relationships $relations): void { - $relations->hasOne('user')->readOnly(); - }) - ; - - // USERS - $server->resource('users', JsonApiController::class)->readOnly()->relationships(function (Relationships $relations): void { - $relations->hasMany('accounts')->readOnly(); - }); - }) -; +//JsonApiRoute::server('v2')->prefix('v2') +// ->resources(function (ResourceRegistrar $server): void { +// // ACCOUNTS +// $server->resource('accounts', AccountController::class) +// ->relationships(function (Relationships $relations): void { +// $relations->hasOne('user')->readOnly(); +// }) +// ; +// +// // USERS +// $server->resource('users', JsonApiController::class)->readOnly()->relationships(function (Relationships $relations): void { +// $relations->hasMany('accounts')->readOnly(); +// }); +// }) +//; /* * ____ ____ __ .______ ______ __ __ .___________. _______ _______.