Update API endpoints.

This commit is contained in:
James Cole 2021-09-18 05:26:31 +02:00
parent 4fcc659263
commit 190b6fb25f
No known key found for this signature in database
GPG Key ID: BDE6667570EADBD5
20 changed files with 90 additions and 32 deletions

View File

@ -25,12 +25,14 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete;
use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Http\Api\AccountFilter;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use JsonException;
/** /**
* Class AccountController * Class AccountController
@ -62,9 +64,14 @@ class AccountController extends Controller
} }
/** /**
* Documentation for this endpoint:
* https://api-docs.firefly-iii.org/#/autocomplete/getAccountsAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException
* @throws JsonException
*/ */
public function accounts(AutocompleteRequest $request): JsonResponse public function accounts(AutocompleteRequest $request): JsonResponse
{ {

View File

@ -56,6 +56,9 @@ class BillController extends Controller
} }
/** /**
* Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getBillsAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -56,6 +56,9 @@ class BudgetController extends Controller
} }
/** /**
* Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getBudgetsAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -56,6 +56,9 @@ class CategoryController extends Controller
} }
/** /**
* Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getCategoriesAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -56,6 +56,9 @@ class CurrencyController extends Controller
} }
/** /**
* Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getCurrenciesAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
@ -81,8 +84,11 @@ class CurrencyController extends Controller
} }
/** /**
* @param AutocompleteRequest $request * Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getCurrenciesCodeAC
* *
* @param AutocompleteRequest $request
* @deprecated
* @return JsonResponse * @return JsonResponse
*/ */
public function currenciesWithCode(AutocompleteRequest $request): JsonResponse public function currenciesWithCode(AutocompleteRequest $request): JsonResponse

View File

@ -56,6 +56,8 @@ class ObjectGroupController extends Controller
} }
/** /**
* Documentation for this endpoint is at:
* https://api-docs.firefly-iii.org/#/autocomplete/getObjectGroupsAC
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -36,7 +36,7 @@ use Illuminate\Http\JsonResponse;
*/ */
class PiggyBankController extends Controller class PiggyBankController extends Controller
{ {
private AccountRepositoryInterface $accountRepository; private AccountRepositoryInterface $accountRepository;
private PiggyBankRepositoryInterface $piggyRepository; private PiggyBankRepositoryInterface $piggyRepository;
/** /**
@ -60,6 +60,9 @@ class PiggyBankController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getPiggiesAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
@ -80,6 +83,7 @@ class PiggyBankController extends Controller
'currency_id' => $currency->id, 'currency_id' => $currency->id,
'currency_name' => $currency->name, 'currency_name' => $currency->name,
'currency_code' => $currency->code, 'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places, 'currency_decimal_places' => $currency->decimal_places,
]; ];
} }
@ -88,6 +92,9 @@ class PiggyBankController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getPiggiesBalanceAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
@ -112,6 +119,7 @@ class PiggyBankController extends Controller
'currency_id' => $currency->id, 'currency_id' => $currency->id,
'currency_name' => $currency->name, 'currency_name' => $currency->name,
'currency_code' => $currency->code, 'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places, 'currency_decimal_places' => $currency->decimal_places,
]; ];
} }

View File

@ -25,7 +25,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete;
use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest;
use FireflyIII\Models\Rule; use FireflyIII\Models\Recurrence;
use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface; use FireflyIII\Repositories\Recurring\RecurringRepositoryInterface;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
@ -53,22 +53,25 @@ class RecurrenceController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getRecurringAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function recurring(AutocompleteRequest $request): JsonResponse public function recurring(AutocompleteRequest $request): JsonResponse
{ {
$data = $request->getData(); $data = $request->getData();
$rules = $this->repository->searchRecurrence($data['query'], $data['limit']); $recurrences = $this->repository->searchRecurrence($data['query'], $data['limit']);
$response = []; $response = [];
/** @var Rule $rule */ /** @var Recurrence $recurrence */
foreach ($rules as $rule) { foreach ($recurrences as $recurrence) {
$response[] = [ $response[] = [
'id' => (string)$rule->id, 'id' => (string)$recurrence->id,
'name' => $rule->title, 'name' => $recurrence->title,
'description' => $rule->description, 'description' => $recurrence->description,
]; ];
} }

View File

@ -53,6 +53,9 @@ class RuleController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getRulesAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -53,6 +53,9 @@ class RuleGroupController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getRuleGroupsAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -56,6 +56,9 @@ class TagController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getTagAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -61,6 +61,9 @@ class TransactionController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionsAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse
@ -88,6 +91,9 @@ class TransactionController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionsIDAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -52,6 +52,9 @@ class TransactionTypeController extends Controller
} }
/** /**
* This endpoint is documented at
* https://api-docs.firefly-iii.org/#/autocomplete/getTransactionTypesAC
*
* @param AutocompleteRequest $request * @param AutocompleteRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -27,6 +27,7 @@ namespace FireflyIII\Api\V1\Controllers\Chart;
use Carbon\Carbon; use Carbon\Carbon;
use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Api\V1\Requests\Data\DateRequest; use FireflyIII\Api\V1\Requests\Data\DateRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
@ -69,9 +70,13 @@ class AccountController extends Controller
} }
/** /**
* This endpoint is documented at:
* https://api-docs.firefly-iii.org/#/charts/getChartAccountOverview
*
* @param DateRequest $request * @param DateRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException
*/ */
public function overview(DateRequest $request): JsonResponse public function overview(DateRequest $request): JsonResponse
{ {

View File

@ -57,6 +57,8 @@ class AccountController extends Controller
} }
/** /**
* This endpoint is deprecated and not documented.
* @deprecated
* @param MoveTransactionsRequest $request * @param MoveTransactionsRequest $request
* *
* @return JsonResponse * @return JsonResponse

View File

@ -61,6 +61,8 @@ class TransactionController extends Controller
} }
/** /**
* This endpoint is documented at:
*
* @param TransactionRequest $request * @param TransactionRequest $request
* *
* @return JsonResponse * @return JsonResponse
@ -69,12 +71,13 @@ class TransactionController extends Controller
{ {
$query = $request->getAll(); $query = $request->getAll();
$params = $query['query']; $params = $query['query'];
// this deserves better code, but for now a loop of basic if-statements // this deserves better code, but for now a loop of basic if-statements
// to respond to what is in the $query. // to respond to what is in the $query.
// this is OK because only one thing can be in the query at the moment. // this is OK because only one thing can be in the query at the moment.
if ($this->updatesTransactionAccount($params)) { if ($this->updatesTransactionAccount($params)) {
$original = $this->repository->find((int)$params['where']['source_account_id']); $original = $this->repository->find((int)$params['where']['account_id']);
$destination = $this->repository->find((int)$params['update']['destination_account_id']); $destination = $this->repository->find((int)$params['update']['account_id']);
/** @var AccountDestroyService $service */ /** @var AccountDestroyService $service */
$service = app(AccountDestroyService::class); $service = app(AccountDestroyService::class);
@ -91,7 +94,7 @@ class TransactionController extends Controller
*/ */
private function updatesTransactionAccount(array $params): bool private function updatesTransactionAccount(array $params): bool
{ {
return array_key_exists('source_account_id', $params['where']) && array_key_exists('destination_account_id', $params['update']); return array_key_exists('account_id', $params['where']) && array_key_exists('account_id', $params['update']);
} }
} }

