Refactor request classes.

This commit is contained in:
James Cole
2020-11-08 13:31:54 +01:00
parent 6560510dd8
commit e16bbf1072
16 changed files with 377 additions and 212 deletions

View File

@@ -24,7 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\BudgetLimitRequest; use FireflyIII\Api\V1\Requests\BudgetLimitStoreRequest;
use FireflyIII\Api\V1\Requests\BudgetLimitUpdateRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\BudgetLimit;
@@ -156,13 +157,13 @@ class BudgetLimitController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
* *
* @param BudgetLimitRequest $request * @param BudgetLimitStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
* *
*/ */
public function store(BudgetLimitRequest $request): JsonResponse public function store(BudgetLimitStoreRequest $request): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$data['start_date'] = $data['start']; $data['start_date'] = $data['start'];
@@ -237,12 +238,12 @@ class BudgetLimitController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param BudgetLimitRequest $request * @param BudgetLimitUpdateRequest $request
* @param BudgetLimit $budgetLimit * @param BudgetLimit $budgetLimit
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(BudgetLimitRequest $request, BudgetLimit $budgetLimit): JsonResponse public function update(BudgetLimitUpdateRequest $request, BudgetLimit $budgetLimit): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$budgetLimit = $this->blRepository->update($budgetLimit, $data); $budgetLimit = $this->blRepository->update($budgetLimit, $data);

View File

