. */ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers\Autocomplete; use FireflyIII\Api\V1\Controllers\Controller; use FireflyIII\Api\V1\Requests\Autocomplete\AutocompleteRequest; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\User; use Illuminate\Http\JsonResponse; /** * Class PiggyBankController */ class PiggyBankController extends Controller { private AccountRepositoryInterface $accountRepository; private PiggyBankRepositoryInterface $piggyRepository; /** * PiggyBankController constructor. */ public function __construct() { parent::__construct(); $this->middleware( function ($request, $next) { /** @var User $user */ $user = auth()->user(); $this->piggyRepository = app(PiggyBankRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class); $this->piggyRepository->setUser($user); $this->accountRepository->setUser($user); return $next($request); } ); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesAC */ public function piggyBanks(AutocompleteRequest $request): JsonResponse { $data = $request->getData(); $piggies = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); $response = []; /** @var PiggyBank $piggy */ foreach ($piggies as $piggy) { $currency = $piggy->transactionCurrency; $objectGroup = $piggy->objectGroups()->first(); $response[] = [ 'id' => (string) $piggy->id, 'name' => $piggy->name, 'currency_id' => (string) $currency->id, 'currency_name' => $currency->name, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, 'currency_decimal_places' => $currency->decimal_places, 'object_group_id' => null === $objectGroup ? null : (string) $objectGroup->id, 'object_group_title' => $objectGroup?->title, ]; } return response()->json($response); } /** * This endpoint is documented at: * https://api-docs.firefly-iii.org/?urls.primaryName=2.0.0%20(v1)#/autocomplete/getPiggiesBalanceAC */ public function piggyBanksWithBalance(AutocompleteRequest $request): JsonResponse { $data = $request->getData(); $piggies = $this->piggyRepository->searchPiggyBank($data['query'], $this->parameters->get('limit')); $response = []; /** @var PiggyBank $piggy */ foreach ($piggies as $piggy) { $currency = $piggy->transactionCurrency; $currentAmount = $this->piggyRepository->getCurrentAmount($piggy); $objectGroup = $piggy->objectGroups()->first(); $response[] = [ 'id' => (string) $piggy->id, 'name' => $piggy->name, 'name_with_balance' => sprintf( '%s (%s / %s)', $piggy->name, app('amount')->formatAnything($currency, $currentAmount, false), app('amount')->formatAnything($currency, $piggy->target_amount, false), ), 'currency_id' => (string) $currency->id, 'currency_name' => $currency->name, 'currency_code' => $currency->code, 'currency_symbol' => $currency->symbol, 'currency_decimal_places' => $currency->decimal_places, 'object_group_id' => null === $objectGroup ? null : (string) $objectGroup->id, 'object_group_title' => $objectGroup?->title, ]; } return response()->json($response); } }