View File

@ -63,7 +63,7 @@ class MoveTransactionsRequest extends FormRequest
* Configure the validator instance with special rules for after the basic validation rules. * Configure the validator instance with special rules for after the basic validation rules.
* *
* @param Validator $validator * @param Validator $validator
* See reference nr. 74 * See reference nr. 74
* *
* @return void * @return void
*/ */

View File

@ -26,6 +26,7 @@ namespace FireflyIII\Validation\Api\Data\Bulk;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use JsonException;
/** /**
* *
@ -34,30 +35,32 @@ trait ValidatesBulkTransactionQuery
{ {
/** /**
* @param Validator $validator * @param Validator $validator
*
* @throws JsonException
*/ */
protected function validateTransactionQuery(Validator $validator): void protected function validateTransactionQuery(Validator $validator): void
{ {
$data = $validator->getData(); $data = $validator->getData();
// assumption is all validation has already taken place // assumption is all validation has already taken place
// and the query key exists. // and the query key exists.
$json = json_decode($data['query'], true, 8); $json = json_decode($data['query'], true, 8, JSON_THROW_ON_ERROR);
if (array_key_exists('source_account_id', $json['where']) if (array_key_exists('account_id', $json['where'])
&& array_key_exists('destination_account_id', $json['update']) && array_key_exists('account_id', $json['update'])
) { ) {
// find both accounts // find both accounts
// must be same type. // must be same type.
// already validated: belongs to this user. // already validated: belongs to this user.
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
$source = $repository->find((int)$json['where']['source_account_id']); $source = $repository->find((int)$json['where']['account_id']);
$dest = $repository->find((int)$json['update']['destination_account_id']); $dest = $repository->find((int)$json['update']['account_id']);
if (null === $source) { if (null === $source) {
$validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'where', 'source_account_id')); $validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'where', 'account_id'));
return; return;
} }
if (null === $dest) { if (null === $dest) {
$validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'update', 'destination_account_id')); $validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'update', 'account_id'));
return; return;
} }

View File

@ -110,8 +110,8 @@ export default {
let query = let query =
{ {
where: {source_account_id: this.accountId}, where: {account_id: this.accountId},
update: {destination_account_id: this.moveToAccount} update: {account_id: this.moveToAccount}
}; };
axios.post('./api/v1/data/bulk/transactions', {query: JSON.stringify(query)}).then(response => { axios.post('./api/v1/data/bulk/transactions', {query: JSON.stringify(query)}).then(response => {

View File

@ -98,14 +98,6 @@ Route::group(
Route::post('transactions', ['uses' => 'TransactionController@update', 'as' => 'transactions']); Route::post('transactions', ['uses' => 'TransactionController@update', 'as' => 'transactions']);
} }
); );
//Route::group(
// ['namespace' => 'FireflyIII\Api\V1\Controllers\Data\Bulk', 'prefix' => 'data/bulk',
// 'as' => 'api.v1.data.bulk.',],
// static function () {
// Route::post('transactions', ['uses' => 'AccountController@moveTransactions', 'as' => 'accounts.move-transactions']);
// }
//);
/** /**
* INSIGHTS ROUTES * INSIGHTS ROUTES