From bb841e66c7dd3312c5ca098967362a578e63b3db Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 21 Jul 2020 06:29:24 +0200 Subject: [PATCH] Add currency limit, without currency code #3150 --- .../Autocomplete/CurrencyController.php | 45 ++++++++++++++++--- .../Currency/CurrencyRepository.php | 5 ++- .../Currency/CurrencyRepositoryInterface.php | 3 +- routes/api.php | 1 + 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php index c41fed1ab5..28a32bc40f 100644 --- a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php +++ b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Controllers\Autocomplete; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; +use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; @@ -56,18 +57,50 @@ class CurrencyController extends Controller } /** - * TODO add limit - * * @param AutocompleteRequest $request * * @return JsonResponse */ - public function currencyWithCode(AutocompleteRequest $request): JsonResponse + public function currenciesWithCode(AutocompleteRequest $request): JsonResponse + { + $data = $request->getData(); + $collection = $this->repository->searchCurrency($data['query'], $data['limit']); + $result = []; + + /** @var TransactionCurrency $currency */ + foreach ($collection as $currency) { + $result[] = [ + 'id' => $currency->id, + 'name' => sprintf('%s (%s)', $currency->name, $currency->code), + 'code' => $currency->code, + 'symbol' => $currency->symbol, + 'decimal_places' => $currency->decimal_places, + ]; + } + + return response()->json($result); + } + + /** + * @param AutocompleteRequest $request + * + * @return JsonResponse + */ + public function currencies(AutocompleteRequest $request): JsonResponse { $data = $request->getData(); - $result = $this->repository->searchCurrency($data['query'])->toArray(); - foreach ($result as $index => $item) { - $result[$index]['name'] = sprintf('%s (%s)', $item['name'], $item['code']); + $collection = $this->repository->searchCurrency($data['query'], $data['limit']); + $result = []; + + /** @var TransactionCurrency $currency */ + foreach ($collection as $currency) { + $result[] = [ + 'id' => $currency->id, + 'name' => $currency->name, + 'code' => $currency->code, + 'symbol' => $currency->symbol, + 'decimal_places' => $currency->decimal_places, + ]; } return response()->json($result); diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 4ca89ddc3f..52b7db555c 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -476,17 +476,18 @@ class CurrencyRepository implements CurrencyRepositoryInterface /** * @param string $search + * @param int $limit * * @return Collection */ - public function searchCurrency(string $search): Collection + public function searchCurrency(string $search, int $limit): Collection { $query = TransactionCurrency::where('enabled', 1); if ('' !== $search) { $query->where('name', 'LIKE', sprintf('%%%s%%', $search)); } - return $query->get(); + return $query->take($limit)->get(); } /** diff --git a/app/Repositories/Currency/CurrencyRepositoryInterface.php b/app/Repositories/Currency/CurrencyRepositoryInterface.php index 5a37050ecc..440257fa34 100644 --- a/app/Repositories/Currency/CurrencyRepositoryInterface.php +++ b/app/Repositories/Currency/CurrencyRepositoryInterface.php @@ -230,10 +230,11 @@ interface CurrencyRepositoryInterface /** * @param string $search + * @param int $limit * * @return Collection */ - public function searchCurrency(string $search): Collection; + public function searchCurrency(string $search, int $limit): Collection; /** * @param User $user diff --git a/routes/api.php b/routes/api.php index f639a394c2..551b2597c1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -66,6 +66,7 @@ Route::group( Route::get('budgets', ['uses' => 'BudgetController@budgets', 'as' => 'budgets']); Route::get('categories', ['uses' => 'CategoryController@categories', 'as' => 'categories']); Route::get('currencies', ['uses' => 'CurrencyController@currencies', 'as' => 'currencies']); + Route::get('currencies-with-code', ['uses' => 'CurrencyController@currenciesWithCode', 'as' => 'currenciesWithCode']); Route::get('object-groups', ['uses' => 'ObjectGroupController@objectGroups', 'as' => 'object-groups']); } );