@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\CurrencyRequest; use FireflyIII\Api\V1\Requests\CurrencyUpdateRequest;
use FireflyIII\Api\V1\Requests\CurrencyStoreRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
@@ -580,12 +581,12 @@ class CurrencyController extends Controller
/** /**
* Store new currency. * Store new currency.
* *
* @param CurrencyRequest $request * @param CurrencyStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
*/ */
public function store(CurrencyRequest $request): JsonResponse public function store(CurrencyStoreRequest $request): JsonResponse
{ {
$currency = $this->repository->store($request->getAll()); $currency = $this->repository->store($request->getAll());
if (true === $request->boolean('default')) { if (true === $request->boolean('default')) {
@@ -664,12 +665,12 @@ class CurrencyController extends Controller
/** /**
* Update a currency. * Update a currency.
* *
* @param CurrencyRequest $request * @param CurrencyUpdateRequest $request
* @param TransactionCurrency $currency * @param TransactionCurrency $currency
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(CurrencyRequest $request, TransactionCurrency $currency): JsonResponse public function update(CurrencyUpdateRequest $request, TransactionCurrency $currency): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$currency = $this->repository->update($currency, $data); $currency = $this->repository->update($currency, $data);

View File

@@ -23,7 +23,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\LinkTypeRequest; use FireflyIII\Api\V1\Requests\LinkTypeStoreRequest;
use FireflyIII\Api\V1\Requests\LinkTypeUpdateRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\LinkType; use FireflyIII\Models\LinkType;
@@ -150,12 +151,12 @@ class LinkTypeController extends Controller
/** /**
* Store new object. * Store new object.
* *
* @param LinkTypeRequest $request * @param LinkTypeStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
*/ */
public function store(LinkTypeRequest $request): JsonResponse public function store(LinkTypeStoreRequest $request): JsonResponse
{ {
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
@@ -239,13 +240,13 @@ class LinkTypeController extends Controller
/** /**
* Update object. * Update object.
* *
* @param LinkTypeRequest $request * @param LinkTypeUpdateRequest $request
* @param LinkType $linkType * @param LinkType $linkType
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException
*/ */
public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse public function update(LinkTypeUpdateRequest $request, LinkType $linkType): JsonResponse
{ {
if (false === $linkType->editable) { if (false === $linkType->editable) {
throw new FireflyException('200020: Link type cannot be changed.'); throw new FireflyException('200020: Link type cannot be changed.');

View File

@@ -23,7 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\PiggyBankRequest; use FireflyIII\Api\V1\Requests\PiggyBankUpdateRequest;
use FireflyIII\Api\V1\Requests\PiggyBankStoreRequest; use FireflyIII\Api\V1\Requests\PiggyBankStoreRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBank;
@@ -224,12 +224,12 @@ class PiggyBankController extends Controller
/** /**
* Update piggy bank. * Update piggy bank.
* *
* @param PiggyBankRequest $request * @param PiggyBankUpdateRequest $request
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(PiggyBankRequest $request, PiggyBank $piggyBank): JsonResponse public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$piggyBank = $this->repository->update($piggyBank, $data); $piggyBank = $this->repository->update($piggyBank, $data);

View File

@@ -24,7 +24,8 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use Exception; use Exception;
use FireflyIII\Api\V1\Requests\RuleGroupRequest; use FireflyIII\Api\V1\Requests\RuleGroupUpdateRequest;
use FireflyIII\Api\V1\Requests\RuleGroupStoreRequest;
use FireflyIII\Api\V1\Requests\RuleGroupTestRequest; use FireflyIII\Api\V1\Requests\RuleGroupTestRequest;
use FireflyIII\Api\V1\Requests\RuleGroupTriggerRequest; use FireflyIII\Api\V1\Requests\RuleGroupTriggerRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
@@ -221,11 +222,11 @@ class RuleGroupController extends Controller
/** /**
* Store new object. * Store new object.
* *
* @param RuleGroupRequest $request * @param RuleGroupStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function store(RuleGroupRequest $request): JsonResponse public function store(RuleGroupStoreRequest $request): JsonResponse
{ {
$ruleGroup = $this->ruleGroupRepository->store($request->getAll()); $ruleGroup = $this->ruleGroupRepository->store($request->getAll());
$manager = $this->getManager(); $manager = $this->getManager();
@@ -341,12 +342,12 @@ class RuleGroupController extends Controller
/** /**
* Update a rule group. * Update a rule group.
* *
* @param RuleGroupRequest $request * @param RuleGroupUpdateRequest $request
* @param RuleGroup $ruleGroup * @param RuleGroup $ruleGroup
* *
* @return JsonResponse * @return JsonResponse
*/ */
public function update(RuleGroupRequest $request, RuleGroup $ruleGroup): JsonResponse public function update(RuleGroupUpdateRequest $request, RuleGroup $ruleGroup): JsonResponse
{ {
$ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll()); $ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll());
$manager = $this->getManager(); $manager = $this->getManager();

View File

@@ -36,6 +36,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Rules\IsDuplicateTransaction;
use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Support\Http\Api\TransactionFilter;
use FireflyIII\Transformers\AttachmentTransformer; use FireflyIII\Transformers\AttachmentTransformer;
use FireflyIII\Transformers\PiggyBankEventTransformer; use FireflyIII\Transformers\PiggyBankEventTransformer;
@@ -45,11 +46,13 @@ use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use Illuminate\Validation\ValidationException;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use Log; use Log;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Validator;
/** /**
* Class TransactionController * Class TransactionController
@@ -289,7 +292,7 @@ class TransactionController extends Controller
* @param TransactionStoreRequest $request * @param TransactionStoreRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException * @throws FireflyException|ValidationException
*/ */
public function store(TransactionStoreRequest $request): JsonResponse public function store(TransactionStoreRequest $request): JsonResponse
{ {
@@ -304,29 +307,16 @@ class TransactionController extends Controller
$transactionGroup = $this->groupRepository->store($data); $transactionGroup = $this->groupRepository->store($data);
} catch (DuplicateTransactionException $e) { } catch (DuplicateTransactionException $e) {
Log::warning('Caught a duplicate transaction. Return error message.'); Log::warning('Caught a duplicate transaction. Return error message.');
// return bad validation message. $validator = Validator::make(
// TODO use Laravel's internal validation thing to do this. ['transactions' => [['description' => $e->getMessage()]]], ['transactions.0.description' => new IsDuplicateTransaction]
$response = [ );
'message' => 'The given data was invalid.', throw new ValidationException($validator);
'errors' => [
'transactions.0.description' => [$e->getMessage()],
],
];
return response()->json($response, 422);
} catch (FireflyException $e) { } catch (FireflyException $e) {
Log::warning('Caught an exception. Return error message.'); Log::warning('Caught an exception. Return error message.');
Log::error($e->getMessage()); Log::error($e->getMessage());
// return bad validation message. $message = sprintf('Internal exception: %s', $e->getMessage());
// TODO use Laravel's internal validation thing to do this. $validator = Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction]);
$response = [ throw new ValidationException($validator);
'message' => 'The given data was invalid.',
'errors' => [
'transactions.0.description' => [sprintf('Internal exception: %s', $e->getMessage())],
],
];
return response()->json($response, 422);
} }
app('preferences')->mark(); app('preferences')->mark();
event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true)); event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true));

View File

@@ -0,0 +1,73 @@
<?php
/**
* BudgetLimitStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class BudgetLimitStoreRequest
*
* @codeCoverageIgnore
*/
class BudgetLimitStoreRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
return [
'budget_id' => $this->integer('budget_id'),
'start' => $this->date('start'),
'end' => $this->date('end'),
'amount' => $this->string('amount'),
'currency_id' => $this->integer('currency_id'),
'currency_code' => $this->string('currency_code'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
return [
'budget_id' => 'required|exists:budgets,id|belongsToUser:budgets,id',
'start' => 'required|before:end|date',
'end' => 'required|after:start|date',
'amount' => 'required|gt:0',
'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
];
}
}

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* BudgetLimitRequest.php * BudgetLimitUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org * Copyright (c) 2019 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
@@ -23,29 +23,18 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
/** /**
* Class BudgetLimitRequest * Class BudgetLimitUpdateRequest
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/ */
class BudgetLimitRequest extends FormRequest class BudgetLimitUpdateRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.
@@ -85,21 +74,12 @@ class BudgetLimitRequest extends FormRequest
'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:3|exists:transaction_currencies,code', 'currency_code' => 'min:3|max:3|exists:transaction_currencies,code',
]; ];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
$rules['budget_id'] = 'required|exists:budgets,id|belongsToUser:budgets,id';
break;
}
// if request has a budget already, drop the rule. // if request has a budget already, drop the rule.
$budget = $this->route()->parameter('budget'); $budget = $this->route()->parameter('budget');
if (null !== $budget) { if (null !== $budget) {
unset($rules['budget_id']); unset($rules['budget_id']);
} }
return $rules; return $rules;
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* CurrencyRequest.php * CurrencyStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org * Copyright (c) 2019 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
@@ -24,30 +24,19 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
/** /**
* Class CurrencyRequest * Class CurrencyStoreRequest
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/ */
class CurrencyRequest extends FormRequest class CurrencyStoreRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.
@@ -82,7 +71,7 @@ class CurrencyRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$rules = [ return [
'name' => 'required|between:1,255|unique:transaction_currencies,name', 'name' => 'required|between:1,255|unique:transaction_currencies,name',
'code' => 'required|between:3,3|unique:transaction_currencies,code', 'code' => 'required|between:3,3|unique:transaction_currencies,code',
'symbol' => 'required|between:1,8|unique:transaction_currencies,symbol', 'symbol' => 'required|between:1,8|unique:transaction_currencies,symbol',
@@ -91,20 +80,5 @@ class CurrencyRequest extends FormRequest
'default' => [new IsBoolean()], 'default' => [new IsBoolean()],
]; ];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
$currency = $this->route()->parameter('currency_code');
$rules['name'] = 'required|between:1,255|unique:transaction_currencies,name,' . $currency->id;
$rules['code'] = 'required|between:3,3|unique:transaction_currencies,code,' . $currency->id;
$rules['symbol'] = 'required|between:1,8|unique:transaction_currencies,symbol,' . $currency->id;
break;
}
return $rules;
} }
} }

