Clean up API routes

This commit is contained in:
James Cole 2024-10-20 17:55:06 +02:00
parent 6ff84b8e90
commit acadc89eaa
No known key found for this signature in database
GPG Key ID: B49A324B7EAD6D80
5 changed files with 69 additions and 94 deletions

View File

@ -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'),

View File

@ -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

View File

@ -36,12 +36,14 @@ trait CollectsAccountsFromFilter
$collection = new Collection();
// always collect from the query parameter, even when it's empty.
if (null !== $queryParameters['accounts']) {
foreach ($queryParameters['accounts'] as $accountId) {
$account = $this->repository->find((int) $accountId);
if (null !== $account) {
$collection->push($account);
}
}
}
// if no "preselected", and found accounts
if ('empty' === $queryParameters['preselected'] && $collection->count() > 0) {

View File

@ -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);

View File

@ -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();
// });
// })
//;
/*
* ____ ____ __ .______ ______ __ __ .___________. _______ _______.