Files
firefly-iii/app/Api/V1/Controllers/Search/AccountController.php

102 lines
3.4 KiB
PHP
Raw Normal View History

2019-10-02 18:00:01 +02:00
<?php
2020-06-30 19:05:35 +02:00
2021-03-07 06:30:59 +01:00
/*
2019-10-02 18:00:01 +02:00
* AccountController.php
2021-03-07 06:30:59 +01:00
* Copyright (c) 2021 james@firefly-iii.org
2019-10-02 18:00:01 +02:00
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
2020-06-30 19:05:35 +02:00
declare(strict_types=1);
2019-10-02 18:00:01 +02:00
namespace FireflyIII\Api\V1\Controllers\Search;
use FireflyIII\Api\V1\Controllers\Controller;
use FireflyIII\Support\Http\Api\AccountFilter;
use FireflyIII\Support\Search\AccountSearch;
use FireflyIII\Transformers\AccountTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Pagination\LengthAwarePaginator;
2021-03-07 06:30:59 +01:00
use JsonException;
2019-10-02 18:00:01 +02:00
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
2023-04-01 07:04:42 +02:00
use Illuminate\Support\Facades\Log;
2019-10-02 18:00:01 +02:00
/**
* Class AccountController
*/
class AccountController extends Controller
{
use AccountFilter;
private array $validFields;
2019-10-02 18:00:01 +02:00
public function __construct()
{
parent::__construct();
$this->validFields = [
AccountSearch::SEARCH_ALL,
AccountSearch::SEARCH_ID,
AccountSearch::SEARCH_NAME,
AccountSearch::SEARCH_IBAN,
AccountSearch::SEARCH_NUMBER,
];
}
/**
2021-09-19 17:22:16 +02:00
* This endpoint is documented at:
2023-02-12 06:53:36 +01:00
* https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/search/searchAccounts
2022-12-29 19:41:57 +01:00
* @param Request $request
2019-10-02 18:00:01 +02:00
*
* @return JsonResponse|Response
2021-03-07 06:30:59 +01:00
* @throws JsonException
2019-10-02 18:00:01 +02:00
*/
public function search(Request $request)
{
2020-02-22 11:05:16 +01:00
Log::debug('Now in account search()');
2019-10-02 18:00:01 +02:00
$manager = $this->getManager();
2022-12-29 19:41:57 +01:00
$query = trim((string)$request->get('query'));
$field = trim((string)$request->get('field'));
2019-10-02 18:00:01 +02:00
$type = $request->get('type') ?? 'all';
if ('' === $query || !in_array($field, $this->validFields, true)) {
return response(null, 422);
}
$types = $this->mapAccountTypes($type);
2020-02-22 11:05:16 +01:00
2019-10-02 18:00:01 +02:00
/** @var AccountSearch $search */
$search = app(AccountSearch::class);
$search->setUser(auth()->user());
$search->setTypes($types);
$search->setField($field);
$search->setQuery($query);
$accounts = $search->search();
/** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class);
$transformer->setParameters($this->parameters);
$count = $accounts->count();
2019-10-13 11:47:38 +02:00
$perPage = 0 === $count ? 1 : $count;
$paginator = new LengthAwarePaginator($accounts, $count, $perPage, 1);
2019-10-02 18:00:01 +02:00
$resource = new FractalCollection($accounts, $transformer, 'accounts');
$resource->setPaginator(new IlluminatePaginatorAdapter($paginator));
2020-10-03 16:51:44 +02:00
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', self::CONTENT_TYPE);
2019-10-02 18:00:01 +02:00
}
2020-03-15 08:16:16 +01:00
}