From 54676715c02e4ae93110c943a6ed4dd951095945 Mon Sep 17 00:00:00 2001 From: James Cole Date: Fri, 2 Jan 2026 16:38:46 +0100 Subject: [PATCH] Create new request for search. --- .../Search/TransactionController.php | 9 ++-- .../V1/Requests/Search/SearchQueryRequest.php | 50 +++++++++++++++++++ .../Search/TransactionSearchRequest.php | 40 +++++++++++++++ 3 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 app/Api/V1/Requests/Search/SearchQueryRequest.php create mode 100644 app/Api/V1/Requests/Search/TransactionSearchRequest.php diff --git a/app/Api/V1/Controllers/Search/TransactionController.php b/app/Api/V1/Controllers/Search/TransactionController.php index d95daf8c37..ac04fb2bb5 100644 --- a/app/Api/V1/Controllers/Search/TransactionController.php +++ b/app/Api/V1/Controllers/Search/TransactionController.php @@ -25,6 +25,7 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Search; use FireflyIII\Api\V1\Controllers\Controller; +use FireflyIII\Api\V1\Requests\Search\TransactionSearchRequest; use FireflyIII\Support\JsonApi\Enrichments\TransactionGroupEnrichment; use FireflyIII\Support\Search\SearchInterface; use FireflyIII\Transformers\TransactionGroupTransformer; @@ -42,12 +43,12 @@ class TransactionController extends Controller * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchTransactions */ - public function search(Request $request, SearchInterface $searcher): JsonResponse + public function search(TransactionSearchRequest $request, SearchInterface $searcher): JsonResponse { $manager = $this->getManager(); - $fullQuery = (string) $request->get('query'); - $page = 0 === (int) $request->get('page') ? 1 : (int) $request->get('page'); - $pageSize = $this->parameters->get('limit'); + $fullQuery = (string) $request->attributes->get('query'); + $page = $request->attributes->get('page'); + $pageSize = $request->attributes->get('limit'); $searcher->parseQuery($fullQuery); $searcher->setPage($page); $searcher->setLimit($pageSize); diff --git a/app/Api/V1/Requests/Search/SearchQueryRequest.php b/app/Api/V1/Requests/Search/SearchQueryRequest.php new file mode 100644 index 0000000000..73640dc8ee --- /dev/null +++ b/app/Api/V1/Requests/Search/SearchQueryRequest.php @@ -0,0 +1,50 @@ +. + */ + +namespace FireflyIII\Api\V1\Requests\Search; + +use FireflyIII\Api\V1\Requests\ApiRequest; +use Illuminate\Contracts\Validation\Validator; + +class SearchQueryRequest extends ApiRequest +{ + public function rules(): array + { + return [ + 'query' => sprintf('min:0|max:500|%s', $this->required), + ]; + } + + + public function withValidator(Validator $validator): void + { + $validator->after( + function (Validator $validator): void { + if ($validator->failed()) { + return; + } + $query = $this->convertString('query'); + $this->attributes->set('query', $query); + } + ); + } + +} diff --git a/app/Api/V1/Requests/Search/TransactionSearchRequest.php b/app/Api/V1/Requests/Search/TransactionSearchRequest.php new file mode 100644 index 0000000000..f1bed30e15 --- /dev/null +++ b/app/Api/V1/Requests/Search/TransactionSearchRequest.php @@ -0,0 +1,40 @@ +. + */ + +namespace FireflyIII\Api\V1\Requests\Search; + +use FireflyIII\Api\V1\Requests\AggregateFormRequest; +use FireflyIII\Api\V1\Requests\PaginationRequest; +use FireflyIII\Models\TransactionJournal; + +class TransactionSearchRequest extends AggregateFormRequest +{ + + #[\Override] + protected function getRequests(): array + { + return [ + [PaginationRequest::class, 'sort_class' => TransactionJournal::class], + SearchQueryRequest::class, + // [ObjectTypeApiRequest::class, 'object_type' => Account::class], + ]; + } +}