From f9f1fa0fcb855713a4c1d1c63db54461a890fd8b Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 4 Sep 2019 17:39:39 +0200 Subject: [PATCH] Clean up API code and fix test code. --- app/Api/V1/Controllers/AboutController.php | 11 +- app/Api/V1/Controllers/AccountController.php | 42 +-- .../V1/Controllers/AttachmentController.php | 41 ++- .../Controllers/AvailableBudgetController.php | 36 +-- app/Api/V1/Controllers/BillController.php | 60 ++--- app/Api/V1/Controllers/BudgetController.php | 48 +--- .../V1/Controllers/BudgetLimitController.php | 40 +-- app/Api/V1/Controllers/CategoryController.php | 36 +-- .../Controllers/Chart/AccountController.php | 5 +- .../Controllers/Chart/CategoryController.php | 4 +- .../Controllers/ConfigurationController.php | 3 +- app/Api/V1/Controllers/Controller.php | 15 ++ app/Api/V1/Controllers/CurrencyController.php | 118 ++------- .../CurrencyExchangeRateController.php | 9 +- app/Api/V1/Controllers/ImportController.php | 27 +- app/Api/V1/Controllers/LinkTypeController.php | 36 +-- .../V1/Controllers/PiggyBankController.php | 40 +-- .../V1/Controllers/PreferenceController.php | 33 +-- .../V1/Controllers/RecurrenceController.php | 35 +-- app/Api/V1/Controllers/RuleController.php | 62 ++--- .../V1/Controllers/RuleGroupController.php | 139 ++++------ app/Api/V1/Controllers/SummaryController.php | 2 +- app/Api/V1/Controllers/TagController.php | 80 +++--- .../V1/Controllers/TransactionController.php | 51 +--- .../Controllers/TransactionLinkController.php | 26 +- app/Api/V1/Controllers/UserController.php | 45 +--- app/Api/V1/Requests/AccountStoreRequest.php | 1 + app/Api/V1/Requests/AccountUpdateRequest.php | 23 +- .../V1/Requests/AttachmentStoreRequest.php | 2 + app/Api/V1/Requests/BudgetRequest.php | 1 + app/Api/V1/Requests/CategoryRequest.php | 1 + app/Api/V1/Requests/ConfigurationRequest.php | 1 + app/Api/V1/Requests/CurrencyRequest.php | 1 + app/Api/V1/Requests/LinkTypeRequest.php | 1 + app/Api/V1/Requests/PiggyBankRequest.php | 1 + app/Api/V1/Requests/PreferenceRequest.php | 1 + .../V1/Requests/RecurrenceUpdateRequest.php | 24 +- app/Api/V1/Requests/RuleGroupTestRequest.php | 50 ++-- .../V1/Requests/RuleGroupTriggerRequest.php | 26 +- app/Api/V1/Requests/RuleStoreRequest.php | 60 ++--- app/Api/V1/Requests/RuleTestRequest.php | 50 ++-- app/Api/V1/Requests/RuleTriggerRequest.php | 26 +- app/Api/V1/Requests/RuleUpdateRequest.php | 16 +- .../V1/Requests/TransactionStoreRequest.php | 2 +- .../V1/Requests/TransactionUpdateRequest.php | 2 +- .../Controllers/Report/BudgetController.php | 8 +- .../Controllers/Report/CategoryController.php | 246 +++++++++--------- .../Controllers/Report/DoubleController.php | 32 +-- .../Report/OperationsController.php | 13 +- app/Http/Controllers/Report/TagController.php | 8 +- .../Budget/AvailableBudgetRepository.php | 1 + .../AvailableBudgetRepositoryInterface.php | 53 ++-- app/Support/Amount.php | 3 +- app/Support/Preferences.php | 20 +- app/TransactionRules/Engine/RuleEngine.php | 3 +- .../AvailableBudgetControllerTest.php | 33 ++- .../V1/Controllers/BudgetControllerTest.php | 14 +- .../Controllers/BudgetLimitControllerTest.php | 19 +- .../Chart/AvailableBudgetControllerTest.php | 24 +- .../V1/Controllers/SummaryControllerTest.php | 193 +++++++------- 60 files changed, 812 insertions(+), 1191 deletions(-) diff --git a/app/Api/V1/Controllers/AboutController.php b/app/Api/V1/Controllers/AboutController.php index 447e187369..8fafcef51a 100644 --- a/app/Api/V1/Controllers/AboutController.php +++ b/app/Api/V1/Controllers/AboutController.php @@ -27,13 +27,11 @@ namespace FireflyIII\Api\V1\Controllers; use DB; use FireflyIII\Transformers\UserTransformer; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; -use League\Fractal\Manager; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Returns basic information about this installation. + * * @codeCoverageIgnore * Class AboutController. */ @@ -68,14 +66,11 @@ class AboutController extends Controller /** * Returns information about the user. * - * @param Request $request * @return JsonResponse */ - public function user(Request $request): JsonResponse + public function user(): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); diff --git a/app/Api/V1/Controllers/AccountController.php b/app/Api/V1/Controllers/AccountController.php index 9b5d947da7..2e498e8ee5 100644 --- a/app/Api/V1/Controllers/AccountController.php +++ b/app/Api/V1/Controllers/AccountController.php @@ -38,11 +38,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class AccountController. @@ -100,12 +98,8 @@ class AccountController extends Controller */ public function index(Request $request): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - - // read type from URI - $type = $request->get('type') ?? 'all'; + $manager = $this->getManager(); + $type = $request->get('type') ?? 'all'; $this->parameters->set('type', $type); // types to get, page size: @@ -121,8 +115,6 @@ class AccountController extends Controller $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.accounts.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); @@ -138,18 +130,16 @@ class AccountController extends Controller /** * List all piggies. * - * @param Request $request * @param Account $account * + * @return JsonResponse * @codeCoverageIgnore * - * @return JsonResponse */ - public function piggyBanks(Request $request, Account $account): JsonResponse + public function piggyBanks(Account $account): JsonResponse { // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -163,9 +153,6 @@ class AccountController extends Controller $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.accounts.piggy_banks', [$account->id]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); @@ -180,16 +167,13 @@ class AccountController extends Controller /** * Show single instance. * - * @param Request $request * @param Account $account * * @return JsonResponse */ - public function show(Request $request, Account $account): JsonResponse + public function show(Account $account): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); @@ -210,9 +194,7 @@ class AccountController extends Controller { $data = $request->getAllAccountData(); $account = $this->repository->store($data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); @@ -247,9 +229,7 @@ class AccountController extends Controller } $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -292,9 +272,7 @@ class AccountController extends Controller $data = $request->getUpdateData(); $data['type'] = config('firefly.shortNamesByFullName.' . $account->accountType->type); $this->repository->update($account, $data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); diff --git a/app/Api/V1/Controllers/AttachmentController.php b/app/Api/V1/Controllers/AttachmentController.php index 9d0a1e0edf..72237b24c0 100644 --- a/app/Api/V1/Controllers/AttachmentController.php +++ b/app/Api/V1/Controllers/AttachmentController.php @@ -35,11 +35,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response as LaravelResponse; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; use function strlen; /** @@ -53,6 +51,7 @@ class AttachmentController extends Controller /** * AccountController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -72,7 +71,9 @@ class AttachmentController extends Controller /** * Remove the specified resource from storage. + * * @codeCoverageIgnore + * * @param Attachment $attachment * * @return JsonResponse @@ -88,6 +89,7 @@ class AttachmentController extends Controller * Download an attachment. * * @param Attachment $attachment + * * @codeCoverageIgnore * @return LaravelResponse * @throws FireflyException @@ -122,15 +124,12 @@ class AttachmentController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * @codeCoverageIgnore * @return JsonResponse + * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -144,9 +143,6 @@ class AttachmentController extends Controller $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.attachments.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); @@ -160,16 +156,13 @@ class AttachmentController extends Controller /** * Display the specified resource. * - * @param Request $request * @param Attachment $attachment + * * @return JsonResponse */ - public function show(Request $request, Attachment $attachment): JsonResponse + public function show(Attachment $attachment): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); @@ -191,9 +184,7 @@ class AttachmentController extends Controller { $data = $request->getAll(); $attachment = $this->repository->store($data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); @@ -208,7 +199,7 @@ class AttachmentController extends Controller * Update the specified resource in storage. * * @param AttachmentUpdateRequest $request - * @param Attachment $attachment + * @param Attachment $attachment * * @return JsonResponse */ @@ -216,9 +207,7 @@ class AttachmentController extends Controller { $data = $request->getAll(); $this->repository->update($attachment, $data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); @@ -231,8 +220,10 @@ class AttachmentController extends Controller /** * Upload an attachment. + * * @codeCoverageIgnore - * @param Request $request + * + * @param Request $request * @param Attachment $attachment * * @return JsonResponse diff --git a/app/Api/V1/Controllers/AvailableBudgetController.php b/app/Api/V1/Controllers/AvailableBudgetController.php index 30fbb0cb2e..c9f612c6a0 100644 --- a/app/Api/V1/Controllers/AvailableBudgetController.php +++ b/app/Api/V1/Controllers/AvailableBudgetController.php @@ -32,13 +32,10 @@ use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\AvailableBudgetTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class AvailableBudgetController. @@ -48,8 +45,6 @@ class AvailableBudgetController extends Controller { /** @var AvailableBudgetRepositoryInterface */ private $abRepository; - /** @var BudgetRepositoryInterface The budget repository */ - private $repository; /** * AvailableBudgetController constructor. @@ -63,9 +58,7 @@ class AvailableBudgetController extends Controller function ($request, $next) { /** @var User $user */ $user = auth()->user(); - $this->repository = app(BudgetRepositoryInterface::class); $this->abRepository = app(AvailableBudgetRepositoryInterface::class); - $this->repository->setUser($user); $this->abRepository->setUser($user); return $next($request); @@ -92,16 +85,12 @@ class AvailableBudgetController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -118,9 +107,6 @@ class AvailableBudgetController extends Controller $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.available_budgets.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); $transformer->setParameters($this->parameters); @@ -134,17 +120,14 @@ class AvailableBudgetController extends Controller /** * Display the specified resource. * - * @param Request $request * @param AvailableBudget $availableBudget * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, AvailableBudget $availableBudget): JsonResponse + public function show(AvailableBudget $availableBudget): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); @@ -172,10 +155,9 @@ class AvailableBudgetController extends Controller if (null === $currency) { $currency = app('amount')->getDefaultCurrency(); } - $availableBudget = $this->abRepository->setAvailableBudget($currency, $data['start'], $data['end'], $data['amount']); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $data['currency'] = $currency; + $availableBudget = $this->abRepository->store($data); + $manager = $this->getManager(); /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); @@ -215,9 +197,7 @@ class AvailableBudgetController extends Controller $this->abRepository->updateAvailableBudget($availableBudget, $data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); diff --git a/app/Api/V1/Controllers/BillController.php b/app/Api/V1/Controllers/BillController.php index 4988856d20..7398e86c16 100644 --- a/app/Api/V1/Controllers/BillController.php +++ b/app/Api/V1/Controllers/BillController.php @@ -38,11 +38,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class BillController. @@ -79,18 +77,14 @@ class BillController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * @param Bill $bill + * @param Bill $bill * * @return JsonResponse * @codeCoverageIgnore */ - public function attachments(Request $request, Bill $bill): JsonResponse + public function attachments(Bill $bill): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $collection = $this->repository->getAttachments($bill); @@ -101,9 +95,6 @@ class BillController extends Controller $paginator = new LengthAwarePaginator($attachments, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.bills.attachments', [$bill->id]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var AttachmentTransformer $transformer */ $transformer = app(AttachmentTransformer::class); $transformer->setParameters($this->parameters); @@ -132,18 +123,13 @@ class BillController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - $bills = $this->repository->getBills(); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $bills = $this->repository->getBills(); + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $count = $bills->count(); $bills = $bills->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); @@ -162,17 +148,14 @@ class BillController extends Controller /** * List all of them. * - * @param Request $request - * @param Bill $bill + * @param Bill $bill * * @return JsonResponse * @codeCoverageIgnore */ - public function rules(Request $request, Bill $bill): JsonResponse + public function rules(Bill $bill): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -186,9 +169,6 @@ class BillController extends Controller $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.bills.rules', [$bill->id]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -204,18 +184,14 @@ class BillController extends Controller /** * Show the specified bill. * - * @param Request $request - * @param Bill $bill + * @param Bill $bill * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Bill $bill): JsonResponse + public function show(Bill $bill): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); @@ -237,9 +213,7 @@ class BillController extends Controller { $bill = $this->repository->store($request->getAll()); if (null !== $bill) { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); @@ -270,9 +244,7 @@ class BillController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -325,9 +297,7 @@ class BillController extends Controller { $data = $request->getAll(); $bill = $this->repository->update($bill, $data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); diff --git a/app/Api/V1/Controllers/BudgetController.php b/app/Api/V1/Controllers/BudgetController.php index 2577c6e5b3..11bcbb3afd 100644 --- a/app/Api/V1/Controllers/BudgetController.php +++ b/app/Api/V1/Controllers/BudgetController.php @@ -39,11 +39,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class BudgetController. @@ -83,16 +81,14 @@ class BudgetController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * @param Budget $budget + * @param Budget $budget * * @return JsonResponse * @codeCoverageIgnore */ - public function budgetLimits(Request $request, Budget $budget): JsonResponse + public function budgetLimits(Budget $budget): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $this->parameters->set('budget_id', $budget->id); $collection = $this->blRepository->getBudgetLimits($budget, $this->parameters->get('start'), $this->parameters->get('end')); @@ -101,8 +97,6 @@ class BudgetController extends Controller $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.budgets.budget_limits', [$budget->id]) . $this->buildParams()); - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); @@ -132,16 +126,12 @@ class BudgetController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -155,9 +145,6 @@ class BudgetController extends Controller $paginator = new LengthAwarePaginator($budgets, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.budgets.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); $transformer->setParameters($this->parameters); @@ -171,17 +158,14 @@ class BudgetController extends Controller /** * Show a budget. * - * @param Request $request - * @param Budget $budget + * @param Budget $budget * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Budget $budget): JsonResponse + public function show(Budget $budget): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); @@ -205,9 +189,7 @@ class BudgetController extends Controller { $budget = $this->repository->store($request->getAll()); if (null !== $budget) { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); @@ -234,9 +216,7 @@ class BudgetController extends Controller $data = $request->getAll(); $data['budget'] = $budget; $budgetLimit = $this->blRepository->storeBudgetLimit($data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); @@ -271,9 +251,7 @@ class BudgetController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -325,9 +303,7 @@ class BudgetController extends Controller { $data = $request->getAll(); $budget = $this->repository->update($budget, $data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetTransformer $transformer */ $transformer = app(BudgetTransformer::class); diff --git a/app/Api/V1/Controllers/BudgetLimitController.php b/app/Api/V1/Controllers/BudgetLimitController.php index 7c14d92421..763d441cd1 100644 --- a/app/Api/V1/Controllers/BudgetLimitController.php +++ b/app/Api/V1/Controllers/BudgetLimitController.php @@ -38,11 +38,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class BudgetLimitController. @@ -51,12 +49,10 @@ use League\Fractal\Serializer\JsonApiSerializer; class BudgetLimitController extends Controller { use TransactionFilter; - /** @var BudgetRepositoryInterface The budget repository */ - private $repository; - /** @var BudgetLimitRepositoryInterface */ private $blRepository; - + /** @var BudgetRepositoryInterface The budget repository */ + private $repository; /** * BudgetLimitController constructor. @@ -69,8 +65,8 @@ class BudgetLimitController extends Controller $this->middleware( function ($request, $next) { /** @var User $user */ - $user = auth()->user(); - $this->repository = app(BudgetRepositoryInterface::class); + $user = auth()->user(); + $this->repository = app(BudgetRepositoryInterface::class); $this->blRepository = app(BudgetLimitRepositoryInterface::class); $this->repository->setUser($user); $this->blRepository->setUser($user); @@ -105,8 +101,7 @@ class BudgetLimitController extends Controller */ public function index(Request $request): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $budgetId = (int)($request->get('budget_id') ?? 0); $budget = $this->repository->findNull($budgetId); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -125,8 +120,6 @@ class BudgetLimitController extends Controller $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.budget_limits.index') . $this->buildParams()); - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); @@ -140,17 +133,14 @@ class BudgetLimitController extends Controller /** * Display the specified resource. * - * @param Request $request * @param BudgetLimit $budgetLimit * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, BudgetLimit $budgetLimit): JsonResponse + public function show(BudgetLimit $budgetLimit): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); @@ -179,9 +169,7 @@ class BudgetLimitController extends Controller } $data['budget'] = $budget; $budgetLimit = $this->blRepository->storeBudgetLimit($data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); @@ -195,7 +183,7 @@ class BudgetLimitController extends Controller /** * Show all transactions. * - * @param Request $request + * @param Request $request * @param BudgetLimit $budgetLimit * * @return JsonResponse @@ -208,9 +196,7 @@ class BudgetLimitController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -251,7 +237,7 @@ class BudgetLimitController extends Controller * Update the specified resource in storage. * * @param BudgetLimitRequest $request - * @param BudgetLimit $budgetLimit + * @param BudgetLimit $budgetLimit * * @return JsonResponse */ @@ -260,9 +246,7 @@ class BudgetLimitController extends Controller $data = $request->getAll(); $data['budget'] = $budgetLimit->budget; $budgetLimit = $this->blRepository->updateBudgetLimit($budgetLimit, $data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); diff --git a/app/Api/V1/Controllers/CategoryController.php b/app/Api/V1/Controllers/CategoryController.php index 6270c6eaf3..781296b471 100644 --- a/app/Api/V1/Controllers/CategoryController.php +++ b/app/Api/V1/Controllers/CategoryController.php @@ -35,11 +35,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class CategoryController. @@ -91,16 +89,12 @@ class CategoryController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -114,9 +108,6 @@ class CategoryController extends Controller $paginator = new LengthAwarePaginator($categories, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.categories.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); $transformer->setParameters($this->parameters); @@ -132,17 +123,14 @@ class CategoryController extends Controller /** * Show the category. * - * @param Request $request * @param Category $category * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Category $category): JsonResponse + public function show(Category $category): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); @@ -165,9 +153,7 @@ class CategoryController extends Controller { $category = $this->repository->store($request->getAll()); if (null !== $category) { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); @@ -183,7 +169,7 @@ class CategoryController extends Controller /** * Show all transactions. * - * @param Request $request + * @param Request $request * * @param Category $category * @@ -197,9 +183,7 @@ class CategoryController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -242,7 +226,7 @@ class CategoryController extends Controller * Update the category. * * @param CategoryRequest $request - * @param Category $category + * @param Category $category * * @return JsonResponse */ @@ -250,9 +234,7 @@ class CategoryController extends Controller { $data = $request->getAll(); $category = $this->repository->update($category, $data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var CategoryTransformer $transformer */ $transformer = app(CategoryTransformer::class); diff --git a/app/Api/V1/Controllers/Chart/AccountController.php b/app/Api/V1/Controllers/Chart/AccountController.php index 964e21c3ca..06b1e20563 100644 --- a/app/Api/V1/Controllers/Chart/AccountController.php +++ b/app/Api/V1/Controllers/Chart/AccountController.php @@ -49,6 +49,7 @@ class AccountController extends Controller /** * AccountController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -126,7 +127,7 @@ class AccountController extends Controller // loop all found currencies and build the data array for the chart. /** - * @var int $currencyId + * @var int $currencyId * @var TransactionCurrency $currency */ foreach ($currencies as $currencyId => $currency) { @@ -275,7 +276,7 @@ class AccountController extends Controller // loop all found currencies and build the data array for the chart. /** - * @var int $currencyId + * @var int $currencyId * @var TransactionCurrency $currency */ foreach ($currencies as $currencyId => $currency) { diff --git a/app/Api/V1/Controllers/Chart/CategoryController.php b/app/Api/V1/Controllers/Chart/CategoryController.php index d998cfcd86..20c6d3ada4 100644 --- a/app/Api/V1/Controllers/Chart/CategoryController.php +++ b/app/Api/V1/Controllers/Chart/CategoryController.php @@ -189,8 +189,8 @@ class CategoryController extends Controller $oldSet = $set['entries']; $newSet = []; foreach ($categories as $category) { - $value = $oldSet[$category] ?? '0'; - $value = -1 === bccomp($value, '0') ? bcmul($value, '-1') : $value; + $value = $oldSet[$category] ?? '0'; + $value = -1 === bccomp($value, '0') ? bcmul($value, '-1') : $value; $newSet[$category] = $value; } $tempData[$index]['entries'] = $newSet; diff --git a/app/Api/V1/Controllers/ConfigurationController.php b/app/Api/V1/Controllers/ConfigurationController.php index 972abdd6cd..ab80d04ba9 100644 --- a/app/Api/V1/Controllers/ConfigurationController.php +++ b/app/Api/V1/Controllers/ConfigurationController.php @@ -32,6 +32,7 @@ use Illuminate\Http\JsonResponse; /** * Class ConfigurationController. + * * @codeCoverageIgnore */ class ConfigurationController extends Controller @@ -80,7 +81,7 @@ class ConfigurationController extends Controller * Update the configuration. * * @param ConfigurationRequest $request - * @param string $name + * @param string $name * * @return JsonResponse */ diff --git a/app/Api/V1/Controllers/Controller.php b/app/Api/V1/Controllers/Controller.php index d650b95ae4..82ae2c214d 100644 --- a/app/Api/V1/Controllers/Controller.php +++ b/app/Api/V1/Controllers/Controller.php @@ -30,6 +30,8 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; +use League\Fractal\Manager; +use League\Fractal\Serializer\JsonApiSerializer; use Log; use Symfony\Component\HttpFoundation\ParameterBag; @@ -81,6 +83,19 @@ class Controller extends BaseController return $return; } + /** + * @return Manager + */ + protected function getManager(): Manager + { + // create some objects: + $manager = new Manager; + $baseUrl = request()->getSchemeAndHttpHost() . '/api/v1'; + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + + return $manager; + } + /** * Method to grab all parameters from the URI. * diff --git a/app/Api/V1/Controllers/CurrencyController.php b/app/Api/V1/Controllers/CurrencyController.php index 42257e4b64..9d4f94e8f6 100644 --- a/app/Api/V1/Controllers/CurrencyController.php +++ b/app/Api/V1/Controllers/CurrencyController.php @@ -58,11 +58,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class CurrencyController. @@ -110,9 +108,7 @@ class CurrencyController extends Controller */ public function accounts(Request $request, TransactionCurrency $currency): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // read type from URI $type = $request->get('type') ?? 'all'; @@ -143,9 +139,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.accounts', [$currency->code]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var AccountTransformer $transformer */ $transformer = app(AccountTransformer::class); $transformer->setParameters($this->parameters); @@ -160,22 +153,17 @@ class CurrencyController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function availableBudgets(Request $request, TransactionCurrency $currency): JsonResponse + public function availableBudgets(TransactionCurrency $currency): JsonResponse { /** @var User $admin */ $admin = auth()->user(); - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -197,9 +185,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($availableBudgets, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.available_budgets', [$currency->code]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var AvailableBudgetTransformer $transformer */ $transformer = app(AvailableBudgetTransformer::class); $transformer->setParameters($this->parameters); @@ -213,17 +198,14 @@ class CurrencyController extends Controller /** * List all bills * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function bills(Request $request, TransactionCurrency $currency): JsonResponse + public function bills(TransactionCurrency $currency): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); /** @var BillRepositoryInterface $repository */ $repository = app(BillRepositoryInterface::class); @@ -243,9 +225,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($bills, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.bills', [$currency->code]) . $this->buildParams()); - - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var BillTransformer $transformer */ $transformer = app(BillTransformer::class); $transformer->setParameters($this->parameters); @@ -259,20 +238,17 @@ class CurrencyController extends Controller /** * List all budget limits * - * @param Request $request - * * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function budgetLimits(Request $request, TransactionCurrency $currency): JsonResponse + public function budgetLimits(TransactionCurrency $currency): JsonResponse { /** @var BudgetLimitRepositoryInterface $blRepository */ $blRepository = app(BudgetLimitRepositoryInterface::class); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $collection = $blRepository->getAllBudgetLimitsByCurrency($currency, $this->parameters->get('start'), $this->parameters->get('end')); $count = $collection->count(); @@ -280,8 +256,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($budgetLimits, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.budget_limits', [$currency->code]) . $this->buildParams()); - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var BudgetLimitTransformer $transformer */ $transformer = app(BudgetLimitTransformer::class); $transformer->setParameters($this->parameters); @@ -295,20 +269,17 @@ class CurrencyController extends Controller /** * Show a list of known exchange rates * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function cer(Request $request, TransactionCurrency $currency): JsonResponse + public function cer(TransactionCurrency $currency): JsonResponse { // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $collection = $this->repository->getExchangeRates($currency); - $manager->setSerializer(new JsonApiSerializer($baseUrl)); $count = $collection->count(); @@ -316,8 +287,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($exchangeRates, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.cer', [$currency->code]) . $this->buildParams()); - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var CurrencyExchangeRateTransformer $transformer */ $transformer = app(CurrencyExchangeRateTransformer::class); $transformer->setParameters($this->parameters); @@ -357,22 +326,19 @@ class CurrencyController extends Controller /** * Disable a currency. * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function disable(Request $request, TransactionCurrency $currency): JsonResponse + public function disable(TransactionCurrency $currency): JsonResponse { // must be unused. if ($this->repository->currencyInUse($currency)) { return response()->json([], 409); } $this->repository->disable($currency); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); @@ -390,18 +356,15 @@ class CurrencyController extends Controller /** * Enable a currency. * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function enable(Request $request, TransactionCurrency $currency): JsonResponse + public function enable(TransactionCurrency $currency): JsonResponse { $this->repository->enable($currency); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); @@ -419,12 +382,10 @@ class CurrencyController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $collection = $this->repository->getAll(); @@ -435,9 +396,7 @@ class CurrencyController extends Controller $paginator->setPath(route('api.v1.currencies.index') . $this->buildParams()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); @@ -454,22 +413,19 @@ class CurrencyController extends Controller /** * Make the currency a default currency. * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function makeDefault(Request $request, TransactionCurrency $currency): JsonResponse + public function makeDefault(TransactionCurrency $currency): JsonResponse { $this->repository->enable($currency); app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $this->parameters->set('defaultCurrency', $currency); @@ -486,19 +442,14 @@ class CurrencyController extends Controller /** * List all recurring transactions. * - * @param Request $request - * * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function recurrences(Request $request, TransactionCurrency $currency): JsonResponse + public function recurrences(TransactionCurrency $currency): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -529,9 +480,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.currencies.recurrences', [$currency->code]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); @@ -546,16 +494,14 @@ class CurrencyController extends Controller /** * List all of them. * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function rules(Request $request, TransactionCurrency $currency): JsonResponse + public function rules(TransactionCurrency $currency): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; // get list of budgets. Count it and split it. @@ -583,9 +529,6 @@ class CurrencyController extends Controller $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -600,17 +543,14 @@ class CurrencyController extends Controller /** * Show a currency. * - * @param Request $request * @param TransactionCurrency $currency * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, TransactionCurrency $currency): JsonResponse + public function show(TransactionCurrency $currency): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); @@ -640,9 +580,7 @@ class CurrencyController extends Controller app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); } - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); @@ -675,9 +613,7 @@ class CurrencyController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -734,9 +670,7 @@ class CurrencyController extends Controller app('preferences')->mark(); } - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user()); $this->parameters->set('defaultCurrency', $defaultCurrency); diff --git a/app/Api/V1/Controllers/CurrencyExchangeRateController.php b/app/Api/V1/Controllers/CurrencyExchangeRateController.php index 25ddc71b32..7ea8ee6230 100644 --- a/app/Api/V1/Controllers/CurrencyExchangeRateController.php +++ b/app/Api/V1/Controllers/CurrencyExchangeRateController.php @@ -31,12 +31,11 @@ use FireflyIII\Transformers\CurrencyExchangeRateTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use League\Fractal\Manager; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class CurrencyExchangeRateController + * * @codeCoverageIgnore */ class CurrencyExchangeRateController extends Controller @@ -75,11 +74,7 @@ class CurrencyExchangeRateController extends Controller */ public function index(Request $request): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); $fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR'); $toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD'); diff --git a/app/Api/V1/Controllers/ImportController.php b/app/Api/V1/Controllers/ImportController.php index 302136d7b0..b60e0c0d80 100644 --- a/app/Api/V1/Controllers/ImportController.php +++ b/app/Api/V1/Controllers/ImportController.php @@ -34,11 +34,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class ImportController @@ -51,6 +49,7 @@ class ImportController extends Controller /** * ImportController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -69,16 +68,13 @@ class ImportController extends Controller } /** - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function listAll(Request $request): JsonResponse + public function listAll(): JsonResponse { // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; // get list of accounts. Count it and split it. @@ -90,9 +86,6 @@ class ImportController extends Controller $paginator = new LengthAwarePaginator($importJobs, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.import.list') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var ImportJobTransformer $transformer */ $transformer = app(ImportJobTransformer::class); $transformer->setParameters($this->parameters); @@ -104,18 +97,14 @@ class ImportController extends Controller } /** - * @param Request $request * @param ImportJob $importJob * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, ImportJob $importJob): JsonResponse + public function show(ImportJob $importJob): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var ImportJobTransformer $transformer */ $transformer = app(ImportJobTransformer::class); $transformer->setParameters($this->parameters); @@ -128,7 +117,7 @@ class ImportController extends Controller /** * Show all transactions * - * @param Request $request + * @param Request $request * @param ImportJob $importJob * * @return JsonResponse @@ -141,9 +130,7 @@ class ImportController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $tag = $importJob->tag; $transactions = new Collection(); diff --git a/app/Api/V1/Controllers/LinkTypeController.php b/app/Api/V1/Controllers/LinkTypeController.php index 8d9f915f98..b0252b6693 100644 --- a/app/Api/V1/Controllers/LinkTypeController.php +++ b/app/Api/V1/Controllers/LinkTypeController.php @@ -36,11 +36,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class LinkTypeController. @@ -98,16 +96,13 @@ class LinkTypeController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; // get list of accounts. Count it and split it. @@ -119,9 +114,6 @@ class LinkTypeController extends Controller $paginator = new LengthAwarePaginator($linkTypes, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.link_types.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); @@ -136,17 +128,14 @@ class LinkTypeController extends Controller /** * List single resource. * - * @param Request $request * @param LinkType $linkType * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, LinkType $linkType): JsonResponse + public function show(LinkType $linkType): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); @@ -176,9 +165,7 @@ class LinkTypeController extends Controller $data = $request->getAll(); // if currency ID is 0, find the currency by the code: $linkType = $this->repository->store($data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); @@ -192,7 +179,7 @@ class LinkTypeController extends Controller /** * Delete the resource. * - * @param Request $request + * @param Request $request * @param LinkType $linkType * * @return JsonResponse @@ -205,9 +192,7 @@ class LinkTypeController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); // whatever is returned by the query, it must be part of these journals: $journalIds = $this->repository->getJournalIds($linkType); @@ -254,7 +239,7 @@ class LinkTypeController extends Controller * Update object. * * @param LinkTypeRequest $request - * @param LinkType $linkType + * @param LinkType $linkType * * @return JsonResponse * @throws FireflyException @@ -274,10 +259,7 @@ class LinkTypeController extends Controller $data = $request->getAll(); $this->repository->update($linkType, $data); - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var LinkTypeTransformer $transformer */ $transformer = app(LinkTypeTransformer::class); $transformer->setParameters($this->parameters); diff --git a/app/Api/V1/Controllers/PiggyBankController.php b/app/Api/V1/Controllers/PiggyBankController.php index 7ad2d8a6e5..474cb5db38 100644 --- a/app/Api/V1/Controllers/PiggyBankController.php +++ b/app/Api/V1/Controllers/PiggyBankController.php @@ -31,13 +31,10 @@ use FireflyIII\Transformers\PiggyBankEventTransformer; use FireflyIII\Transformers\PiggyBankTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class PiggyBankController. @@ -89,17 +86,12 @@ class PiggyBankController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -112,9 +104,6 @@ class PiggyBankController extends Controller $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.piggy_banks.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); @@ -129,19 +118,16 @@ class PiggyBankController extends Controller /** * List single resource. * - * @param Request $request * @param PiggyBank $piggyBank * * @return JsonResponse * @codeCoverageIgnore */ - public function piggyBankEvents(Request $request, PiggyBank $piggyBank): JsonResponse + public function piggyBankEvents(PiggyBank $piggyBank): JsonResponse { // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $collection = $this->repository->getEvents($piggyBank); $count = $collection->count(); @@ -165,17 +151,14 @@ class PiggyBankController extends Controller /** * List single resource. * - * @param Request $request * @param PiggyBank $piggyBank * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, PiggyBank $piggyBank): JsonResponse + public function show(PiggyBank $piggyBank): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); @@ -199,9 +182,7 @@ class PiggyBankController extends Controller { $piggyBank = $this->repository->store($request->getAll()); if (null !== $piggyBank) { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); @@ -219,7 +200,7 @@ class PiggyBankController extends Controller * Update piggy bank. * * @param PiggyBankRequest $request - * @param PiggyBank $piggyBank + * @param PiggyBank $piggyBank * * @return JsonResponse */ @@ -233,10 +214,7 @@ class PiggyBankController extends Controller } - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var PiggyBankTransformer $transformer */ $transformer = app(PiggyBankTransformer::class); $transformer->setParameters($this->parameters); diff --git a/app/Api/V1/Controllers/PreferenceController.php b/app/Api/V1/Controllers/PreferenceController.php index 1dc807e410..fa10f4d1aa 100644 --- a/app/Api/V1/Controllers/PreferenceController.php +++ b/app/Api/V1/Controllers/PreferenceController.php @@ -30,12 +30,9 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Transformers\PreferenceTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * @@ -76,12 +73,10 @@ class PreferenceController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { /** @var User $user */ $user = auth()->user(); @@ -99,12 +94,7 @@ class PreferenceController extends Controller } } - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); @@ -119,20 +109,14 @@ class PreferenceController extends Controller /** * Return a single preference by name. * - * @param Request $request * @param Preference $preference * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Preference $preference): JsonResponse + public function show(Preference $preference): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); @@ -146,7 +130,7 @@ class PreferenceController extends Controller * Update a preference. * * @param PreferenceRequest $request - * @param Preference $preference + * @param Preference $preference * * @return JsonResponse */ @@ -171,12 +155,7 @@ class PreferenceController extends Controller } $result = app('preferences')->set($preference->name, $newValue); - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var PreferenceTransformer $transformer */ $transformer = app(PreferenceTransformer::class); $transformer->setParameters($this->parameters); diff --git a/app/Api/V1/Controllers/RecurrenceController.php b/app/Api/V1/Controllers/RecurrenceController.php index 397da14706..aa6a123e3b 100644 --- a/app/Api/V1/Controllers/RecurrenceController.php +++ b/app/Api/V1/Controllers/RecurrenceController.php @@ -37,11 +37,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; use Log; /** @@ -93,16 +91,12 @@ class RecurrenceController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -116,9 +110,6 @@ class RecurrenceController extends Controller $paginator = new LengthAwarePaginator($piggyBanks, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.recurrences.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); @@ -133,17 +124,14 @@ class RecurrenceController extends Controller /** * List single resource. * - * @param Request $request * @param Recurrence $recurrence * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Recurrence $recurrence): JsonResponse + public function show(Recurrence $recurrence): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); @@ -162,14 +150,13 @@ class RecurrenceController extends Controller * @param RecurrenceStoreRequest $request * * @return JsonResponse + * @throws FireflyException */ public function store(RecurrenceStoreRequest $request): JsonResponse { $data = $request->getAll(); $recurrence = $this->repository->store($data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); @@ -196,10 +183,7 @@ class RecurrenceController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); // whatever is returned by the query, it must be part of these journals: $journalIds = $this->repository->getJournalIds($recurrence); @@ -276,9 +260,8 @@ class RecurrenceController extends Controller { $data = $request->getAll(); $category = $this->repository->update($recurrence, $data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); + /** @var RecurrenceTransformer $transformer */ $transformer = app(RecurrenceTransformer::class); $transformer->setParameters($this->parameters); diff --git a/app/Api/V1/Controllers/RuleController.php b/app/Api/V1/Controllers/RuleController.php index 50493083cc..b3a435680e 100644 --- a/app/Api/V1/Controllers/RuleController.php +++ b/app/Api/V1/Controllers/RuleController.php @@ -23,7 +23,6 @@ declare(strict_types=1); namespace FireflyIII\Api\V1\Controllers; -use FireflyIII\Api\V1\Requests\RuleRequest; use FireflyIII\Api\V1\Requests\RuleStoreRequest; use FireflyIII\Api\V1\Requests\RuleTestRequest; use FireflyIII\Api\V1\Requests\RuleTriggerRequest; @@ -39,13 +38,10 @@ use FireflyIII\Transformers\RuleTransformer; use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; use Log; /** @@ -101,16 +97,12 @@ class RuleController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -124,9 +116,6 @@ class RuleController extends Controller $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.rules.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -139,18 +128,15 @@ class RuleController extends Controller } /** - * @param Request $request - * @param Rule $rule + * @param Rule $rule * * @return JsonResponse */ - public function moveDown(Request $request, Rule $rule): JsonResponse + public function moveDown(Rule $rule): JsonResponse { $this->ruleRepository->moveDown($rule); $rule = $this->ruleRepository->find($rule->id); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); @@ -163,18 +149,15 @@ class RuleController extends Controller } /** - * @param Request $request - * @param Rule $rule + * @param Rule $rule * * @return JsonResponse */ - public function moveUp(Request $request, Rule $rule): JsonResponse + public function moveUp(Rule $rule): JsonResponse { $this->ruleRepository->moveUp($rule); $rule = $this->ruleRepository->find($rule->id); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); @@ -189,18 +172,14 @@ class RuleController extends Controller /** * List single resource. * - * @param Request $request - * @param Rule $rule + * @param Rule $rule * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Rule $rule): JsonResponse + public function show(Rule $rule): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -221,10 +200,7 @@ class RuleController extends Controller public function store(RuleStoreRequest $request): JsonResponse { $rule = $this->ruleRepository->store($request->getAll()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -264,10 +240,7 @@ class RuleController extends Controller $paginator->setPath(route('api.v1.rules.test', [$rule->id]) . $this->buildParams()); // resulting list is presented as JSON thing. - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var TransactionGroupTransformer $transformer */ $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); @@ -326,12 +299,9 @@ class RuleController extends Controller */ public function update(RuleUpdateRequest $request, Rule $rule): JsonResponse { - $data = $request->getAll(); - $rule = $this->ruleRepository->update($rule, $data); - - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $data = $request->getAll(); + $rule = $this->ruleRepository->update($rule, $data); + $manager = $this->getManager(); /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); diff --git a/app/Api/V1/Controllers/RuleGroupController.php b/app/Api/V1/Controllers/RuleGroupController.php index 34db80ebb3..59e5a699e8 100644 --- a/app/Api/V1/Controllers/RuleGroupController.php +++ b/app/Api/V1/Controllers/RuleGroupController.php @@ -40,14 +40,11 @@ use FireflyIII\Transformers\RuleTransformer; use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; use Log; /** @@ -62,6 +59,7 @@ class RuleGroupController extends Controller /** * RuleGroupController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -101,17 +99,12 @@ class RuleGroupController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -124,9 +117,6 @@ class RuleGroupController extends Controller $paginator = new LengthAwarePaginator($ruleGroups, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.rule_groups.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); @@ -138,18 +128,54 @@ class RuleGroupController extends Controller } /** - * @param Request $request + * @param RuleGroup $ruleGroup + * + * @return JsonResponse + */ + public function moveDown(RuleGroup $ruleGroup): JsonResponse + { + $this->ruleGroupRepository->moveDown($ruleGroup); + $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); + $manager = $this->getManager(); + + /** @var RuleGroupTransformer $transformer */ + $transformer = app(RuleGroupTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + } + + /** + * @param RuleGroup $ruleGroup + * + * @return JsonResponse + */ + public function moveUp(RuleGroup $ruleGroup): JsonResponse + { + $this->ruleGroupRepository->moveUp($ruleGroup); + $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); + $manager = $this->getManager(); + + /** @var RuleGroupTransformer $transformer */ + $transformer = app(RuleGroupTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + } + + /** * @param RuleGroup $group * * @return JsonResponse * @codeCoverageIgnore */ - public function rules(Request $request, RuleGroup $group): JsonResponse + public function rules(RuleGroup $group): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -162,9 +188,6 @@ class RuleGroupController extends Controller $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.rule_groups.rules', [$group->id]) . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var RuleTransformer $transformer */ $transformer = app(RuleTransformer::class); $transformer->setParameters($this->parameters); @@ -179,18 +202,14 @@ class RuleGroupController extends Controller /** * List single resource. * - * @param Request $request * @param RuleGroup $ruleGroup * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, RuleGroup $ruleGroup): JsonResponse + public function show(RuleGroup $ruleGroup): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); $transformer->setParameters($this->parameters); @@ -211,9 +230,7 @@ class RuleGroupController extends Controller public function store(RuleGroupRequest $request): JsonResponse { $ruleGroup = $this->ruleGroupRepository->store($request->getAll()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); @@ -227,7 +244,7 @@ class RuleGroupController extends Controller /** * @param RuleGroupTestRequest $request - * @param RuleGroup $group + * @param RuleGroup $group * * @return JsonResponse * @throws FireflyException @@ -272,11 +289,7 @@ class RuleGroupController extends Controller $paginator = new LengthAwarePaginator($transactions, $count, $pageSize, $parameters['page']); $paginator->setPath(route('api.v1.rule_groups.test', [$group->id]) . $this->buildParams()); - // resulting list is presented as JSON thing. - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); $transformer = app(TransactionGroupTransformer::class); $transformer->setParameters($this->parameters); @@ -290,7 +303,7 @@ class RuleGroupController extends Controller * Execute the given rule group on a set of existing transactions. * * @param RuleGroupTriggerRequest $request - * @param RuleGroup $group + * @param RuleGroup $group * * @return JsonResponse * @throws Exception @@ -334,60 +347,14 @@ class RuleGroupController extends Controller * Update a rule group. * * @param RuleGroupRequest $request - * @param RuleGroup $ruleGroup + * @param RuleGroup $ruleGroup * * @return JsonResponse */ public function update(RuleGroupRequest $request, RuleGroup $ruleGroup): JsonResponse { $ruleGroup = $this->ruleGroupRepository->update($ruleGroup, $request->getAll()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - - /** @var RuleGroupTransformer $transformer */ - $transformer = app(RuleGroupTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($ruleGroup, $transformer, 'rule_groups'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); - } - - /** - * @param Request $request - * @param RuleGroup $ruleGroup - * @return JsonResponse - */ - public function moveDown(Request $request, RuleGroup $ruleGroup): JsonResponse - { - $this->ruleGroupRepository->moveDown($ruleGroup); - $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - - /** @var RuleGroupTransformer $transformer */ - $transformer = app(RuleGroupTransformer::class); - $transformer->setParameters($this->parameters); - - $resource = new Item($ruleGroup, $transformer, 'rule_groups'); - - return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); - } - - /** - * @param Request $request - * @param RuleGroup $ruleGroup - * @return JsonResponse - */ - public function moveUp(Request $request, RuleGroup $ruleGroup): JsonResponse - { - $this->ruleGroupRepository->moveUp($ruleGroup); - $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var RuleGroupTransformer $transformer */ $transformer = app(RuleGroupTransformer::class); diff --git a/app/Api/V1/Controllers/SummaryController.php b/app/Api/V1/Controllers/SummaryController.php index 622dd6ad57..a3e1042539 100644 --- a/app/Api/V1/Controllers/SummaryController.php +++ b/app/Api/V1/Controllers/SummaryController.php @@ -80,7 +80,7 @@ class SummaryController extends Controller $this->budgetRepository = app(BudgetRepositoryInterface::class); $this->accountRepository = app(AccountRepositoryInterface::class); $this->abRepository = app(AvailableBudgetRepositoryInterface::class); - $this->opsRepository = app(OperationsRepositoryInterface::class); + $this->opsRepository = app(OperationsRepositoryInterface::class); $this->billRepository->setUser($user); $this->currencyRepos->setUser($user); diff --git a/app/Api/V1/Controllers/TagController.php b/app/Api/V1/Controllers/TagController.php index 3246337835..37547285d3 100644 --- a/app/Api/V1/Controllers/TagController.php +++ b/app/Api/V1/Controllers/TagController.php @@ -37,11 +37,9 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class TagController @@ -111,17 +109,12 @@ class TagController extends Controller /** * List all of them. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { - // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // types to get, page size: $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; @@ -134,9 +127,6 @@ class TagController extends Controller $paginator = new LengthAwarePaginator($rules, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.tags.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); @@ -150,18 +140,14 @@ class TagController extends Controller /** * List single resource. * - * @param Request $request * @param Tag $tag * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, Tag $tag): JsonResponse + public function show(Tag $tag): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); @@ -182,10 +168,7 @@ class TagController extends Controller public function store(TagRequest $request): JsonResponse { $rule = $this->repository->store($request->getAll()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); @@ -199,7 +182,7 @@ class TagController extends Controller * Show all transactions. * * @param Request $request - * @param Tag $tag + * @param Tag $tag * * @return JsonResponse * @codeCoverageIgnore @@ -211,10 +194,7 @@ class TagController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -255,16 +235,14 @@ class TagController extends Controller * Update a rule. * * @param TagRequest $request - * @param Tag $tag + * @param Tag $tag * * @return JsonResponse */ public function update(TagRequest $request, Tag $tag): JsonResponse { $rule = $this->repository->update($tag, $request->getAll()); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var TagTransformer $transformer */ $transformer = app(TagTransformer::class); $transformer->setParameters($this->parameters); @@ -275,10 +253,29 @@ class TagController extends Controller } + /** + * @param array $cloud + * @param float $min + * @param float $max + * + * @return array + */ + private function analyseTagCloud(array $cloud, float $min, float $max): array + { + foreach (array_keys($cloud['tags']) as $index) { + $cloud['tags'][$index]['relative'] = round($cloud['tags'][$index]['size'] / $max, 4); + } + $cloud['min'] = $min; + $cloud['max'] = $max; + + return $cloud; + } + /** * @param Collection $tags - * @param Carbon $start - * @param Carbon $end + * @param Carbon $start + * @param Carbon $end + * * @return array */ private function getTagCloud(Collection $tags, Carbon $start, Carbon $end): array @@ -307,21 +304,4 @@ class TagController extends Controller return $cloud; } - - /** - * @param array $cloud - * @param float $min - * @param float $max - * @return array - */ - private function analyseTagCloud(array $cloud, float $min, float $max): array - { - foreach (array_keys($cloud['tags']) as $index) { - $cloud['tags'][$index]['relative'] = round($cloud['tags'][$index]['size'] / $max, 4); - } - $cloud['min'] = $min; - $cloud['max'] = $max; - - return $cloud; - } } diff --git a/app/Api/V1/Controllers/TransactionController.php b/app/Api/V1/Controllers/TransactionController.php index f30dce2782..28ae3369fe 100644 --- a/app/Api/V1/Controllers/TransactionController.php +++ b/app/Api/V1/Controllers/TransactionController.php @@ -28,7 +28,6 @@ use FireflyIII\Api\V1\Requests\TransactionStoreRequest; use FireflyIII\Api\V1\Requests\TransactionUpdateRequest; use FireflyIII\Events\StoredTransactionGroup; use FireflyIII\Events\UpdatedTransactionGroup; -use FireflyIII\Exceptions\FireflyException; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Models\TransactionGroup; use FireflyIII\Models\TransactionJournal; @@ -42,11 +41,9 @@ use FireflyIII\Transformers\TransactionGroupTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; use Log; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -59,11 +56,10 @@ class TransactionController extends Controller /** @var TransactionGroupRepositoryInterface Group repository. */ private $groupRepository; - /** @var JournalRepositoryInterface The journal repository */ - private $repository; - /** @var JournalAPIRepositoryInterface Journal API repos */ private $journalAPIRepository; + /** @var JournalRepositoryInterface The journal repository */ + private $repository; /** * TransactionController constructor. @@ -91,18 +87,14 @@ class TransactionController extends Controller } /** - * @param Request $request * @param TransactionJournal $transactionJournal * * @return JsonResponse * @codeCoverageIgnore */ - public function attachments(Request $request, TransactionJournal $transactionJournal): JsonResponse + public function attachments(TransactionJournal $transactionJournal): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); $attachments = $this->journalAPIRepository->getAttachments($transactionJournal); /** @var AttachmentTransformer $transformer */ @@ -160,10 +152,7 @@ class TransactionController extends Controller $this->parameters->set('type', $type); $types = $this->mapTransactionTypes($this->parameters->get('type')); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); @@ -200,19 +189,15 @@ class TransactionController extends Controller } /** - * @param Request $request * @param TransactionJournal $transactionJournal * * @return JsonResponse * @codeCoverageIgnore */ - public function piggyBankEvents(Request $request, TransactionJournal $transactionJournal): JsonResponse + public function piggyBankEvents(TransactionJournal $transactionJournal): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - - $events = $this->journalAPIRepository->getPiggyBankEvents($transactionJournal); + $manager = $this->getManager(); + $events = $this->journalAPIRepository->getPiggyBankEvents($transactionJournal); /** @var PiggyBankEventTransformer $transformer */ $transformer = app(PiggyBankEventTransformer::class); @@ -227,18 +212,14 @@ class TransactionController extends Controller /** * Show a single transaction. * - * @param Request $request * @param TransactionGroup $transactionGroup * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, TransactionGroup $transactionGroup): JsonResponse + public function show(TransactionGroup $transactionGroup): JsonResponse { - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); // use new group collector: @@ -269,7 +250,6 @@ class TransactionController extends Controller * @param TransactionStoreRequest $request * * @return JsonResponse - * @throws FireflyException */ public function store(TransactionStoreRequest $request): JsonResponse { @@ -283,10 +263,7 @@ class TransactionController extends Controller event(new StoredTransactionGroup($transactionGroup)); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); /** @var User $admin */ $admin = auth()->user(); // use new group collector: @@ -316,7 +293,7 @@ class TransactionController extends Controller * Update a transaction. * * @param TransactionUpdateRequest $request - * @param TransactionGroup $transactionGroup + * @param TransactionGroup $transactionGroup * * @return JsonResponse */ @@ -325,9 +302,7 @@ class TransactionController extends Controller Log::debug('Now in update routine.'); $data = $request->getAll(); $transactionGroup = $this->groupRepository->update($transactionGroup, $data); - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); event(new UpdatedTransactionGroup($transactionGroup)); diff --git a/app/Api/V1/Controllers/TransactionLinkController.php b/app/Api/V1/Controllers/TransactionLinkController.php index 351dd0f196..2304e283bc 100644 --- a/app/Api/V1/Controllers/TransactionLinkController.php +++ b/app/Api/V1/Controllers/TransactionLinkController.php @@ -34,11 +34,9 @@ use FireflyIII\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** * Class TransactionLinkController @@ -54,6 +52,7 @@ class TransactionLinkController extends Controller /** * TransactionLinkController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -101,9 +100,7 @@ class TransactionLinkController extends Controller public function index(Request $request): JsonResponse { // create some objects: - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - + $manager = $this->getManager(); // read type from URI $name = $request->get('name'); @@ -120,9 +117,6 @@ class TransactionLinkController extends Controller $paginator = new LengthAwarePaginator($journalLinks, $count, $pageSize, $this->parameters->get('page')); $paginator->setPath(route('api.v1.transaction_links.index') . $this->buildParams()); - // present to user. - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - /** @var TransactionLinkTransformer $transformer */ $transformer = app(TransactionLinkTransformer::class); $transformer->setParameters($this->parameters); @@ -137,17 +131,14 @@ class TransactionLinkController extends Controller /** * List single resource. * - * @param Request $request * @param TransactionJournalLink $journalLink * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, TransactionJournalLink $journalLink): JsonResponse + public function show(TransactionJournalLink $journalLink): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); /** @var TransactionLinkTransformer $transformer */ $transformer = app(TransactionLinkTransformer::class); @@ -169,10 +160,7 @@ class TransactionLinkController extends Controller */ public function store(TransactionLinkRequest $request): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); $data = $request->getAll(); $inward = $this->journalRepository->findNull($data['inward_id'] ?? 0); $outward = $this->journalRepository->findNull($data['outward_id'] ?? 0); @@ -203,9 +191,7 @@ class TransactionLinkController extends Controller */ public function update(TransactionLinkRequest $request, TransactionJournalLink $journalLink): JsonResponse { - $manager = new Manager; - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); $data = $request->getAll(); $data['inward'] = $this->journalRepository->findNull($data['inward_id'] ?? 0); $data['outward'] = $this->journalRepository->findNull($data['outward_id'] ?? 0); diff --git a/app/Api/V1/Controllers/UserController.php b/app/Api/V1/Controllers/UserController.php index 2cba83621b..6b0819a38d 100644 --- a/app/Api/V1/Controllers/UserController.php +++ b/app/Api/V1/Controllers/UserController.php @@ -31,13 +31,10 @@ use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Transformers\UserTransformer; use FireflyIII\User; use Illuminate\Http\JsonResponse; -use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection as FractalCollection; use League\Fractal\Resource\Item; -use League\Fractal\Serializer\JsonApiSerializer; /** @@ -52,6 +49,7 @@ class UserController extends Controller /** * UserController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -91,20 +89,14 @@ class UserController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * * @return JsonResponse * @codeCoverageIgnore */ - public function index(Request $request): JsonResponse + public function index(): JsonResponse { // user preferences $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; - - // make manager - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $manager = $this->getManager(); // build collection $collection = $this->repository->all(); @@ -129,19 +121,15 @@ class UserController extends Controller /** * Show a single user. * - * @param Request $request * @param User $user * * @return JsonResponse * @codeCoverageIgnore */ - public function show(Request $request, User $user): JsonResponse + public function show(User $user): JsonResponse { // make manager - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $manager = $this->getManager(); // make resource /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); @@ -161,13 +149,9 @@ class UserController extends Controller */ public function store(UserStoreRequest $request): JsonResponse { - $data = $request->getAll(); - $user = $this->repository->store($data); - - // make manager - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); + $data = $request->getAll(); + $user = $this->repository->store($data); + $manager = $this->getManager(); // make resource @@ -184,20 +168,15 @@ class UserController extends Controller * Update a user. * * @param UserUpdateRequest $request - * @param User $user + * @param User $user * * @return JsonResponse */ public function update(UserUpdateRequest $request, User $user): JsonResponse { - $data = $request->getAll(); - $user = $this->repository->update($user, $data); - - // make manager - $manager = new Manager(); - $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; - $manager->setSerializer(new JsonApiSerializer($baseUrl)); - + $data = $request->getAll(); + $user = $this->repository->update($user, $data); + $manager = $this->getManager(); // make resource /** @var UserTransformer $transformer */ $transformer = app(UserTransformer::class); diff --git a/app/Api/V1/Requests/AccountStoreRequest.php b/app/Api/V1/Requests/AccountStoreRequest.php index ae7b739142..c9941aa564 100644 --- a/app/Api/V1/Requests/AccountStoreRequest.php +++ b/app/Api/V1/Requests/AccountStoreRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean; /** * Class AccountStoreRequest + * * @codeCoverageIgnore */ class AccountStoreRequest extends Request diff --git a/app/Api/V1/Requests/AccountUpdateRequest.php b/app/Api/V1/Requests/AccountUpdateRequest.php index 518f543cc0..36e974b77c 100644 --- a/app/Api/V1/Requests/AccountUpdateRequest.php +++ b/app/Api/V1/Requests/AccountUpdateRequest.php @@ -28,11 +28,23 @@ use FireflyIII\Rules\IsBoolean; /** * Class AccountUpdateRequest + * * @codeCoverageIgnore */ class AccountUpdateRequest extends Request { + /** + * Authorize logged in users. + * + * @return bool + */ + public function authorize(): bool + { + // Only allow authenticated users + return auth()->check(); + } + /** * @return array */ @@ -79,17 +91,6 @@ class AccountUpdateRequest extends Request return $data; } - /** - * Authorize logged in users. - * - * @return bool - */ - public function authorize(): bool - { - // Only allow authenticated users - return auth()->check(); - } - /** * The rules that the incoming request must be matched against. * diff --git a/app/Api/V1/Requests/AttachmentStoreRequest.php b/app/Api/V1/Requests/AttachmentStoreRequest.php index 94884f1e9a..63047134f2 100644 --- a/app/Api/V1/Requests/AttachmentStoreRequest.php +++ b/app/Api/V1/Requests/AttachmentStoreRequest.php @@ -30,6 +30,7 @@ use FireflyIII\Rules\IsValidAttachmentModel; /** * Class AttachmentStoreRequest + * * @codeCoverageIgnore */ class AttachmentStoreRequest extends Request @@ -77,6 +78,7 @@ class AttachmentStoreRequest extends Request ] ); $model = $this->string('model'); + return [ 'filename' => 'required|between:1,255', 'title' => 'between:1,255', diff --git a/app/Api/V1/Requests/BudgetRequest.php b/app/Api/V1/Requests/BudgetRequest.php index b74c955c1c..7fcd6f8149 100644 --- a/app/Api/V1/Requests/BudgetRequest.php +++ b/app/Api/V1/Requests/BudgetRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean; /** * Class BudgetRequest + * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ diff --git a/app/Api/V1/Requests/CategoryRequest.php b/app/Api/V1/Requests/CategoryRequest.php index 7eee63d07f..73357e2ce0 100644 --- a/app/Api/V1/Requests/CategoryRequest.php +++ b/app/Api/V1/Requests/CategoryRequest.php @@ -27,6 +27,7 @@ use FireflyIII\Models\Category; /** * Class CategoryRequest + * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ diff --git a/app/Api/V1/Requests/ConfigurationRequest.php b/app/Api/V1/Requests/ConfigurationRequest.php index 1feeaf1789..f7f020a334 100644 --- a/app/Api/V1/Requests/ConfigurationRequest.php +++ b/app/Api/V1/Requests/ConfigurationRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean; /** * Class ConfigurationRequest + * * @codeCoverageIgnore */ class ConfigurationRequest extends Request diff --git a/app/Api/V1/Requests/CurrencyRequest.php b/app/Api/V1/Requests/CurrencyRequest.php index 7d7dde5c1e..90118bd5ef 100644 --- a/app/Api/V1/Requests/CurrencyRequest.php +++ b/app/Api/V1/Requests/CurrencyRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Rules\IsBoolean; /** * Class CurrencyRequest + * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ diff --git a/app/Api/V1/Requests/LinkTypeRequest.php b/app/Api/V1/Requests/LinkTypeRequest.php index c1f5a8f878..319afada06 100644 --- a/app/Api/V1/Requests/LinkTypeRequest.php +++ b/app/Api/V1/Requests/LinkTypeRequest.php @@ -29,6 +29,7 @@ use Illuminate\Validation\Rule; /** * * Class LinkTypeRequest + * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ diff --git a/app/Api/V1/Requests/PiggyBankRequest.php b/app/Api/V1/Requests/PiggyBankRequest.php index 68c5046844..7fad9502e8 100644 --- a/app/Api/V1/Requests/PiggyBankRequest.php +++ b/app/Api/V1/Requests/PiggyBankRequest.php @@ -31,6 +31,7 @@ use FireflyIII\Rules\ZeroOrMore; /** * * Class PiggyBankRequest + * * @codeCoverageIgnore * TODO AFTER 4.8,0: split this into two request classes. */ diff --git a/app/Api/V1/Requests/PreferenceRequest.php b/app/Api/V1/Requests/PreferenceRequest.php index 7fe184e054..2a3e1c3acc 100644 --- a/app/Api/V1/Requests/PreferenceRequest.php +++ b/app/Api/V1/Requests/PreferenceRequest.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests; /** * * Class PreferenceRequest + * * @codeCoverageIgnore */ class PreferenceRequest extends Request diff --git a/app/Api/V1/Requests/RecurrenceUpdateRequest.php b/app/Api/V1/Requests/RecurrenceUpdateRequest.php index 6edfdde96d..dbf71745b9 100644 --- a/app/Api/V1/Requests/RecurrenceUpdateRequest.php +++ b/app/Api/V1/Requests/RecurrenceUpdateRequest.php @@ -93,18 +93,18 @@ class RecurrenceUpdateRequest extends Request $recurrence = $this->route()->parameter('recurrence'); return [ - 'type' => 'in:withdrawal,transfer,deposit', - 'title' => sprintf('between:1,255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), - 'description' => 'between:1,65000', - 'first_date' => 'date', - 'apply_rules' => [new IsBoolean], - 'active' => [new IsBoolean], - 'repeat_until' => 'date', - 'nr_of_repetitions' => 'numeric|between:1,31', - 'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly', - 'repetitions.*.moment' => 'between:0,10', - 'repetitions.*.skip' => 'required|numeric|between:0,31', - 'repetitions.*.weekend' => 'required|numeric|min:1|max:4', + 'type' => 'in:withdrawal,transfer,deposit', + 'title' => sprintf('between:1,255|uniqueObjectForUser:recurrences,title,%d', $recurrence->id), + 'description' => 'between:1,65000', + 'first_date' => 'date', + 'apply_rules' => [new IsBoolean], + 'active' => [new IsBoolean], + 'repeat_until' => 'date', + 'nr_of_repetitions' => 'numeric|between:1,31', + 'repetitions.*.type' => 'in:daily,weekly,ndom,monthly,yearly', + 'repetitions.*.moment' => 'between:0,10', + 'repetitions.*.skip' => 'required|numeric|between:0,31', + 'repetitions.*.weekend' => 'required|numeric|min:1|max:4', 'transactions.*.description' => 'required|between:1,255', 'transactions.*.amount' => 'required|numeric|more:0', diff --git a/app/Api/V1/Requests/RuleGroupTestRequest.php b/app/Api/V1/Requests/RuleGroupTestRequest.php index aa12c2f8a2..31996d87de 100644 --- a/app/Api/V1/Requests/RuleGroupTestRequest.php +++ b/app/Api/V1/Requests/RuleGroupTestRequest.php @@ -75,8 +75,33 @@ class RuleGroupTestRequest extends Request return []; } + /** + * @return Collection + */ + private function getAccounts(): Collection + { + $accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts')); + $accounts = new Collection; + + /** @var AccountRepositoryInterface $accountRepository */ + $accountRepository = app(AccountRepositoryInterface::class); + + foreach ($accountList as $accountId) { + Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); + $account = $accountRepository->findNull((int)$accountId); + if ($this->validAccount($account)) { + /** @noinspection NullPointerExceptionInspection */ + Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); + $accounts->push($account); + } + } + + return $accounts; + } + /** * @param string $field + * * @return Carbon|null */ private function getDate(string $field): ?Carbon @@ -112,32 +137,9 @@ class RuleGroupTestRequest extends Request return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit'); } - /** - * @return Collection - */ - private function getAccounts(): Collection - { - $accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts')); - $accounts = new Collection; - - /** @var AccountRepositoryInterface $accountRepository */ - $accountRepository = app(AccountRepositoryInterface::class); - - foreach ($accountList as $accountId) { - Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); - $account = $accountRepository->findNull((int)$accountId); - if ($this->validAccount($account)) { - /** @noinspection NullPointerExceptionInspection */ - Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); - $accounts->push($account); - } - } - - return $accounts; - } - /** * @param Account|null $account + * * @return bool */ private function validAccount(?Account $account): bool diff --git a/app/Api/V1/Requests/RuleGroupTriggerRequest.php b/app/Api/V1/Requests/RuleGroupTriggerRequest.php index 4b7f44740a..eaa0ae8f65 100644 --- a/app/Api/V1/Requests/RuleGroupTriggerRequest.php +++ b/app/Api/V1/Requests/RuleGroupTriggerRequest.php @@ -75,18 +75,6 @@ class RuleGroupTriggerRequest extends Request ]; } - /** - * @param string $field - * @return Carbon|null - */ - private function getDate(string $field): ?Carbon - { - /** @var Carbon $result */ - $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); - - return $result; - } - /** * @return Collection */ @@ -111,8 +99,22 @@ class RuleGroupTriggerRequest extends Request return $accounts; } + /** + * @param string $field + * + * @return Carbon|null + */ + private function getDate(string $field): ?Carbon + { + /** @var Carbon $result */ + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); + + return $result; + } + /** * @param Account|null $account + * * @return bool */ private function validAccount(?Account $account): bool diff --git a/app/Api/V1/Requests/RuleStoreRequest.php b/app/Api/V1/Requests/RuleStoreRequest.php index 6abc9b6027..2f4f48ec53 100644 --- a/app/Api/V1/Requests/RuleStoreRequest.php +++ b/app/Api/V1/Requests/RuleStoreRequest.php @@ -133,21 +133,6 @@ class RuleStoreRequest extends Request ); } - /** - * Adds an error to the validator when there are no repetitions in the array of data. - * - * @param Validator $validator - */ - protected function atLeastOneTrigger(Validator $validator): void - { - $data = $validator->getData(); - $triggers = $data['triggers'] ?? []; - // need at least one trigger - if (0 === count($triggers)) { - $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger')); - } - } - /** * Adds an error to the validator when there are no repetitions in the array of data. * @@ -164,24 +149,18 @@ class RuleStoreRequest extends Request } /** - * @return array + * Adds an error to the validator when there are no repetitions in the array of data. + * + * @param Validator $validator */ - private function getRuleTriggers(): array + protected function atLeastOneTrigger(Validator $validator): void { - $triggers = $this->get('triggers'); - $return = []; - if (is_array($triggers)) { - foreach ($triggers as $trigger) { - $return[] = [ - 'type' => $trigger['type'], - 'value' => $trigger['value'], - 'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')), - 'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')), - ]; - } + $data = $validator->getData(); + $triggers = $data['triggers'] ?? []; + // need at least one trigger + if (0 === count($triggers)) { + $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger')); } - - return $return; } /** @@ -204,4 +183,25 @@ class RuleStoreRequest extends Request return $return; } + + /** + * @return array + */ + private function getRuleTriggers(): array + { + $triggers = $this->get('triggers'); + $return = []; + if (is_array($triggers)) { + foreach ($triggers as $trigger) { + $return[] = [ + 'type' => $trigger['type'], + 'value' => $trigger['value'], + 'active' => $this->convertBoolean((string)($trigger['active'] ?? 'false')), + 'stop_processing' => $this->convertBoolean((string)($trigger['stop_processing'] ?? 'false')), + ]; + } + } + + return $return; + } } diff --git a/app/Api/V1/Requests/RuleTestRequest.php b/app/Api/V1/Requests/RuleTestRequest.php index 3ebaff2e26..e7853b73cd 100644 --- a/app/Api/V1/Requests/RuleTestRequest.php +++ b/app/Api/V1/Requests/RuleTestRequest.php @@ -75,8 +75,33 @@ class RuleTestRequest extends Request return []; } + /** + * @return Collection + */ + private function getAccounts(): Collection + { + $accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts')); + $accounts = new Collection; + + /** @var AccountRepositoryInterface $accountRepository */ + $accountRepository = app(AccountRepositoryInterface::class); + + foreach ($accountList as $accountId) { + Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); + $account = $accountRepository->findNull((int)$accountId); + if ($this->validAccount($account)) { + /** @noinspection NullPointerExceptionInspection */ + Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); + $accounts->push($account); + } + } + + return $accounts; + } + /** * @param string $field + * * @return Carbon|null */ private function getDate(string $field): ?Carbon @@ -112,32 +137,9 @@ class RuleTestRequest extends Request return 0 === (int)$this->query('triggered_limit') ? (int)config('firefly.test-triggers.range') : (int)$this->query('triggered_limit'); } - /** - * @return Collection - */ - private function getAccounts(): Collection - { - $accountList = '' === (string)$this->query('accounts') ? [] : explode(',', $this->query('accounts')); - $accounts = new Collection; - - /** @var AccountRepositoryInterface $accountRepository */ - $accountRepository = app(AccountRepositoryInterface::class); - - foreach ($accountList as $accountId) { - Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); - $account = $accountRepository->findNull((int)$accountId); - if ($this->validAccount($account)) { - /** @noinspection NullPointerExceptionInspection */ - Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); - $accounts->push($account); - } - } - - return $accounts; - } - /** * @param Account|null $account + * * @return bool */ private function validAccount(?Account $account): bool diff --git a/app/Api/V1/Requests/RuleTriggerRequest.php b/app/Api/V1/Requests/RuleTriggerRequest.php index e8ffdb3e7e..bd5977ca95 100644 --- a/app/Api/V1/Requests/RuleTriggerRequest.php +++ b/app/Api/V1/Requests/RuleTriggerRequest.php @@ -74,18 +74,6 @@ class RuleTriggerRequest extends Request ]; } - /** - * @param string $field - * @return Carbon|null - */ - private function getDate(string $field): ?Carbon - { - /** @var Carbon $result */ - $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); - - return $result; - } - /** * @return Collection */ @@ -110,8 +98,22 @@ class RuleTriggerRequest extends Request return $accounts; } + /** + * @param string $field + * + * @return Carbon|null + */ + private function getDate(string $field): ?Carbon + { + /** @var Carbon $result */ + $result = null === $this->query($field) ? null : Carbon::createFromFormat('Y-m-d', $this->query($field)); + + return $result; + } + /** * @param Account|null $account + * * @return bool */ private function validAccount(?Account $account): bool diff --git a/app/Api/V1/Requests/RuleUpdateRequest.php b/app/Api/V1/Requests/RuleUpdateRequest.php index 0c7ae761a5..cf7eba631b 100644 --- a/app/Api/V1/Requests/RuleUpdateRequest.php +++ b/app/Api/V1/Requests/RuleUpdateRequest.php @@ -143,11 +143,9 @@ class RuleUpdateRequest extends Request { $data = $validator->getData(); $actions = $data['actions'] ?? null; - if (is_array($actions)) { - // need at least one action - if (0 === count($actions)) { - $validator->errors()->add('title', (string)trans('validation.at_least_one_action')); - } + // need at least one action + if (is_array($actions) && 0 === count($actions)) { + $validator->errors()->add('title', (string)trans('validation.at_least_one_action')); } } @@ -160,11 +158,9 @@ class RuleUpdateRequest extends Request { $data = $validator->getData(); $triggers = $data['triggers'] ?? null; - if (is_array($triggers)) { - // need at least one trigger - if (0 === count($triggers)) { - $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger')); - } + // need at least one trigger + if (is_array($triggers) && 0 === count($triggers)) { + $validator->errors()->add('title', (string)trans('validation.at_least_one_trigger')); } } diff --git a/app/Api/V1/Requests/TransactionStoreRequest.php b/app/Api/V1/Requests/TransactionStoreRequest.php index 7b267cf4d8..b265e4114b 100644 --- a/app/Api/V1/Requests/TransactionStoreRequest.php +++ b/app/Api/V1/Requests/TransactionStoreRequest.php @@ -192,7 +192,7 @@ class TransactionStoreRequest extends Request { $return = []; /** - * @var int $index + * @var int $index * @var array $transaction */ foreach ($this->get('transactions') as $index => $transaction) { diff --git a/app/Api/V1/Requests/TransactionUpdateRequest.php b/app/Api/V1/Requests/TransactionUpdateRequest.php index 3002ebb7a3..d10c15afb4 100644 --- a/app/Api/V1/Requests/TransactionUpdateRequest.php +++ b/app/Api/V1/Requests/TransactionUpdateRequest.php @@ -276,7 +276,7 @@ class TransactionUpdateRequest extends Request Log::debug('Now in getTransactionData()'); $return = []; /** - * @var int $index + * @var int $index * @var array $transaction */ foreach ($this->get('transactions') as $index => $transaction) { diff --git a/app/Http/Controllers/Report/BudgetController.php b/app/Http/Controllers/Report/BudgetController.php index c733a83f0c..2b3613a517 100644 --- a/app/Http/Controllers/Report/BudgetController.php +++ b/app/Http/Controllers/Report/BudgetController.php @@ -33,7 +33,9 @@ use FireflyIII\Repositories\Budget\NoBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Controllers\BasicDataSupport; +use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; +use Illuminate\View\View; use Log; use Throwable; @@ -79,7 +81,7 @@ class BudgetController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accountPerBudget(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { @@ -131,7 +133,7 @@ class BudgetController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accounts(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { @@ -239,7 +241,7 @@ class BudgetController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function budgets(Collection $accounts, Collection $budgets, Carbon $start, Carbon $end) { diff --git a/app/Http/Controllers/Report/CategoryController.php b/app/Http/Controllers/Report/CategoryController.php index 2d06bb21c3..b071a15d05 100644 --- a/app/Http/Controllers/Report/CategoryController.php +++ b/app/Http/Controllers/Report/CategoryController.php @@ -31,7 +31,9 @@ use FireflyIII\Repositories\Category\NoCategoryRepositoryInterface; use FireflyIII\Repositories\Category\OperationsRepositoryInterface; use FireflyIII\Support\CacheProperties; use FireflyIII\Support\Http\Controllers\BasicDataSupport; +use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; +use Illuminate\View\View; use Log; use Throwable; @@ -69,7 +71,7 @@ class CategoryController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accountPerCategory(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { @@ -168,7 +170,7 @@ class CategoryController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accounts(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { @@ -268,7 +270,113 @@ class CategoryController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return array|string + */ + public function avgExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) + { + $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); + $result = []; + foreach ($spent as $currency) { + $currencyId = $currency['currency_id']; + foreach ($currency['categories'] as $category) { + foreach ($category['transaction_journals'] as $journal) { + $destinationId = $journal['destination_account_id']; + $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); + $result[$key] = $result[$key] ?? [ + 'transactions' => 0, + 'sum' => '0', + 'avg' => '0', + 'avg_float' => 0, + 'destination_account_name' => $journal['destination_account_name'], + 'destination_account_id' => $journal['destination_account_id'], + 'currency_id' => $currency['currency_id'], + 'currency_name' => $currency['currency_name'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + ]; + $result[$key]['transactions']++; + $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); + $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); + $result[$key]['avg_float'] = (float)$result[$key]['avg']; + } + } + } + // sort by amount_float + // sort temp array by amount. + $amounts = array_column($result, 'avg_float'); + array_multisort($amounts, SORT_ASC, $result); + + try { + $result = view('reports.category.partials.avg-expenses', compact('result'))->render(); + // @codeCoverageIgnoreStart + } catch (Throwable $e) { + Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + $result = sprintf('Could not render view: %s', $e->getMessage()); + } + + return $result; + } + + /** + * @param Collection $accounts + * @param Collection $categories + * @param Carbon $start + * @param Carbon $end + * + * @return array|string + */ + public function avgIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) + { + $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); + $result = []; + foreach ($spent as $currency) { + $currencyId = $currency['currency_id']; + foreach ($currency['categories'] as $category) { + foreach ($category['transaction_journals'] as $journal) { + $sourceId = $journal['source_account_id']; + $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); + $result[$key] = $result[$key] ?? [ + 'transactions' => 0, + 'sum' => '0', + 'avg' => '0', + 'avg_float' => 0, + 'source_account_name' => $journal['source_account_name'], + 'source_account_id' => $journal['source_account_id'], + 'currency_id' => $currency['currency_id'], + 'currency_name' => $currency['currency_name'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + ]; + $result[$key]['transactions']++; + $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); + $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); + $result[$key]['avg_float'] = (float)$result[$key]['avg']; + } + } + } + // sort by amount_float + // sort temp array by amount. + $amounts = array_column($result, 'avg_float'); + array_multisort($amounts, SORT_DESC, $result); + + try { + $result = view('reports.category.partials.avg-income', compact('result'))->render(); + // @codeCoverageIgnoreStart + } catch (Throwable $e) { + Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); + $result = sprintf('Could not render view: %s', $e->getMessage()); + } + + return $result; + } + + /** + * @param Collection $accounts + * @param Collection $categories + * @param Carbon $start + * @param Carbon $end + * + * @return Factory|View */ public function categories(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) { @@ -808,19 +916,19 @@ class CategoryController extends Controller foreach ($currency['categories'] as $category) { foreach ($category['transaction_journals'] as $journal) { $result[] = [ - 'description' => $journal['description'], - 'transaction_group_id' => $journal['transaction_group_id'], - 'amount_float' => (float)$journal['amount'], - 'amount' => $journal['amount'], - 'date' => $journal['date']->formatLocalized($this->monthAndDayFormat), - 'source_account_name' => $journal['source_account_name'], - 'source_account_id' => $journal['source_account_id'], - 'currency_id' => $currency['currency_id'], - 'currency_name' => $currency['currency_name'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - 'category_id' => $category['id'], - 'category_name' => $category['name'], + 'description' => $journal['description'], + 'transaction_group_id' => $journal['transaction_group_id'], + 'amount_float' => (float)$journal['amount'], + 'amount' => $journal['amount'], + 'date' => $journal['date']->formatLocalized($this->monthAndDayFormat), + 'source_account_name' => $journal['source_account_name'], + 'source_account_id' => $journal['source_account_id'], + 'currency_id' => $currency['currency_id'], + 'currency_name' => $currency['currency_name'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_decimal_places' => $currency['currency_decimal_places'], + 'category_id' => $category['id'], + 'category_name' => $category['name'], ]; } } @@ -841,112 +949,6 @@ class CategoryController extends Controller return $result; } - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return array|string - */ - public function avgExpenses(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) - { - $spent = $this->opsRepository->listExpenses($start, $end, $accounts, $categories); - $result = []; - foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - foreach ($currency['categories'] as $category) { - foreach ($category['transaction_journals'] as $journal) { - $destinationId = $journal['destination_account_id']; - $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ - 'transactions' => 0, - 'sum' => '0', - 'avg' => '0', - 'avg_float' => 0, - 'destination_account_name' => $journal['destination_account_name'], - 'destination_account_id' => $journal['destination_account_id'], - 'currency_id' => $currency['currency_id'], - 'currency_name' => $currency['currency_name'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - ]; - $result[$key]['transactions']++; - $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); - $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); - $result[$key]['avg_float'] = (float)$result[$key]['avg']; - } - } - } - // sort by amount_float - // sort temp array by amount. - $amounts = array_column($result, 'avg_float'); - array_multisort($amounts, SORT_ASC, $result); - - try { - $result = view('reports.category.partials.avg-expenses', compact('result'))->render(); - // @codeCoverageIgnoreStart - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); - $result = sprintf('Could not render view: %s', $e->getMessage()); - } - - return $result; - } - - /** - * @param Collection $accounts - * @param Collection $categories - * @param Carbon $start - * @param Carbon $end - * - * @return array|string - */ - public function avgIncome(Collection $accounts, Collection $categories, Carbon $start, Carbon $end) - { - $spent = $this->opsRepository->listIncome($start, $end, $accounts, $categories); - $result = []; - foreach ($spent as $currency) { - $currencyId = $currency['currency_id']; - foreach ($currency['categories'] as $category) { - foreach ($category['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ - 'transactions' => 0, - 'sum' => '0', - 'avg' => '0', - 'avg_float' => 0, - 'source_account_name' => $journal['source_account_name'], - 'source_account_id' => $journal['source_account_id'], - 'currency_id' => $currency['currency_id'], - 'currency_name' => $currency['currency_name'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_decimal_places' => $currency['currency_decimal_places'], - ]; - $result[$key]['transactions']++; - $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); - $result[$key]['avg'] = bcdiv($result[$key]['sum'], (string)$result[$key]['transactions']); - $result[$key]['avg_float'] = (float)$result[$key]['avg']; - } - } - } - // sort by amount_float - // sort temp array by amount. - $amounts = array_column($result, 'avg_float'); - array_multisort($amounts, SORT_DESC, $result); - - try { - $result = view('reports.category.partials.avg-income', compact('result'))->render(); - // @codeCoverageIgnoreStart - } catch (Throwable $e) { - Log::debug(sprintf('Could not render reports.partials.budget-period: %s', $e->getMessage())); - $result = sprintf('Could not render view: %s', $e->getMessage()); - } - - return $result; - } - /** * @param array $array * diff --git a/app/Http/Controllers/Report/DoubleController.php b/app/Http/Controllers/Report/DoubleController.php index 8c4616cafe..be34f9cea4 100644 --- a/app/Http/Controllers/Report/DoubleController.php +++ b/app/Http/Controllers/Report/DoubleController.php @@ -28,7 +28,9 @@ use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\OperationsRepositoryInterface; use FireflyIII\Support\Http\Controllers\AugumentData; +use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; +use Illuminate\View\View; use Log; use Throwable; @@ -82,9 +84,9 @@ class DoubleController extends Controller $result = []; foreach ($spent as $currency) { foreach ($currency['transaction_journals'] as $journal) { - $sourceId = $journal['source_account_id']; - $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); - $result[$key] = $result[$key] ?? [ + $sourceId = $journal['source_account_id']; + $key = sprintf('%d-%d', $sourceId, $currency['currency_id']); + $result[$key] = $result[$key] ?? [ 'transactions' => 0, 'sum' => '0', 'avg' => '0', @@ -137,16 +139,16 @@ class DoubleController extends Controller $destinationId = $journal['destination_account_id']; $key = sprintf('%d-%d', $destinationId, $currency['currency_id']); $result[$key] = $result[$key] ?? [ - 'transactions' => 0, - 'sum' => '0', - 'avg' => '0', - 'avg_float' => 0, - 'destination_account_name' => $journal['destination_account_name'], - 'destination_account_id' => $journal['destination_account_id'], - 'currency_id' => $currency['currency_id'], - 'currency_name' => $currency['currency_name'], - 'currency_symbol' => $currency['currency_symbol'], - 'currency_decimal_places' => $currency['currency_decimal_places'], + 'transactions' => 0, + 'sum' => '0', + 'avg' => '0', + 'avg_float' => 0, + 'destination_account_name' => $journal['destination_account_name'], + 'destination_account_id' => $journal['destination_account_id'], + 'currency_id' => $currency['currency_id'], + 'currency_name' => $currency['currency_name'], + 'currency_symbol' => $currency['currency_symbol'], + 'currency_decimal_places' => $currency['currency_decimal_places'], ]; $result[$key]['transactions']++; $result[$key]['sum'] = bcadd($journal['amount'], $result[$key]['sum']); @@ -176,7 +178,7 @@ class DoubleController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function operations(Collection $accounts, Collection $double, Carbon $start, Carbon $end) { @@ -295,7 +297,7 @@ class DoubleController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function operationsPerAsset(Collection $accounts, Collection $double, Carbon $start, Carbon $end) { diff --git a/app/Http/Controllers/Report/OperationsController.php b/app/Http/Controllers/Report/OperationsController.php index 8cafe310a3..2bf4de6237 100644 --- a/app/Http/Controllers/Report/OperationsController.php +++ b/app/Http/Controllers/Report/OperationsController.php @@ -41,6 +41,7 @@ class OperationsController extends Controller /** * OperationsController constructor. + * * @codeCoverageIgnore */ public function __construct() @@ -170,14 +171,12 @@ class OperationsController extends Controller $sums[$currencyId]['sum'] = bcadd($sums[$currencyId]['in'], $sums[$currencyId]['out']); } - //try { + try { $result = view('reports.partials.operations', compact('sums'))->render(); - // @codeCoverageIgnoreStart -// } catch (Throwable $e) { -// Log::debug(sprintf('Could not render reports.partials.operations: %s', $e->getMessage())); -// $result = 'Could not render view.'; -// } - // @codeCoverageIgnoreEnd + } catch (Throwable $e) { + Log::debug(sprintf('Could not render reports.partials.operations: %s', $e->getMessage())); + $result = 'Could not render view.'; + } $cache->store($result); return $result; diff --git a/app/Http/Controllers/Report/TagController.php b/app/Http/Controllers/Report/TagController.php index 001ae55bb9..fcf9c6afa0 100644 --- a/app/Http/Controllers/Report/TagController.php +++ b/app/Http/Controllers/Report/TagController.php @@ -29,7 +29,9 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Account; use FireflyIII\Models\Tag; use FireflyIII\Repositories\Tag\OperationsRepositoryInterface; +use Illuminate\Contracts\View\Factory; use Illuminate\Support\Collection; +use Illuminate\View\View; use Log; use Throwable; @@ -67,7 +69,7 @@ class TagController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accountPerTag(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { @@ -166,7 +168,7 @@ class TagController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function accounts(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { @@ -372,7 +374,7 @@ class TagController extends Controller * @param Carbon $start * @param Carbon $end * - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @return Factory|View */ public function tags(Collection $accounts, Collection $tags, Carbon $start, Carbon $end) { diff --git a/app/Repositories/Budget/AvailableBudgetRepository.php b/app/Repositories/Budget/AvailableBudgetRepository.php index c4d1c4a9d2..41c63a05dc 100644 --- a/app/Repositories/Budget/AvailableBudgetRepository.php +++ b/app/Repositories/Budget/AvailableBudgetRepository.php @@ -190,6 +190,7 @@ class AvailableBudgetRepository implements AvailableBudgetRepositoryInterface * @param string $amount * * @return AvailableBudget + * @deprecated */ public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget { diff --git a/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php b/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php index 66a76955a4..7076e01923 100644 --- a/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php +++ b/app/Repositories/Budget/AvailableBudgetRepositoryInterface.php @@ -39,6 +39,17 @@ interface AvailableBudgetRepositoryInterface */ public function destroyAvailableBudget(AvailableBudget $availableBudget): void; + /** + * Find existing AB. + * + * @param TransactionCurrency $currency + * @param Carbon $start + * @param Carbon $end + * + * @return AvailableBudget|null + */ + public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget; + /** * Return a list of all available budgets (in all currencies) (for the selected period). * @@ -59,32 +70,6 @@ interface AvailableBudgetRepositoryInterface */ public function getAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end): string; - /** - * @param array $data - * - * @return AvailableBudget|null - */ - public function store(array $data): ?AvailableBudget; - - /** - * @param AvailableBudget $availableBudget - * @param array $data - * - * @return AvailableBudget - */ - public function update(AvailableBudget $availableBudget, array $data): AvailableBudget; - - /** - * Find existing AB. - * - * @param TransactionCurrency $currency - * @param Carbon $start - * @param Carbon $end - * - * @return AvailableBudget|null - */ - public function find(TransactionCurrency $currency, Carbon $start, Carbon $end): ?AvailableBudget; - /** * @param Carbon $start * @param Carbon $end @@ -120,6 +105,7 @@ interface AvailableBudgetRepositoryInterface * @param string $amount * * @return AvailableBudget + * @deprecated */ public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget; @@ -128,6 +114,21 @@ interface AvailableBudgetRepositoryInterface */ public function setUser(User $user): void; + /** + * @param array $data + * + * @return AvailableBudget|null + */ + public function store(array $data): ?AvailableBudget; + + /** + * @param AvailableBudget $availableBudget + * @param array $data + * + * @return AvailableBudget + */ + public function update(AvailableBudget $availableBudget, array $data): AvailableBudget; + /** * @param AvailableBudget $availableBudget * @param array $data diff --git a/app/Support/Amount.php b/app/Support/Amount.php index f651bebcef..82183dfea1 100644 --- a/app/Support/Amount.php +++ b/app/Support/Amount.php @@ -25,6 +25,7 @@ namespace FireflyIII\Support; use Crypt; use FireflyIII\Models\TransactionCurrency; use FireflyIII\User; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Support\Collection; use Log; @@ -279,7 +280,7 @@ class Amount } /** - * @param User $user + * @param User|Authenticatable $user * * @return \FireflyIII\Models\TransactionCurrency */ diff --git a/app/Support/Preferences.php b/app/Support/Preferences.php index 999f515d43..279fc3f77e 100644 --- a/app/Support/Preferences.php +++ b/app/Support/Preferences.php @@ -26,18 +26,20 @@ use Cache; use Exception; use FireflyIII\Models\Preference; use FireflyIII\User; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Log; use Session; /** * Class Preferences. + * * @codeCoverageIgnore */ class Preferences { /** - * @param User $user + * @param User $user * @param string $search * * @return Collection @@ -92,7 +94,7 @@ class Preferences /** * @param string $name - * @param mixed $default + * @param mixed $default * * @return \FireflyIII\Models\Preference|null */ @@ -115,7 +117,7 @@ class Preferences /** * @param \FireflyIII\User $user - * @param array $list + * @param array $list * * @return array */ @@ -140,9 +142,9 @@ class Preferences } /** - * @param \FireflyIII\User $user - * @param string $name - * @param null|string $default + * @param \FireflyIII\User|Authenticatable $user + * @param string $name + * @param null|string $default * * @return \FireflyIII\Models\Preference|null */ @@ -212,7 +214,7 @@ class Preferences /** * @param string $name - * @param mixed $value + * @param mixed $value * * @return \FireflyIII\Models\Preference */ @@ -233,8 +235,8 @@ class Preferences /** * @param \FireflyIII\User $user - * @param string $name - * @param mixed $value + * @param string $name + * @param mixed $value * * @return Preference */ diff --git a/app/TransactionRules/Engine/RuleEngine.php b/app/TransactionRules/Engine/RuleEngine.php index 537322de1c..2a0bcc4796 100644 --- a/app/TransactionRules/Engine/RuleEngine.php +++ b/app/TransactionRules/Engine/RuleEngine.php @@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Repositories\RuleGroup\RuleGroupRepository; use FireflyIII\TransactionRules\Processor; use FireflyIII\User; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Support\Collection; use Log; @@ -202,7 +203,7 @@ class RuleEngine } /** - * @param User $user + * @param User|Authenticatable $user */ public function setUser(User $user): void { diff --git a/tests/Api/V1/Controllers/AvailableBudgetControllerTest.php b/tests/Api/V1/Controllers/AvailableBudgetControllerTest.php index 922057e351..f163c805a0 100644 --- a/tests/Api/V1/Controllers/AvailableBudgetControllerTest.php +++ b/tests/Api/V1/Controllers/AvailableBudgetControllerTest.php @@ -23,12 +23,11 @@ declare(strict_types=1); namespace Tests\Api\V1\Controllers; -use Preferences; use Amount; use FireflyIII\Factory\TransactionCurrencyFactory; use FireflyIII\Models\AvailableBudget; use FireflyIII\Models\TransactionCurrency; -use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Transformers\AvailableBudgetTransformer; use Laravel\Passport\Passport; @@ -62,7 +61,7 @@ class AvailableBudgetControllerTest extends TestCase public function testStore(): void { Log::info(sprintf('Now in test %s.', __METHOD__)); - $repository = $this->mock(BudgetRepositoryInterface::class); + $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class); $transformer = $this->mock(AvailableBudgetTransformer::class); $factory = $this->mock(TransactionCurrencyFactory::class); $availableBudget = new AvailableBudget; @@ -76,8 +75,8 @@ class AvailableBudgetControllerTest extends TestCase $factory->shouldReceive('find')->withArgs([2, ''])->once()->andReturn(TransactionCurrency::find(2)); // mock calls: - $repository->shouldReceive('setUser')->atLeast()->once(); - $repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); + $abRepository->shouldReceive('setUser')->atLeast()->once(); + $abRepository->shouldReceive('store')->once()->andReturn($availableBudget); // data to submit $data = [ @@ -104,9 +103,9 @@ class AvailableBudgetControllerTest extends TestCase { Log::info(sprintf('Now in test %s.', __METHOD__)); // mock stuff: - $repository = $this->mock(BudgetRepositoryInterface::class); $transformer = $this->mock(AvailableBudgetTransformer::class); $factory = $this->mock(TransactionCurrencyFactory::class); + $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class); $availableBudget = new AvailableBudget; // mock transformer @@ -120,8 +119,8 @@ class AvailableBudgetControllerTest extends TestCase Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5)); // mock calls: - $repository->shouldReceive('setUser')->atLeast()->once(); - $repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); + $abRepository->shouldReceive('setUser')->atLeast()->once(); + $abRepository->shouldReceive('store')->once()->andReturn($availableBudget); // data to submit $data = [ @@ -149,9 +148,9 @@ class AvailableBudgetControllerTest extends TestCase $availableBudget = $this->user()->availableBudgets()->first(); // mock stuff: - $repository = $this->mock(BudgetRepositoryInterface::class); - $transformer = $this->mock(AvailableBudgetTransformer::class); - $factory = $this->mock(TransactionCurrencyFactory::class); + $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class); + $transformer = $this->mock(AvailableBudgetTransformer::class); + $factory = $this->mock(TransactionCurrencyFactory::class); // mock transformer $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); @@ -164,8 +163,8 @@ class AvailableBudgetControllerTest extends TestCase Amount::shouldReceive('getDefaultCurrency')->once()->andReturn(TransactionCurrency::find(5)); // mock calls: - $repository->shouldReceive('setUser')->once(); - $repository->shouldReceive('setAvailableBudget')->once()->andReturn($availableBudget); + $abRepository->shouldReceive('setUser')->once(); + $abRepository->shouldReceive('store')->once()->andReturn($availableBudget); // data to submit $data = [ @@ -193,11 +192,11 @@ class AvailableBudgetControllerTest extends TestCase { Log::info(sprintf('Now in test %s.', __METHOD__)); // mock repositories - $repository = $this->mock(BudgetRepositoryInterface::class); + $abRepository = $this->mock(AvailableBudgetRepositoryInterface::class); $currencyRepository = $this->mock(CurrencyRepositoryInterface::class); $transformer = $this->mock(AvailableBudgetTransformer::class); $factory = $this->mock(TransactionCurrencyFactory::class); - $euro = $this->getEuro(); + $euro = $this->getEuro(); // mock facades: Amount::shouldReceive('getDefaultCurrency')->atLeast()->once()->andReturn($euro); @@ -214,8 +213,8 @@ class AvailableBudgetControllerTest extends TestCase $availableBudget = $this->user()->availableBudgets()->first(); // mock calls: - $repository->shouldReceive('setUser'); - $repository->shouldReceive('updateAvailableBudget')->once()->andReturn($availableBudget); + $abRepository->shouldReceive('setUser'); + $abRepository->shouldReceive('updateAvailableBudget')->once()->andReturn($availableBudget); $currencyRepository->shouldReceive('findNull')->andReturn($this->getEuro()); // data to submit diff --git a/tests/Api/V1/Controllers/BudgetControllerTest.php b/tests/Api/V1/Controllers/BudgetControllerTest.php index df95a46115..064d11b6ae 100644 --- a/tests/Api/V1/Controllers/BudgetControllerTest.php +++ b/tests/Api/V1/Controllers/BudgetControllerTest.php @@ -24,9 +24,9 @@ declare(strict_types=1); namespace Tests\Api\V1\Controllers; - use FireflyIII\Models\Budget; use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\BudgetLimitTransformer; use FireflyIII\Transformers\BudgetTransformer; @@ -66,9 +66,11 @@ class BudgetControllerTest extends TestCase // mock stuff: $repository = $this->mock(BudgetRepositoryInterface::class); $transformer = $this->mock(BudgetTransformer::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); // mock calls: $repository->shouldReceive('setUser')->atLeast()->once(); + $blRepository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('store')->once()->andReturn($budget); // mock transformer @@ -107,10 +109,12 @@ class BudgetControllerTest extends TestCase 'amount' => 1, ]; // mock stuff: - $repository = $this->mock(BudgetRepositoryInterface::class); - $transformer = $this->mock(BudgetLimitTransformer::class); + $repository = $this->mock(BudgetRepositoryInterface::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); + $transformer = $this->mock(BudgetLimitTransformer::class); - $repository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); + $blRepository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); + $blRepository->shouldReceive('setUser')->atLeast()->once(); // mock transformer $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); @@ -140,11 +144,13 @@ class BudgetControllerTest extends TestCase // mock repositories $repository = $this->mock(BudgetRepositoryInterface::class); $transformer = $this->mock(BudgetTransformer::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); /** @var Budget $budget */ $budget = $this->user()->budgets()->first(); // mock calls: $repository->shouldReceive('setUser'); + $blRepository->shouldReceive('setUser'); $repository->shouldReceive('update')->once()->andReturn(new Budget); // mock calls to transformer: diff --git a/tests/Api/V1/Controllers/BudgetLimitControllerTest.php b/tests/Api/V1/Controllers/BudgetLimitControllerTest.php index 984c02dec6..75684a46a7 100644 --- a/tests/Api/V1/Controllers/BudgetLimitControllerTest.php +++ b/tests/Api/V1/Controllers/BudgetLimitControllerTest.php @@ -24,8 +24,8 @@ declare(strict_types=1); namespace Tests\Api\V1\Controllers; - use FireflyIII\Models\BudgetLimit; +use FireflyIII\Repositories\Budget\BudgetLimitRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Transformers\BudgetLimitTransformer; use Laravel\Passport\Passport; @@ -58,8 +58,10 @@ class BudgetLimitControllerTest extends TestCase */ public function testStore(): void { - $budget = $this->user()->budgets()->first(); - $transformer = $this->mock(BudgetLimitTransformer::class); + $budget = $this->user()->budgets()->first(); + $transformer = $this->mock(BudgetLimitTransformer::class); + $repository = $this->mock(BudgetRepositoryInterface::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); // mock calls to transformer: $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); @@ -83,13 +85,13 @@ class BudgetLimitControllerTest extends TestCase 'amount' => 1, ]; // mock stuff: - $repository = $this->mock(BudgetRepositoryInterface::class); $repository->shouldReceive('findNull')->andReturn($budget)->once(); - $repository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); + $blRepository->shouldReceive('storeBudgetLimit')->andReturn($budgetLimit)->once(); // mock calls: $repository->shouldReceive('setUser')->once(); + $blRepository->shouldReceive('setUser')->once(); // call API $response = $this->post(route('api.v1.budget_limits.store'), $data, ['Accept' => 'application/json']); @@ -113,8 +115,9 @@ class BudgetLimitControllerTest extends TestCase ]; // mock stuff: $repository = $this->mock(BudgetRepositoryInterface::class); - $repository->shouldReceive('findNull')->andReturn(null)->once(); + //$repository->shouldReceive('findNull')->andReturn(null)->once(); $transformer = $this->mock(BudgetLimitTransformer::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); // mock calls: $repository->shouldReceive('setUser')->once(); @@ -134,6 +137,7 @@ class BudgetLimitControllerTest extends TestCase public function testUpdate(): void { $transformer = $this->mock(BudgetLimitTransformer::class); + $blRepository = $this->mock(BudgetLimitRepositoryInterface::class); $budget = $this->user()->budgets()->first(); $budgetLimit = BudgetLimit::create( [ @@ -152,7 +156,7 @@ class BudgetLimitControllerTest extends TestCase ]; // mock stuff: $repository = $this->mock(BudgetRepositoryInterface::class); - $repository->shouldReceive('updateBudgetLimit')->andReturn($budgetLimit)->once(); + $blRepository->shouldReceive('updateBudgetLimit')->andReturn($budgetLimit)->once(); // mock calls to transformer: $transformer->shouldReceive('setParameters')->withAnyArgs()->atLeast()->once(); $transformer->shouldReceive('setCurrentScope')->withAnyArgs()->atLeast()->once()->andReturnSelf(); @@ -162,6 +166,7 @@ class BudgetLimitControllerTest extends TestCase // mock calls: $repository->shouldReceive('setUser')->once(); + $blRepository->shouldReceive('setUser')->once(); // call API $response = $this->put(route('api.v1.budget_limits.update', [$budgetLimit->id]), $data); diff --git a/tests/Api/V1/Controllers/Chart/AvailableBudgetControllerTest.php b/tests/Api/V1/Controllers/Chart/AvailableBudgetControllerTest.php index 027ca9f65a..3930ad93ce 100644 --- a/tests/Api/V1/Controllers/Chart/AvailableBudgetControllerTest.php +++ b/tests/Api/V1/Controllers/Chart/AvailableBudgetControllerTest.php @@ -24,6 +24,7 @@ namespace Tests\Api\V1\Controllers\Chart; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use Illuminate\Support\Collection; use Laravel\Passport\Passport; use Log; @@ -54,15 +55,16 @@ class AvailableBudgetControllerTest extends TestCase { $availableBudget = $this->user()->availableBudgets()->first(); $repository = $this->mock(BudgetRepositoryInterface::class); + $opsRepository = $this->mock(OperationsRepositoryInterface::class); // get data: $budget = $this->getBudget(); // mock calls: $repository->shouldReceive('setUser')->atLeast()->once(); + $opsRepository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); - $repository->shouldReceive('spentInPeriodMc')->atLeast()->once()-> - andReturn( + $opsRepository->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( [ [ 'currency_id' => 1, @@ -78,8 +80,10 @@ class AvailableBudgetControllerTest extends TestCase 'start' => '2019-01-01', 'end' => '2019-01-31', ]; - $response = $this->get(route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' - . http_build_query($parameters), ['Accept' => 'application/json']); + $response = $this->get( + route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' + . http_build_query($parameters), ['Accept' => 'application/json'] + ); $response->assertStatus(200); } @@ -90,15 +94,15 @@ class AvailableBudgetControllerTest extends TestCase { $availableBudget = $this->user()->availableBudgets()->first(); $repository = $this->mock(BudgetRepositoryInterface::class); - + $opsRepository = $this->mock(OperationsRepositoryInterface::class); // get data: $budget = $this->getBudget(); // mock calls: $repository->shouldReceive('setUser')->atLeast()->once(); + $opsRepository->shouldReceive('setUser')->atLeast()->once(); $repository->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); - $repository->shouldReceive('spentInPeriodMc')->atLeast()->once()-> - andReturn( + $opsRepository->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( [ [ 'currency_id' => 1, @@ -114,8 +118,10 @@ class AvailableBudgetControllerTest extends TestCase 'start' => '2019-01-01', 'end' => '2019-01-31', ]; - $response = $this->get(route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' - . http_build_query($parameters), ['Accept' => 'application/json']); + $response = $this->get( + route('api.v1.chart.ab.overview', [$availableBudget->id]) . '?' + . http_build_query($parameters), ['Accept' => 'application/json'] + ); $response->assertStatus(200); } diff --git a/tests/Api/V1/Controllers/SummaryControllerTest.php b/tests/Api/V1/Controllers/SummaryControllerTest.php index 4d59076eab..bc6701162d 100644 --- a/tests/Api/V1/Controllers/SummaryControllerTest.php +++ b/tests/Api/V1/Controllers/SummaryControllerTest.php @@ -27,11 +27,12 @@ use Carbon\Carbon; use FireflyIII\Helpers\Collector\GroupCollectorInterface; use FireflyIII\Helpers\Report\NetWorthInterface; use FireflyIII\Models\AccountType; -use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface; +use FireflyIII\Repositories\Budget\AvailableBudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Repositories\Budget\OperationsRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Illuminate\Support\Collection; use Laravel\Passport\Passport; @@ -57,95 +58,6 @@ class SummaryControllerTest extends TestCase Log::info(sprintf('Now in %s.', get_class($this))); } - /** - * @covers \FireflyIII\Api\V1\Controllers\SummaryController - */ - public function testBasicInThePast(): void - { - $accountRepos = $this->mock(AccountRepositoryInterface::class); - $billRepos = $this->mock(BillRepositoryInterface::class); - $budgetRepos = $this->mock(BudgetRepositoryInterface::class); - $currencyRepos = $this->mock(CurrencyRepositoryInterface::class); - $collector = $this->mock(GroupCollectorInterface::class); - $netWorth = $this->mock(NetWorthInterface::class); - - // data - $euro = $this->getEuro(); - $budget = $this->user()->budgets()->inRandomOrder()->first(); - $account = $this->getRandomAsset(); - $journals = [ - [ - 'amount' => '10', - 'currency_id' => 1, - ], - ]; - $netWorthData = [ - [ - 'currency' => $euro, - 'balance' => '232', - ], - ]; - - // mock calls. - $accountRepos->shouldReceive('setUser')->atLeast()->once(); - $billRepos->shouldReceive('setUser')->atLeast()->once(); - $budgetRepos->shouldReceive('setUser')->atLeast()->once(); - $currencyRepos->shouldReceive('setUser')->atLeast()->once(); - $netWorth->shouldReceive('setUser')->atLeast()->once(); - - // mock collector calls: - $collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf(); - $collector->shouldReceive('setPage')->atLeast()->once()->andReturnSelf(); - - // used to get balance information (deposits) - $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT]])->atLeast()->once()->andReturnSelf(); - - // same, but for withdrawals - $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->atLeast()->once()->andReturnSelf(); - - // system always returns one basic transaction (see above) - $collector->shouldReceive('getExtractedJournals')->atLeast()->once()->andReturn($journals); - - // currency repos does some basic collecting - $currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn($euro); - - // bill repository return value - $billRepos->shouldReceive('getBillsPaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']); - $billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']); - - // budget repos - $budgetRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123']); - $budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); - $budgetRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( - [ - [ - 'currency_id' => 1, - 'currency_code' => 'EUR', - 'currency_symbol' => 'x', - 'currency_decimal_places' => 2, - 'amount' => 321.21, - ], - ] - ); - - // account repos: - $accountRepos->shouldReceive('getActiveAccountsByType')->atLeast()->once() - ->withArgs([[AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE]])->andReturn(new Collection([$account])); - $accountRepos->shouldReceive('getMetaValue')->atLeast()->once()->withArgs([Mockery::any(), 'include_net_worth'])->andReturn(true); - - // net worth calculator - $netWorth->shouldReceive('getNetWorthByCurrency')->atLeast()->once()->andReturn($netWorthData); - - $parameters = [ - 'start' => '2019-01-01', - 'end' => '2019-01-31', - ]; - - $response = $this->get(route('api.v1.summary.basic') . '?' . http_build_query($parameters)); - $response->assertStatus(200); - // TODO AFTER 4.8,0: check if JSON is correct - } - /** * Also includes NULL currencies for better coverage. * @@ -159,6 +71,8 @@ class SummaryControllerTest extends TestCase $currencyRepos = $this->mock(CurrencyRepositoryInterface::class); $collector = $this->mock(GroupCollectorInterface::class); $netWorth = $this->mock(NetWorthInterface::class); + $abRepos = $this->mock(AvailableBudgetRepositoryInterface::class); + $opsRepos = $this->mock(OperationsRepositoryInterface::class); $date = new Carbon(); $date->addWeek(); @@ -194,6 +108,8 @@ class SummaryControllerTest extends TestCase $budgetRepos->shouldReceive('setUser')->atLeast()->once(); $currencyRepos->shouldReceive('setUser')->atLeast()->once(); $netWorth->shouldReceive('setUser')->atLeast()->once(); + $opsRepos->shouldReceive('setUser')->atLeast()->once(); + $abRepos->shouldReceive('setUser')->atLeast()->once(); // mock collector calls: $collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf(); @@ -217,9 +133,9 @@ class SummaryControllerTest extends TestCase $billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']); // budget repos - $budgetRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']); + $abRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123', 2 => '456']); $budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); - $budgetRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( + $opsRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( [ [ 'currency_id' => 3, @@ -256,4 +172,97 @@ class SummaryControllerTest extends TestCase $response->assertStatus(200); // TODO AFTER 4.8,0: check if JSON is correct } + + /** + * @covers \FireflyIII\Api\V1\Controllers\SummaryController + */ + public function testBasicInThePast(): void + { + $accountRepos = $this->mock(AccountRepositoryInterface::class); + $billRepos = $this->mock(BillRepositoryInterface::class); + $budgetRepos = $this->mock(BudgetRepositoryInterface::class); + $currencyRepos = $this->mock(CurrencyRepositoryInterface::class); + $collector = $this->mock(GroupCollectorInterface::class); + $netWorth = $this->mock(NetWorthInterface::class); + $abRepos = $this->mock(AvailableBudgetRepositoryInterface::class); + $opsRepos = $this->mock(OperationsRepositoryInterface::class); + + // data + $euro = $this->getEuro(); + $budget = $this->user()->budgets()->inRandomOrder()->first(); + $account = $this->getRandomAsset(); + $journals = [ + [ + 'amount' => '10', + 'currency_id' => 1, + ], + ]; + $netWorthData = [ + [ + 'currency' => $euro, + 'balance' => '232', + ], + ]; + + // mock calls. + $accountRepos->shouldReceive('setUser')->atLeast()->once(); + $billRepos->shouldReceive('setUser')->atLeast()->once(); + $budgetRepos->shouldReceive('setUser')->atLeast()->once(); + $currencyRepos->shouldReceive('setUser')->atLeast()->once(); + $netWorth->shouldReceive('setUser')->atLeast()->once(); + $abRepos->shouldReceive('setUser')->atLeast()->once(); + $opsRepos->shouldReceive('setUser')->atLeast()->once(); + + // mock collector calls: + $collector->shouldReceive('setRange')->atLeast()->once()->andReturnSelf(); + $collector->shouldReceive('setPage')->atLeast()->once()->andReturnSelf(); + + // used to get balance information (deposits) + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::DEPOSIT]])->atLeast()->once()->andReturnSelf(); + + // same, but for withdrawals + $collector->shouldReceive('setTypes')->withArgs([[TransactionType::WITHDRAWAL]])->atLeast()->once()->andReturnSelf(); + + // system always returns one basic transaction (see above) + $collector->shouldReceive('getExtractedJournals')->atLeast()->once()->andReturn($journals); + + // currency repos does some basic collecting + $currencyRepos->shouldReceive('findNull')->withArgs([1])->atLeast()->once()->andReturn($euro); + + // bill repository return value + $billRepos->shouldReceive('getBillsPaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']); + $billRepos->shouldReceive('getBillsUnpaidInRangePerCurrency')->atLeast()->once()->andReturn([1 => '123']); + + // budget repos + $abRepos->shouldReceive('getAvailableBudgetWithCurrency')->atLeast()->once()->andReturn([1 => '123']); + $budgetRepos->shouldReceive('getActiveBudgets')->atLeast()->once()->andReturn(new Collection([$budget])); + $opsRepos->shouldReceive('spentInPeriodMc')->atLeast()->once()->andReturn( + [ + [ + 'currency_id' => 1, + 'currency_code' => 'EUR', + 'currency_symbol' => 'x', + 'currency_decimal_places' => 2, + 'amount' => 321.21, + ], + ] + ); + + // account repos: + $accountRepos->shouldReceive('getActiveAccountsByType')->atLeast()->once() + ->withArgs([[AccountType::ASSET, AccountType::DEBT, AccountType::LOAN, AccountType::MORTGAGE]])->andReturn(new Collection([$account])); + $accountRepos->shouldReceive('getMetaValue')->atLeast()->once()->withArgs([Mockery::any(), 'include_net_worth'])->andReturn(true); + + // net worth calculator + $netWorth->shouldReceive('getNetWorthByCurrency')->atLeast()->once()->andReturn($netWorthData); + + $parameters = [ + 'start' => '2019-01-01', + 'end' => '2019-01-31', + ]; + + $response = $this->get(route('api.v1.summary.basic') . '?' . http_build_query($parameters)); + $response->assertStatus(200); + // TODO AFTER 4.8,0: check if JSON is correct + } }