diff --git a/app/Api/V1/Controllers/BudgetLimitController.php b/app/Api/V1/Controllers/BudgetLimitController.php index 5e9b0798a5..d4fbd34567 100644 --- a/app/Api/V1/Controllers/BudgetLimitController.php +++ b/app/Api/V1/Controllers/BudgetLimitController.php @@ -24,7 +24,8 @@ declare(strict_types=1); 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\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\BudgetLimit; @@ -156,13 +157,13 @@ class BudgetLimitController extends Controller /** * Store a newly created resource in storage. * - * @param BudgetLimitRequest $request + * @param BudgetLimitStoreRequest $request * * @return JsonResponse * @throws FireflyException * */ - public function store(BudgetLimitRequest $request): JsonResponse + public function store(BudgetLimitStoreRequest $request): JsonResponse { $data = $request->getAll(); $data['start_date'] = $data['start']; @@ -237,12 +238,12 @@ class BudgetLimitController extends Controller /** * Update the specified resource in storage. * - * @param BudgetLimitRequest $request + * @param BudgetLimitUpdateRequest $request * @param BudgetLimit $budgetLimit * * @return JsonResponse */ - public function update(BudgetLimitRequest $request, BudgetLimit $budgetLimit): JsonResponse + public function update(BudgetLimitUpdateRequest $request, BudgetLimit $budgetLimit): JsonResponse { $data = $request->getAll(); $budgetLimit = $this->blRepository->update($budgetLimit, $data); diff --git a/app/Api/V1/Controllers/CurrencyController.php b/app/Api/V1/Controllers/CurrencyController.php index 029fb77e88..c82a14380d 100644 --- a/app/Api/V1/Controllers/CurrencyController.php +++ b/app/Api/V1/Controllers/CurrencyController.php @@ -23,7 +23,8 @@ declare(strict_types=1); 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\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Account; @@ -580,12 +581,12 @@ class CurrencyController extends Controller /** * Store new currency. * - * @param CurrencyRequest $request + * @param CurrencyStoreRequest $request * * @return JsonResponse * @throws FireflyException */ - public function store(CurrencyRequest $request): JsonResponse + public function store(CurrencyStoreRequest $request): JsonResponse { $currency = $this->repository->store($request->getAll()); if (true === $request->boolean('default')) { @@ -664,12 +665,12 @@ class CurrencyController extends Controller /** * Update a currency. * - * @param CurrencyRequest $request + * @param CurrencyUpdateRequest $request * @param TransactionCurrency $currency * * @return JsonResponse */ - public function update(CurrencyRequest $request, TransactionCurrency $currency): JsonResponse + public function update(CurrencyUpdateRequest $request, TransactionCurrency $currency): JsonResponse { $data = $request->getAll(); $currency = $this->repository->update($currency, $data); diff --git a/app/Api/V1/Controllers/LinkTypeController.php b/app/Api/V1/Controllers/LinkTypeController.php index cc1cbfd92d..6f4942c6d3 100644 --- a/app/Api/V1/Controllers/LinkTypeController.php +++ b/app/Api/V1/Controllers/LinkTypeController.php @@ -23,7 +23,8 @@ declare(strict_types=1); 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\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\LinkType; @@ -150,12 +151,12 @@ class LinkTypeController extends Controller /** * Store new object. * - * @param LinkTypeRequest $request + * @param LinkTypeStoreRequest $request * * @return JsonResponse * @throws FireflyException */ - public function store(LinkTypeRequest $request): JsonResponse + public function store(LinkTypeStoreRequest $request): JsonResponse { /** @var User $admin */ $admin = auth()->user(); @@ -239,13 +240,13 @@ class LinkTypeController extends Controller /** * Update object. * - * @param LinkTypeRequest $request + * @param LinkTypeUpdateRequest $request * @param LinkType $linkType * * @return JsonResponse * @throws FireflyException */ - public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse + public function update(LinkTypeUpdateRequest $request, LinkType $linkType): JsonResponse { if (false === $linkType->editable) { throw new FireflyException('200020: Link type cannot be changed.'); diff --git a/app/Api/V1/Controllers/PiggyBankController.php b/app/Api/V1/Controllers/PiggyBankController.php index 8b1133b860..b61dc029f4 100644 --- a/app/Api/V1/Controllers/PiggyBankController.php +++ b/app/Api/V1/Controllers/PiggyBankController.php @@ -23,7 +23,7 @@ declare(strict_types=1); 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\Exceptions\FireflyException; use FireflyIII\Models\PiggyBank; @@ -224,12 +224,12 @@ class PiggyBankController extends Controller /** * Update piggy bank. * - * @param PiggyBankRequest $request + * @param PiggyBankUpdateRequest $request * @param PiggyBank $piggyBank * * @return JsonResponse */ - public function update(PiggyBankRequest $request, PiggyBank $piggyBank): JsonResponse + public function update(PiggyBankUpdateRequest $request, PiggyBank $piggyBank): JsonResponse { $data = $request->getAll(); $piggyBank = $this->repository->update($piggyBank, $data); diff --git a/app/Api/V1/Controllers/RuleGroupController.php b/app/Api/V1/Controllers/RuleGroupController.php index d3b835c1fb..51e84b7740 100644 --- a/app/Api/V1/Controllers/RuleGroupController.php +++ b/app/Api/V1/Controllers/RuleGroupController.php @@ -24,7 +24,8 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; 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\RuleGroupTriggerRequest; use FireflyIII\Exceptions\FireflyException; @@ -221,11 +222,11 @@ class RuleGroupController extends Controller /** * Store new object. * - * @param RuleGroupRequest $request + * @param RuleGroupStoreRequest $request * * @return JsonResponse */ - public function store(RuleGroupRequest $request): JsonResponse + public function store(RuleGroupStoreRequest $request): JsonResponse { $ruleGroup = $this->ruleGroupRepository->store($request->getAll()); $manager = $this->getManager(); @@ -341,12 +342,12 @@ class RuleGroupController extends Controller /** * Update a rule group. * - * @param RuleGroupRequest $request + * @param RuleGroupUpdateRequest $request * @param RuleGroup $ruleGroup * * @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()); $manager = $this->getManager(); diff --git a/app/Api/V1/Controllers/TransactionController.php b/app/Api/V1/Controllers/TransactionController.php index a7934b824c..36f61305d6 100644 --- a/app/Api/V1/Controllers/TransactionController.php +++ b/app/Api/V1/Controllers/TransactionController.php @@ -36,6 +36,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\Journal\JournalAPIRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface; +use FireflyIII\Rules\IsDuplicateTransaction; use FireflyIII\Support\Http\Api\TransactionFilter; use FireflyIII\Transformers\AttachmentTransformer; use FireflyIII\Transformers\PiggyBankEventTransformer; @@ -45,11 +46,13 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; +use Illuminate\Validation\ValidationException; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; use Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Validator; /** * Class TransactionController @@ -171,7 +174,7 @@ class TransactionController extends Controller */ public function index(Request $request): JsonResponse { - $pageSize = (int) app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; + $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $type = $request->get('type') ?? 'default'; $this->parameters->set('type', $type); @@ -289,7 +292,7 @@ class TransactionController extends Controller * @param TransactionStoreRequest $request * * @return JsonResponse - * @throws FireflyException + * @throws FireflyException|ValidationException */ public function store(TransactionStoreRequest $request): JsonResponse { @@ -304,29 +307,16 @@ class TransactionController extends Controller $transactionGroup = $this->groupRepository->store($data); } catch (DuplicateTransactionException $e) { Log::warning('Caught a duplicate transaction. Return error message.'); - // return bad validation message. - // TODO use Laravel's internal validation thing to do this. - $response = [ - 'message' => 'The given data was invalid.', - 'errors' => [ - 'transactions.0.description' => [$e->getMessage()], - ], - ]; - - return response()->json($response, 422); + $validator = Validator::make( + ['transactions' => [['description' => $e->getMessage()]]], ['transactions.0.description' => new IsDuplicateTransaction] + ); + throw new ValidationException($validator); } catch (FireflyException $e) { Log::warning('Caught an exception. Return error message.'); Log::error($e->getMessage()); - // return bad validation message. - // TODO use Laravel's internal validation thing to do this. - $response = [ - 'message' => 'The given data was invalid.', - 'errors' => [ - 'transactions.0.description' => [sprintf('Internal exception: %s', $e->getMessage())], - ], - ]; - - return response()->json($response, 422); + $message = sprintf('Internal exception: %s', $e->getMessage()); + $validator = Validator::make(['transactions' => [['description' => $message]]], ['transactions.0.description' => new IsDuplicateTransaction]); + throw new ValidationException($validator); } app('preferences')->mark(); event(new StoredTransactionGroup($transactionGroup, $data['apply_rules'] ?? true)); diff --git a/app/Api/V1/Requests/BudgetLimitStoreRequest.php b/app/Api/V1/Requests/BudgetLimitStoreRequest.php new file mode 100644 index 0000000000..944df63de1 --- /dev/null +++ b/app/Api/V1/Requests/BudgetLimitStoreRequest.php @@ -0,0 +1,73 @@ +. + */ + +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', + ]; + } + +} diff --git a/app/Api/V1/Requests/BudgetLimitRequest.php b/app/Api/V1/Requests/BudgetLimitUpdateRequest.php similarity index 79% rename from app/Api/V1/Requests/BudgetLimitRequest.php rename to app/Api/V1/Requests/BudgetLimitUpdateRequest.php index dd93beb0ae..b83566a3db 100644 --- a/app/Api/V1/Requests/BudgetLimitRequest.php +++ b/app/Api/V1/Requests/BudgetLimitUpdateRequest.php @@ -1,6 +1,6 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -85,21 +74,12 @@ class BudgetLimitRequest extends FormRequest 'currency_id' => 'numeric|exists:transaction_currencies,id', '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. $budget = $this->route()->parameter('budget'); if (null !== $budget) { unset($rules['budget_id']); } - return $rules; } diff --git a/app/Api/V1/Requests/CurrencyRequest.php b/app/Api/V1/Requests/CurrencyStoreRequest.php similarity index 70% rename from app/Api/V1/Requests/CurrencyRequest.php rename to app/Api/V1/Requests/CurrencyStoreRequest.php index 1b694114f8..0d912cff05 100644 --- a/app/Api/V1/Requests/CurrencyRequest.php +++ b/app/Api/V1/Requests/CurrencyStoreRequest.php @@ -1,6 +1,6 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -82,7 +71,7 @@ class CurrencyRequest extends FormRequest */ public function rules(): array { - $rules = [ + return [ 'name' => 'required|between:1,255|unique:transaction_currencies,name', 'code' => 'required|between:3,3|unique:transaction_currencies,code', 'symbol' => 'required|between:1,8|unique:transaction_currencies,symbol', @@ -91,20 +80,5 @@ class CurrencyRequest extends FormRequest '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; - } } diff --git a/app/Api/V1/Requests/CurrencyUpdateRequest.php b/app/Api/V1/Requests/CurrencyUpdateRequest.php new file mode 100644 index 0000000000..57c8a4a321 --- /dev/null +++ b/app/Api/V1/Requests/CurrencyUpdateRequest.php @@ -0,0 +1,84 @@ +. + */ + +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()], + ]; + } +} diff --git a/app/Api/V1/Requests/LinkTypeRequest.php b/app/Api/V1/Requests/LinkTypeStoreRequest.php similarity index 61% rename from app/Api/V1/Requests/LinkTypeRequest.php rename to app/Api/V1/Requests/LinkTypeStoreRequest.php index ba55cc964f..260b3d8afe 100644 --- a/app/Api/V1/Requests/LinkTypeRequest.php +++ b/app/Api/V1/Requests/LinkTypeStoreRequest.php @@ -1,6 +1,6 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -72,26 +61,10 @@ class LinkTypeRequest extends FormRequest */ public function rules(): array { - $rules = [ + return [ 'name' => 'required|unique:link_types,name|min:1', 'outward' => 'required|unique:link_types,outward|min:1|different:inward', '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; } } diff --git a/app/Api/V1/Requests/LinkTypeUpdateRequest.php b/app/Api/V1/Requests/LinkTypeUpdateRequest.php new file mode 100644 index 0000000000..229fc32e84 --- /dev/null +++ b/app/Api/V1/Requests/LinkTypeUpdateRequest.php @@ -0,0 +1,71 @@ +. + */ + +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'], + ]; + } +} diff --git a/app/Api/V1/Requests/PiggyBankStoreRequest.php b/app/Api/V1/Requests/PiggyBankStoreRequest.php index 1abcb840d9..5099df3a5e 100644 --- a/app/Api/V1/Requests/PiggyBankStoreRequest.php +++ b/app/Api/V1/Requests/PiggyBankStoreRequest.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests; +use FireflyIII\Support\Request\ChecksLogin; use FireflyIII\Support\Request\ConvertsDataTypes; use Illuminate\Foundation\Http\FormRequest; @@ -33,18 +34,7 @@ use Illuminate\Foundation\Http\FormRequest; */ class PiggyBankStoreRequest extends FormRequest { - use ConvertsDataTypes; - - /** - * Authorize logged in users. - * - * @return bool - */ - public function authorize(): bool - { - // Only allow authenticated users - return auth()->check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. diff --git a/app/Api/V1/Requests/PiggyBankRequest.php b/app/Api/V1/Requests/PiggyBankUpdateRequest.php similarity index 63% rename from app/Api/V1/Requests/PiggyBankRequest.php rename to app/Api/V1/Requests/PiggyBankUpdateRequest.php index 7b56f166a9..cefe076fc3 100644 --- a/app/Api/V1/Requests/PiggyBankRequest.php +++ b/app/Api/V1/Requests/PiggyBankUpdateRequest.php @@ -1,6 +1,6 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -76,30 +65,16 @@ class PiggyBankRequest extends FormRequest */ public function rules(): array { - $rules = [ - 'name' => 'required|between:1,255|uniquePiggyBankForUser', - 'current_amount' => ['numeric', 'gte:0', 'lte:target_amount'], + $piggyBank = $this->route()->parameter('piggyBank'); + return [ + 'name' => 'between:1,255|uniquePiggyBankForUser:' . $piggyBank->id, + 'current_amount' => ['numeric', 'gte:0', new LessThanPiggyTarget], + 'target_amount' => 'numeric|gt:0', 'start_date' => 'date|nullable', 'target_date' => 'date|nullable|after:start_date', '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; } } diff --git a/app/Api/V1/Requests/RuleGroupRequest.php b/app/Api/V1/Requests/RuleGroupStoreRequest.php similarity index 69% rename from app/Api/V1/Requests/RuleGroupRequest.php rename to app/Api/V1/Requests/RuleGroupStoreRequest.php index b55de2194a..be906b3daa 100644 --- a/app/Api/V1/Requests/RuleGroupRequest.php +++ b/app/Api/V1/Requests/RuleGroupStoreRequest.php @@ -1,6 +1,6 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -76,22 +65,10 @@ class RuleGroupRequest extends FormRequest */ public function rules(): array { - $rules = [ + return [ 'title' => 'required|between:1,100|uniqueObjectForUser:rule_groups,title', 'description' => 'between:1,5000|nullable', '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; } } diff --git a/app/Api/V1/Requests/RuleGroupUpdateRequest.php b/app/Api/V1/Requests/RuleGroupUpdateRequest.php new file mode 100644 index 0000000000..99de728a19 --- /dev/null +++ b/app/Api/V1/Requests/RuleGroupUpdateRequest.php @@ -0,0 +1,74 @@ +. + */ + +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], + ]; + } +}