View File

@@ -0,0 +1,84 @@
<?php
/**
* CurrencyUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* Class CurrencyUpdateRequest
*
* @codeCoverageIgnore
*/
class CurrencyUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$enabled = true;
$default = false;
if (null !== $this->get('enabled')) {
$enabled = $this->boolean('enabled');
}
if (null !== $this->get('default')) {
$default = $this->boolean('default');
}
return [
'name' => $this->string('name'),
'code' => $this->string('code'),
'symbol' => $this->string('symbol'),
'decimal_places' => $this->integer('decimal_places'),
'default' => $default,
'enabled' => $enabled,
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$currency = $this->route()->parameter('currency_code');
return [
'name' => sprintf('required|between:1,255|unique:transaction_currencies,name,%d', $currency->id),
'code' => sprintf('required|between:3,3|unique:transaction_currencies,code,%d', $currency->id),
'symbol' => sprintf('required|between:1,8|unique:transaction_currencies,symbol,%d', $currency->id),
'decimal_places' => 'between:0,20|numeric|min:0|max:20',
'enabled' => [new IsBoolean()],
'default' => [new IsBoolean()],
];
}
}

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* LinkTypeRequest.php * LinkTypeStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org * Copyright (c) 2019 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
@@ -24,30 +24,19 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\LinkType; use FireflyIII\Models\LinkType;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
/** /**
* Class LinkTypeRequest * Class LinkTypeStoreRequest
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/ */
class LinkTypeRequest extends FormRequest class LinkTypeStoreRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.
@@ -72,26 +61,10 @@ class LinkTypeRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$rules = [ return [
'name' => 'required|unique:link_types,name|min:1', 'name' => 'required|unique:link_types,name|min:1',
'outward' => 'required|unique:link_types,outward|min:1|different:inward', 'outward' => 'required|unique:link_types,outward|min:1|different:inward',
'inward' => 'required|unique:link_types,inward|min:1|different:outward', 'inward' => 'required|unique:link_types,inward|min:1|different:outward',
]; ];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var LinkType $linkType */
$linkType = $this->route()->parameter('linkType');
$rules['name'] = ['required', Rule::unique('link_types', 'name')->ignore($linkType->id), 'min:1'];
$rules['outward'] = ['required', 'different:inward', Rule::unique('link_types', 'outward')->ignore($linkType->id), 'min:1'];
$rules['inward'] = ['required', 'different:outward', Rule::unique('link_types', 'inward')->ignore($linkType->id), 'min:1'];
break;
}
return $rules;
} }
} }

