. */ namespace FireflyIII\Api\V1\Requests\Models\Account; use Carbon\Carbon; use FireflyIII\Models\Preference; use FireflyIII\Support\Facades\Preferences; use FireflyIII\Support\Http\Api\AccountFilter; use FireflyIII\Support\Request\ConvertsDataTypes; use FireflyIII\User; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; class ShowRequest extends FormRequest { use AccountFilter; use ConvertsDataTypes; public function getParameters(): array { $limit = $this->convertInteger('limit'); if (0 === $limit) { // get default for user: /** @var User $user */ $user = auth()->user(); /** @var Preference $pageSize */ $limit = (int)Preferences::getForUser($user, 'listPageSize', 50)->data; } $page = $this->convertInteger('page'); $page = min(max(1, $page), 2 ** 16); return [ 'type' => $this->convertString('type', 'all'), 'limit' => $limit, 'sort' => $this->convertString('sort', 'order'), 'page' => $page, ]; } public function rules(): array { $keys = implode(',', array_keys($this->types)); return [ 'date' => 'date', 'start' => 'date|present_with:end|before_or_equal:end|before:2038-01-17|after:1970-01-02', 'end' => 'date|present_with:start|after_or_equal:start|before:2038-01-17|after:1970-01-02', 'sort' => 'in:active,iban,name,order,-active,-iban,-name,-order', // TODO improve me. 'type' => sprintf('in:%s', $keys), 'limit' => 'number|min:1|max:131337', 'page' => 'number|min:1|max:131337', ]; } public function withValidator(Validator $validator): void { $validator->after( function (Validator $validator): void { if ($validator->failed()) { return; } $data = $validator->getData(); if (array_key_exists('date', $data) && array_key_exists('start', $data) && array_key_exists('end', $data)) { // assume valid dates, before we got here. $start = Carbon::parse($data['start'], config('app.timezone'))->startOfDay(); $end = Carbon::parse($data['end'], config('app.timezone'))->endOfDay(); $date = Carbon::parse($data['date'], config('app.timezone')); if (!$date->between($start, $end)) { $validator->errors()->add('date', (string)trans('validation.between_date')); } } } ); } }