diff --git a/app/Api/V1/Controllers/Autocomplete/BillController.php b/app/Api/V1/Controllers/Autocomplete/BillController.php index abdab1dee3..890996dd2b 100644 --- a/app/Api/V1/Controllers/Autocomplete/BillController.php +++ b/app/Api/V1/Controllers/Autocomplete/BillController.php @@ -58,7 +58,6 @@ class BillController extends Controller } /** - * TODO add limit * @param AutocompleteRequest $request * * @return JsonResponse diff --git a/app/Api/V1/Controllers/Autocomplete/BudgetController.php b/app/Api/V1/Controllers/Autocomplete/BudgetController.php index 1aebb3c83a..066a1b2c15 100644 --- a/app/Api/V1/Controllers/Autocomplete/BudgetController.php +++ b/app/Api/V1/Controllers/Autocomplete/BudgetController.php @@ -58,7 +58,6 @@ class BudgetController extends Controller } /** - * TODO add limit * @param AutocompleteRequest $request * * @return JsonResponse diff --git a/app/Api/V1/Controllers/BillController.php b/app/Api/V1/Controllers/BillController.php index 136c2a341d..9207b0bdf2 100644 --- a/app/Api/V1/Controllers/BillController.php +++ b/app/Api/V1/Controllers/BillController.php @@ -24,7 +24,8 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; -use FireflyIII\Api\V1\Requests\BillRequest; +use FireflyIII\Api\V1\Requests\BillUpdateRequest; +use FireflyIII\Api\V1\Requests\BillStoreRequest; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\Bill; @@ -49,8 +50,7 @@ class BillController extends Controller { use TransactionFilter; - /** @var BillRepositoryInterface The bill repository */ - private $repository; + private BillRepositoryInterface $repository; /** @@ -205,12 +205,12 @@ class BillController extends Controller /** * Store a bill. * - * @param BillRequest $request + * @param BillStoreRequest $request * * @return JsonResponse * @throws FireflyException */ - public function store(BillRequest $request): JsonResponse + public function store(BillStoreRequest $request): JsonResponse { $bill = $this->repository->store($request->getAll()); $manager = $this->getManager(); @@ -285,12 +285,12 @@ class BillController extends Controller /** * Update a bill. * - * @param BillRequest $request + * @param BillUpdateRequest $request * @param Bill $bill * * @return JsonResponse */ - public function update(BillRequest $request, Bill $bill): JsonResponse + public function update(BillUpdateRequest $request, Bill $bill): JsonResponse { $data = $request->getAll(); $bill = $this->repository->update($bill, $data); diff --git a/app/Api/V1/Requests/BillRequest.php b/app/Api/V1/Requests/BillStoreRequest.php similarity index 82% rename from app/Api/V1/Requests/BillRequest.php rename to app/Api/V1/Requests/BillStoreRequest.php index e0a97bc9e8..d9705538ab 100644 --- a/app/Api/V1/Requests/BillRequest.php +++ b/app/Api/V1/Requests/BillStoreRequest.php @@ -1,7 +1,7 @@ check(); - } + use ConvertsDataTypes, ChecksLogin; /** * Get all data from the request. @@ -85,7 +73,7 @@ class BillRequest extends FormRequest */ public function rules(): array { - $rules = [ + return [ 'name' => 'between:1,255|uniqueObjectForUser:bills,name', 'amount_min' => 'numeric|gt:0', 'amount_max' => 'numeric|gt:0', @@ -97,17 +85,6 @@ class BillRequest extends FormRequest 'active' => [new IsBoolean], 'notes' => 'between:1,65536', ]; - switch ($this->method()) { - default: - break; - case 'PUT': - case 'PATCH': - $bill = $this->route()->parameter('bill'); - $rules['name'] .= ',' . $bill->id; - break; - } - - return $rules; } /** diff --git a/app/Api/V1/Requests/BillUpdateRequest.php b/app/Api/V1/Requests/BillUpdateRequest.php new file mode 100644 index 0000000000..7838ee46df --- /dev/null +++ b/app/Api/V1/Requests/BillUpdateRequest.php @@ -0,0 +1,111 @@ +. + */ + +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; +use Illuminate\Validation\Validator; + +/** + * Class BillUpdateRequest + * + * @codeCoverageIgnore + */ +class BillUpdateRequest 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 [ + 'name' => $this->string('name'), + 'amount_min' => $this->string('amount_min'), + 'amount_max' => $this->string('amount_max'), + 'currency_id' => $this->integer('currency_id'), + 'currency_code' => $this->string('currency_code'), + 'date' => $this->date('date'), + 'repeat_freq' => $this->string('repeat_freq'), + 'skip' => $this->integer('skip'), + 'active' => $active, + 'order' => $this->integer('order'), + 'notes' => $this->nlString('notes'), + ]; + } + + /** + * The rules that the incoming request must be matched against. + * + * @return array + */ + public function rules(): array + { + $bill = $this->route()->parameter('bill'); + return [ + 'name' => sprintf('between:1,255|uniqueObjectForUser:bills,name,%d', $bill->id), + 'amount_min' => 'numeric|gt:0', + 'amount_max' => 'numeric|gt:0', + 'currency_id' => 'numeric|exists:transaction_currencies,id', + 'currency_code' => 'min:3|max:3|exists:transaction_currencies,code', + 'date' => 'date', + 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly', + 'skip' => 'between:0,31', + 'active' => [new IsBoolean], + 'notes' => 'between:1,65536', + ]; + } + + /** + * Configure the validator instance. + * + * @param Validator $validator + * + * @return void + */ + public function withValidator(Validator $validator): void + { + $validator->after( + static function (Validator $validator) { + $data = $validator->getData(); + $min = (float) ($data['amount_min'] ?? 0); + $max = (float) ($data['amount_max'] ?? 0); + if ($min > $max) { + $validator->errors()->add('amount_min', (string) trans('validation.amount_min_over_max')); + } + } + ); + } +} diff --git a/app/Repositories/Account/AccountRepository.php b/app/Repositories/Account/AccountRepository.php index 39cdb83eb1..666315aa6d 100644 --- a/app/Repositories/Account/AccountRepository.php +++ b/app/Repositories/Account/AccountRepository.php @@ -115,33 +115,6 @@ class AccountRepository implements AccountRepositoryInterface } - /** - * @param string $number - * @param array $types - * - * @return Account|null - */ - public function findByAccountNumber(string $number, array $types): ?Account - { - $query = $this->user->accounts() - ->leftJoin('account_meta', 'account_meta.account_id', '=', 'accounts.id') - ->where('account_meta.name', 'account_number') - ->where('account_meta.data', json_encode($number)); - - if (!empty($types)) { - $query->leftJoin('account_types', 'accounts.account_type_id', '=', 'account_types.id'); - $query->whereIn('account_types.type', $types); - } - - /** @var Collection $accounts */ - $accounts = $query->get(['accounts.*']); - if ($accounts->count() > 0) { - return $accounts->first(); - } - - return null; - } - /** * @param string $iban * @param array $types @@ -228,16 +201,6 @@ class AccountRepository implements AccountRepositoryInterface return null; } - /** - * @param Account $account - * - * @return string - */ - public function getAccountType(Account $account): string - { - return $account->accountType->type; - } - /** * Return account type or null if not found. * diff --git a/app/Repositories/Account/AccountRepositoryInterface.php b/app/Repositories/Account/AccountRepositoryInterface.php index ac3b3885fa..0befebe3de 100644 --- a/app/Repositories/Account/AccountRepositoryInterface.php +++ b/app/Repositories/Account/AccountRepositoryInterface.php @@ -80,7 +80,7 @@ interface AccountRepositoryInterface /** * Moved here from account CRUD. * - * @param Account $account + * @param Account $account * @param Account|null $moveTo * * @return bool @@ -96,19 +96,9 @@ interface AccountRepositoryInterface */ public function expandWithDoubles(Collection $accounts): Collection; - /** - * Find by account number. Is used. - * - * @param string $number - * @param array $types - * - * @return Account|null - */ - public function findByAccountNumber(string $number, array $types): ?Account; - /** * @param string $iban - * @param array $types + * @param array $types * * @return Account|null */ @@ -116,7 +106,7 @@ interface AccountRepositoryInterface /** * @param string $name - * @param array $types + * @param array $types * * @return Account|null */ @@ -136,13 +126,6 @@ interface AccountRepositoryInterface */ public function getAccountCurrency(Account $account): ?TransactionCurrency; - /** - * @param Account $account - * - * @return string - */ - public function getAccountType(Account $account): string; - /** * Return account type or null if not found. * @@ -189,7 +172,7 @@ interface AccountRepositoryInterface * Return meta value for account. Null if not found. * * @param Account $account - * @param string $field + * @param string $field * * @return null|string */ @@ -282,7 +265,7 @@ interface AccountRepositoryInterface /** * @param string $query - * @param array $types + * @param array $types * @param int $limit * * @return Collection @@ -291,7 +274,7 @@ interface AccountRepositoryInterface /** * @param string $query - * @param array $types + * @param array $types * @param int $limit * * @return Collection @@ -312,7 +295,7 @@ interface AccountRepositoryInterface /** * @param Account $account - * @param array $data + * @param array $data * * @return Account */