View File

@@ -0,0 +1,71 @@
<?php
/**
* LinkTypeUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\LinkType;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
/**
* Class LinkTypeUpdateRequest
*
* @codeCoverageIgnore
*/
class LinkTypeUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
return [
'name' => $this->string('name'),
'outward' => $this->string('outward'),
'inward' => $this->string('inward'),
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$linkType = $this->route()->parameter('linkType');
return [
'name' => ['required', Rule::unique('link_types', 'name')->ignore($linkType->id), 'min:1'],
'outward' => ['required', 'different:inward', Rule::unique('link_types', 'outward')->ignore($linkType->id), 'min:1'],
'inward' => ['required', 'different:outward', Rule::unique('link_types', 'inward')->ignore($linkType->id), 'min:1'],
];
}
}

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
@@ -33,18 +34,7 @@ use Illuminate\Foundation\Http\FormRequest;
*/ */
class PiggyBankStoreRequest extends FormRequest class PiggyBankStoreRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* PiggyBankRequest.php * PiggyBankUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org * Copyright (c) 2019 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
@@ -26,29 +26,18 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBank;
use FireflyIII\Rules\IsAssetAccountId; use FireflyIII\Rules\IsAssetAccountId;
use FireflyIII\Rules\LessThanPiggyTarget; use FireflyIII\Rules\LessThanPiggyTarget;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
/** /**
* Class PiggyBankRequest * Class PiggyBankUpdateRequest
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* TODO AFTER 4.8,0: split this into two request classes.
*/ */
class PiggyBankRequest extends FormRequest class PiggyBankUpdateRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.
@@ -76,30 +65,16 @@ class PiggyBankRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$rules = [ $piggyBank = $this->route()->parameter('piggyBank');
'name' => 'required|between:1,255|uniquePiggyBankForUser', return [
'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], 'name' => 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id,
'current_amount' => ['numeric', 'gte:0', new LessThanPiggyTarget],
'target_amount' => 'numeric|gt:0',
'start_date' => 'date|nullable', 'start_date' => 'date|nullable',
'target_date' => 'date|nullable|after:start_date', 'target_date' => 'date|nullable|after:start_date',
'notes' => 'max:65000', 'notes' => 'max:65000',
'account_id' => ['belongsToUser:accounts', new IsAssetAccountId],
]; ];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var PiggyBank $piggyBank */
$piggyBank = $this->route()->parameter('piggyBank');
$rules['name'] = 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id;
$rules['account_id'] = ['belongsToUser:accounts', new IsAssetAccountId];
$rules['target_amount'] = 'numeric|gt:0';
$rules['current_amount'] = ['numeric', 'gte:0', new LessThanPiggyTarget];
break;
}
return $rules;
} }
} }

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* RuleGroupRequest.php * RuleGroupStoreRequest.php
* Copyright (c) 2019 james@firefly-iii.org * Copyright (c) 2019 james@firefly-iii.org
* *
* This file is part of Firefly III (https://github.com/firefly-iii). * This file is part of Firefly III (https://github.com/firefly-iii).
@@ -25,29 +25,18 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\RuleGroup; use FireflyIII\Models\RuleGroup;
use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
/** /**
* @codeCoverageIgnore * @codeCoverageIgnore
* Class RuleGroupRequest * Class RuleGroupStoreRequest
* TODO AFTER 4.8,0: split this into two request classes.
*/ */
class RuleGroupRequest extends FormRequest class RuleGroupStoreRequest extends FormRequest
{ {
use ConvertsDataTypes; use ConvertsDataTypes, ChecksLogin;
/**
* Authorize logged in users.
*
* @return bool
*/
public function authorize(): bool
{
// Only allow authenticated users
return auth()->check();
}
/** /**
* Get all data from the request. * Get all data from the request.
@@ -76,22 +65,10 @@ class RuleGroupRequest extends FormRequest
*/ */
public function rules(): array public function rules(): array
{ {
$rules = [ return [
'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title', 'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title',
'description' => 'between:1,5000|nullable', 'description' => 'between:1,5000|nullable',
'active' => [new IsBoolean], 'active' => [new IsBoolean],
]; ];
switch ($this->method()) {
default:
break;
case 'PUT':
case 'PATCH':
/** @var RuleGroup $ruleGroup */
$ruleGroup = $this->route()->parameter('ruleGroup');
$rules['title'] = 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id;
break;
}
return $rules;
} }
} }

View File

@@ -0,0 +1,74 @@
<?php
/**
* RuleGroupUpdateRequest.php
* Copyright (c) 2019 james@firefly-iii.org
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Rules\IsBoolean;
use FireflyIII\Support\Request\ChecksLogin;
use FireflyIII\Support\Request\ConvertsDataTypes;
use Illuminate\Foundation\Http\FormRequest;
/**
* @codeCoverageIgnore
* Class RuleGroupUpdateRequest
*/
class RuleGroupUpdateRequest extends FormRequest
{
use ConvertsDataTypes, ChecksLogin;
/**
* Get all data from the request.
*
* @return array
*/
public function getAll(): array
{
$active = true;
if (null !== $this->get('active')) {
$active = $this->boolean('active');
}
return [
'title' => $this->string('title'),
'description' => $this->string('description'),
'active' => $active,
];
}
/**
* The rules that the incoming request must be matched against.
*
* @return array
*/
public function rules(): array
{
$ruleGroup = $this->route()->parameter('ruleGroup');
return [
'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title,' . $ruleGroup->id,
'description' => 'between:1,5000|nullable',
'active' => [new IsBoolean],
];
}
}