From d749d550ee6d1f089c46855afa0ea8a79fb77e10 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 2 Nov 2019 08:19:50 +0100 Subject: [PATCH] Error codes in Firefly III API --- .../CurrencyExchangeRateController.php | 4 ++-- app/Api/V1/Controllers/LinkTypeController.php | 8 ++++---- app/Api/V1/Controllers/PiggyBankController.php | 16 ++++++---------- app/Api/V1/Controllers/RecurrenceController.php | 2 +- app/Api/V1/Controllers/RuleGroupController.php | 2 +- .../V1/Controllers/TransactionLinkController.php | 4 ++-- app/Api/V1/Controllers/UserController.php | 2 +- .../PiggyBank/PiggyBankRepository.php | 12 ++++++++++-- .../PiggyBank/PiggyBankRepositoryInterface.php | 6 ++++-- 9 files changed, 31 insertions(+), 25 deletions(-) diff --git a/app/Api/V1/Controllers/CurrencyExchangeRateController.php b/app/Api/V1/Controllers/CurrencyExchangeRateController.php index 330f93f741..e32567ab1f 100644 --- a/app/Api/V1/Controllers/CurrencyExchangeRateController.php +++ b/app/Api/V1/Controllers/CurrencyExchangeRateController.php @@ -79,10 +79,10 @@ class CurrencyExchangeRateController extends Controller $toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD'); if (null === $fromCurrency) { - throw new FireflyException(trans('api.error_unknown_source_currency')); + throw new FireflyException('200007: Unknown source currency'); } if (null === $toCurrency) { - throw new FireflyException(trans('api.error_unknown_destination_currency')); + throw new FireflyException('200007: Unknown destination currency'); } /** @var Carbon $dateObj */ diff --git a/app/Api/V1/Controllers/LinkTypeController.php b/app/Api/V1/Controllers/LinkTypeController.php index 01969a9425..14652b45f8 100644 --- a/app/Api/V1/Controllers/LinkTypeController.php +++ b/app/Api/V1/Controllers/LinkTypeController.php @@ -86,7 +86,7 @@ class LinkTypeController extends Controller public function delete(LinkType $linkType): JsonResponse { if (false === $linkType->editable) { - throw new FireflyException(trans('api.error_delete_link_type', [':id' => $linkType->id, ':name' => $linkType->name])); + throw new FireflyException('200020: Link type cannot be changed.'); } $this->repository->destroy($linkType); @@ -160,7 +160,7 @@ class LinkTypeController extends Controller $admin = auth()->user(); if (!$this->userRepository->hasRole($admin, 'owner')) { - throw new FireflyException(trans('api.error_owner_role_needed')); + throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore } $data = $request->getAll(); // if currency ID is 0, find the currency by the code: @@ -247,14 +247,14 @@ class LinkTypeController extends Controller public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse { if (false === $linkType->editable) { - throw new FireflyException(trans('api.error_edit_link_type', [':id' => $linkType->id, ':name' => $linkType->name])); + throw new FireflyException('200020: Link type cannot be changed.'); } /** @var User $admin */ $admin = auth()->user(); if (!$this->userRepository->hasRole($admin, 'owner')) { - throw new FireflyException(trans('api.error_owner_role_needed')); + throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore } $data = $request->getAll(); diff --git a/app/Api/V1/Controllers/PiggyBankController.php b/app/Api/V1/Controllers/PiggyBankController.php index db768a9b7d..9d1fdc9c3f 100644 --- a/app/Api/V1/Controllers/PiggyBankController.php +++ b/app/Api/V1/Controllers/PiggyBankController.php @@ -181,19 +181,15 @@ class PiggyBankController extends Controller public function store(PiggyBankRequest $request): JsonResponse { $piggyBank = $this->repository->store($request->getAll()); - if (null !== $piggyBank) { - $manager = $this->getManager(); + $manager = $this->getManager(); - /** @var PiggyBankTransformer $transformer */ - $transformer = app(PiggyBankTransformer::class); - $transformer->setParameters($this->parameters); + /** @var PiggyBankTransformer $transformer */ + $transformer = app(PiggyBankTransformer::class); + $transformer->setParameters($this->parameters); - $resource = new Item($piggyBank, $transformer, 'piggy_banks'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); - } - throw new FireflyException(trans('api.error_store_new_piggybank')); + $resource = new Item($piggyBank, $transformer, 'piggy_banks'); + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); } /** diff --git a/app/Api/V1/Controllers/RecurrenceController.php b/app/Api/V1/Controllers/RecurrenceController.php index e9ec4302af..1fc7674ced 100644 --- a/app/Api/V1/Controllers/RecurrenceController.php +++ b/app/Api/V1/Controllers/RecurrenceController.php @@ -236,7 +236,7 @@ class RecurrenceController extends Controller $result = $recurring->fire(); } catch (FireflyException $e) { Log::error($e->getMessage()); - throw new FireflyException(trans('api.error_fire_cronjob')); + throw new FireflyException('200022: Error in cron job.'); } if (false === $result) { return response()->json([], 204); diff --git a/app/Api/V1/Controllers/RuleGroupController.php b/app/Api/V1/Controllers/RuleGroupController.php index 280d75f494..d3f2f2a839 100644 --- a/app/Api/V1/Controllers/RuleGroupController.php +++ b/app/Api/V1/Controllers/RuleGroupController.php @@ -257,7 +257,7 @@ class RuleGroupController extends Controller /** @var Collection $rules */ $rules = $this->ruleGroupRepository->getActiveRules($group); if (0 === $rules->count()) { - throw new FireflyException(trans('api.error_no_rules_in_rule_group')); + throw new FireflyException('200023: No rules in this rule group.'); } $parameters = $request->getTestParameters(); $matchingTransactions = []; diff --git a/app/Api/V1/Controllers/TransactionLinkController.php b/app/Api/V1/Controllers/TransactionLinkController.php index ca369509d5..ece992e2de 100644 --- a/app/Api/V1/Controllers/TransactionLinkController.php +++ b/app/Api/V1/Controllers/TransactionLinkController.php @@ -165,7 +165,7 @@ class TransactionLinkController extends Controller $inward = $this->journalRepository->findNull($data['inward_id'] ?? 0); $outward = $this->journalRepository->findNull($data['outward_id'] ?? 0); if (null === $inward || null === $outward) { - throw new FireflyException(trans('api.error_source_or_dest_null')); + throw new FireflyException('200024: Source or destination does not exist.'); } $data['direction'] = 'inward'; @@ -196,7 +196,7 @@ class TransactionLinkController extends Controller $data['inward'] = $this->journalRepository->findNull($data['inward_id'] ?? 0); $data['outward'] = $this->journalRepository->findNull($data['outward_id'] ?? 0); if (null === $data['inward'] || null === $data['outward']) { - throw new FireflyException(trans('api.error_source_or_dest_null')); + throw new FireflyException('200024: Source or destination does not exist.'); } $data['direction'] = 'inward'; $journalLink = $this->repository->updateLink($journalLink, $data); diff --git a/app/Api/V1/Controllers/UserController.php b/app/Api/V1/Controllers/UserController.php index da060a25cb..428cd01a81 100644 --- a/app/Api/V1/Controllers/UserController.php +++ b/app/Api/V1/Controllers/UserController.php @@ -83,7 +83,7 @@ class UserController extends Controller return response()->json([], 204); } - throw new FireflyException(trans('api.error_no_access')); // @codeCoverageIgnore + throw new FireflyException('200025: No access to function.'); // @codeCoverageIgnore } /** diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index fb6227d609..9de2885d5a 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -24,6 +24,7 @@ namespace FireflyIII\Repositories\PiggyBank; use Carbon\Carbon; use Exception; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Note; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankEvent; @@ -33,6 +34,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\User; +use Illuminate\Database\QueryException; use Illuminate\Support\Collection; use Log; @@ -556,13 +558,19 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface /** * @param array $data * - * @return PiggyBank|null + * @return PiggyBank + * @throws FireflyException */ - public function store(array $data): ?PiggyBank + public function store(array $data): PiggyBank { $data['order'] = $this->getMaxOrder() + 1; + try { /** @var PiggyBank $piggyBank */ $piggyBank = PiggyBank::create($data); + } catch(QueryException $e) { + Log::error(sprintf('Could not store piggy bank: %s',$e->getMessage())); + throw new FireflyException('400005: Could not store new piggy bank.'); + } $this->updateNote($piggyBank, $data['notes']); diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index fd82dc2c29..a0258e03a0 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\PiggyBank; use Carbon\Carbon; +use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\PiggyBankRepetition; @@ -245,9 +246,10 @@ interface PiggyBankRepositoryInterface * * @param array $data * - * @return PiggyBank|null + * @return PiggyBank + * @throws FireflyException */ - public function store(array $data): ?PiggyBank; + public function store(array $data): PiggyBank; /** * Update existing piggy bank.