. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Requests; use FireflyIII\Models\PiggyBank; use FireflyIII\Rules\IsAssetAccountId; use FireflyIII\Rules\LessThanPiggyTarget; use FireflyIII\Rules\ZeroOrMore; /** * * Class PiggyBankRequest * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ class PiggyBankRequest extends Request { /** * Authorize logged in users. * * @return bool */ public function authorize(): bool { // Only allow authenticated users return auth()->check(); } /** * Get all data from the request. * * @return array */ public function getAll(): array { return [ 'name' => $this->string('name'), 'account_id' => $this->integer('account_id'), 'targetamount' => $this->string('target_amount'), 'current_amount' => $this->string('current_amount'), 'startdate' => $this->date('start_date'), 'targetdate' => $this->date('target_date'), 'notes' => $this->nlString('notes'), ]; } /** * The rules that the incoming request must be matched against. * * @return array */ public function rules(): array { $rules = [ 'name' => 'required|between:1,255|uniquePiggyBankForUser', 'current_amount' => ['numeric', new ZeroOrMore, 'lte:target_amount'], 'start_date' => 'date|nullable', 'target_date' => 'date|nullable|after:start_date', 'notes' => 'max:65000', ]; 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|more:0'; $rules['current_amount'] = ['numeric', new ZeroOrMore, new LessThanPiggyTarget]; break; } return $rules; } }