diff --git a/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php b/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php
new file mode 100644
index 0000000000..ec311fb17b
--- /dev/null
+++ b/app/Api/V2/Controllers/Model/TransactionCurrency/IndexController.php
@@ -0,0 +1,86 @@
+middleware(
+ function ($request, $next) {
+ $this->repository = app(CurrencyRepositoryInterface::class);
+ // new way of user group validation
+ $userGroup = $this->validateUserGroup($request);
+ $this->repository->setUserGroup($userGroup);
+
+ return $next($request);
+ }
+ );
+ }
+
+ public function index(IndexRequest $request): JsonResponse
+ {
+ $settings = $request->getAll();
+ if(true === $settings['enabled']) {
+ $currencies = $this->repository->get();
+ }
+ if(true !== $settings['enabled']) {
+ $currencies = $this->repository->getAll();
+ }
+
+ $pageSize = $this->parameters->get('limit');
+ $count = $currencies->count();
+
+ // depending on the sort parameters, this list must not be split, because the
+ // order is calculated in the account transformer and by that time it's too late.
+ $accounts = $currencies->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
+ $paginator = new LengthAwarePaginator($accounts, $count, $pageSize, $this->parameters->get('page'));
+ $transformer = new CurrencyTransformer();
+
+ $this->parameters->set('pageSize', $pageSize);
+ $transformer->setParameters($this->parameters); // give params to transformer
+
+ return response()
+ ->json($this->jsonApiList(self::RESOURCE_KEY, $paginator, $transformer))
+ ->header('Content-Type', self::CONTENT_TYPE);
+ }
+}
diff --git a/app/Api/V2/Request/Model/TransactionCurrency/IndexRequest.php b/app/Api/V2/Request/Model/TransactionCurrency/IndexRequest.php
new file mode 100644
index 0000000000..4984d7f5c0
--- /dev/null
+++ b/app/Api/V2/Request/Model/TransactionCurrency/IndexRequest.php
@@ -0,0 +1,65 @@
+ $this->convertBoolean($this->get('enabled')),
+ ];
+ }
+
+ /**
+ * The rules that the incoming request must be matched against.
+ */
+ public function rules(): array
+ {
+ return [
+ 'enabled' => 'nullable|boolean',
+ ];
+
+ }
+}
diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php
index c0e4cd0db4..f66fc0dbd2 100644
--- a/app/Repositories/Currency/CurrencyRepository.php
+++ b/app/Repositories/Currency/CurrencyRepository.php
@@ -90,6 +90,7 @@ class CurrencyRepository implements CurrencyRepositoryInterface
return CurrencyExchangeRate::create(
[
'user_id' => $this->user->id,
+ 'user_group_id' => $this->user->user_group_id,
'from_currency_id' => $fromCurrency->id,
'to_currency_id' => $toCurrency->id,
'date' => $date,
diff --git a/config/translations.php b/config/translations.php
index 3017b488ae..f98060e92e 100644
--- a/config/translations.php
+++ b/config/translations.php
@@ -270,6 +270,9 @@ return [
'response',
'visit_webhook_url',
'reset_webhook_secret',
+ 'header_exchange_rates',
+ 'exchange_rates_intro',
+ 'exchange_rates_from_to'
],
'form' => [
'url',
diff --git a/resources/assets/v1/mix-manifest.json b/resources/assets/v1/mix-manifest.json
index db8d5e4037..563436036e 100644
--- a/resources/assets/v1/mix-manifest.json
+++ b/resources/assets/v1/mix-manifest.json
@@ -8,14 +8,21 @@
"/build/webhooks/create.js": "/build/webhooks/create.js",
"/build/webhooks/edit.js": "/build/webhooks/edit.js",
"/build/webhooks/show.js": "/build/webhooks/show.js",
+ "/build/exchange-rates/index.js": "/build/exchange-rates/index.js",
"/public/v1/js/app.js": "/public/v1/js/app.js",
"/public/v1/js/app.js.LICENSE.txt": "/public/v1/js/app.js.LICENSE.txt",
"/public/v1/js/app_vue.js": "/public/v1/js/app_vue.js",
"/public/v1/js/app_vue.js.LICENSE.txt": "/public/v1/js/app_vue.js.LICENSE.txt",
+ "/public/v1/js/create.js": "/public/v1/js/create.js",
+ "/public/v1/js/create.js.LICENSE.txt": "/public/v1/js/create.js.LICENSE.txt",
"/public/v1/js/create_transaction.js": "/public/v1/js/create_transaction.js",
"/public/v1/js/create_transaction.js.LICENSE.txt": "/public/v1/js/create_transaction.js.LICENSE.txt",
+ "/public/v1/js/edit.js": "/public/v1/js/edit.js",
+ "/public/v1/js/edit.js.LICENSE.txt": "/public/v1/js/edit.js.LICENSE.txt",
"/public/v1/js/edit_transaction.js": "/public/v1/js/edit_transaction.js",
"/public/v1/js/edit_transaction.js.LICENSE.txt": "/public/v1/js/edit_transaction.js.LICENSE.txt",
+ "/public/v1/js/exchange-rates/index.js": "/public/v1/js/exchange-rates/index.js",
+ "/public/v1/js/exchange-rates/index.js.LICENSE.txt": "/public/v1/js/exchange-rates/index.js.LICENSE.txt",
"/public/v1/js/ff/accounts/create.js": "/public/v1/js/ff/accounts/create.js",
"/public/v1/js/ff/accounts/edit-reconciliation.js": "/public/v1/js/ff/accounts/edit-reconciliation.js",
"/public/v1/js/ff/accounts/edit.js": "/public/v1/js/ff/accounts/edit.js",
@@ -84,6 +91,8 @@
"/public/v1/js/ff/transactions/mass/edit-bulk.js": "/public/v1/js/ff/transactions/mass/edit-bulk.js",
"/public/v1/js/ff/transactions/mass/edit.js": "/public/v1/js/ff/transactions/mass/edit.js",
"/public/v1/js/ff/transactions/show.js": "/public/v1/js/ff/transactions/show.js",
+ "/public/v1/js/index.js": "/public/v1/js/index.js",
+ "/public/v1/js/index.js.LICENSE.txt": "/public/v1/js/index.js.LICENSE.txt",
"/public/v1/js/lib/Chart.bundle.min.js": "/public/v1/js/lib/Chart.bundle.min.js",
"/public/v1/js/lib/accounting.min.js": "/public/v1/js/lib/accounting.min.js",
"/public/v1/js/lib/bootstrap-multiselect.js": "/public/v1/js/lib/bootstrap-multiselect.js",
@@ -142,6 +151,8 @@
"/public/v1/js/lib/vue.js": "/public/v1/js/lib/vue.js",
"/public/v1/js/profile.js": "/public/v1/js/profile.js",
"/public/v1/js/profile.js.LICENSE.txt": "/public/v1/js/profile.js.LICENSE.txt",
+ "/public/v1/js/show.js": "/public/v1/js/show.js",
+ "/public/v1/js/show.js.LICENSE.txt": "/public/v1/js/show.js.LICENSE.txt",
"/public/v1/js/webhooks/create.js": "/public/v1/js/webhooks/create.js",
"/public/v1/js/webhooks/create.js.LICENSE.txt": "/public/v1/js/webhooks/create.js.LICENSE.txt",
"/public/v1/js/webhooks/edit.js": "/public/v1/js/webhooks/edit.js",
diff --git a/resources/assets/v1/src/components/exchange-rates/Index.vue b/resources/assets/v1/src/components/exchange-rates/Index.vue
new file mode 100644
index 0000000000..31a99cfb0e
--- /dev/null
+++ b/resources/assets/v1/src/components/exchange-rates/Index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('firefly.exchange_rates_intro') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/assets/v1/src/exchange-rates/index.js b/resources/assets/v1/src/exchange-rates/index.js
new file mode 100644
index 0000000000..1545bf2f44
--- /dev/null
+++ b/resources/assets/v1/src/exchange-rates/index.js
@@ -0,0 +1,39 @@
+/*
+ * edit_transactions.js
+ * Copyright (c) 2019 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import Index from "../components/exchange-rates/Index";
+
+/**
+ * First we will load Axios via bootstrap.js
+ * jquery and bootstrap-sass preloaded in app.js
+ * vue, uiv and vuei18n are in app_vue.js
+ */
+
+require('../bootstrap');
+const i18n = require('../i18n');
+
+let props = {};
+const app = new Vue({
+ i18n,
+ el: "#exchange_rates_index",
+ render: (createElement) => {
+ return createElement(Index, {props: props})
+ },
+});
diff --git a/resources/assets/v1/src/locales/.json b/resources/assets/v1/src/locales/.json
new file mode 100644
index 0000000000..0637a088a0
--- /dev/null
+++ b/resources/assets/v1/src/locales/.json
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/resources/assets/v1/src/locales/en.json b/resources/assets/v1/src/locales/en.json
index e41ff89456..1517f83aa4 100644
--- a/resources/assets/v1/src/locales/en.json
+++ b/resources/assets/v1/src/locales/en.json
@@ -129,7 +129,10 @@
"logs": "Logs",
"response": "Response",
"visit_webhook_url": "Visit webhook URL",
- "reset_webhook_secret": "Reset webhook secret"
+ "reset_webhook_secret": "Reset webhook secret",
+ "header_exchange_rates": "Exchange rates",
+ "exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in the documentation<\/a>.",
+ "exchange_rates_from_to": "Between {from} and {to}"
},
"form": {
"url": "URL",
diff --git a/resources/assets/v1/webpack.mix.js b/resources/assets/v1/webpack.mix.js
index bea3d693cf..ae305aa76d 100644
--- a/resources/assets/v1/webpack.mix.js
+++ b/resources/assets/v1/webpack.mix.js
@@ -46,3 +46,6 @@ mix.js('src/webhooks/index.js', 'build/webhooks').vue({version: 2});
mix.js('src/webhooks/create.js', 'build/webhooks').vue({version: 2});
mix.js('src/webhooks/edit.js', 'build/webhooks').vue({version: 2});
mix.js('src/webhooks/show.js', 'build/webhooks').vue({version: 2}).copy('build','../../../public/v1/js')
+
+// exchange rates
+mix.js('src/exchange-rates/index.js', 'build/exchange-rates').vue({version: 2});
diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php
index fa0cb6b42b..616b6124d1 100644
--- a/resources/lang/en_US/firefly.php
+++ b/resources/lang/en_US/firefly.php
@@ -1398,6 +1398,7 @@ return [
'menu_exchange_rates_index' => 'Exchange rates',
'header_exchange_rates' => 'Exchange rates',
'exchange_rates_intro' =>'Firefly III supports downloading and using exchange rates. Read more about this in the documentation.',
+ 'exchange_rates_from_to' => 'Between {from} and {to}',
// Financial administrations
'administration_index' => 'Financial administration',
diff --git a/resources/views/exchange-rates/index.twig b/resources/views/exchange-rates/index.twig
index 6bab169fd7..8d51135202 100644
--- a/resources/views/exchange-rates/index.twig
+++ b/resources/views/exchange-rates/index.twig
@@ -1,51 +1,12 @@
+{% set VUE_SCRIPT_NAME = 'exchange-rates/index' %}
{% extends './layout/default' %}
-
{% block breadcrumbs %}
- {{ Breadcrumbs.render(Route.getCurrentRoute.getName) }}
+ {{ Breadcrumbs.render(Route.getCurrentRoute.getName, objectType) }}
{% endblock %}
{% block content %}
-
-
-
-
-
-
- {{ 'exchange_rates_intro'|_ }}
-
-
-
-
-
-
-
- {% for currency in currencies %}
-
-
-
- {% if currencies.count > 0 %}
-
- {% for sub in currencies %}
- {% if sub.id != currency.id %}
- - From {{ currency.name }} to {{ sub.name }}
- {% endif %}
- {% endfor %}
-
- {% endif %}
-
-
- {% endfor %}
-
-
-
+
{% endblock %}
-
-{% block styles %}
-{% endblock %}
-
{% block scripts %}
+
{% endblock %}
diff --git a/resources/views/partials/menu-sidebar.twig b/resources/views/partials/menu-sidebar.twig
index c9443ff939..ca77379ff6 100644
--- a/resources/views/partials/menu-sidebar.twig
+++ b/resources/views/partials/menu-sidebar.twig
@@ -219,13 +219,13 @@
{{ 'currencies'|_ }}
+
+
+
+ {{ 'menu_exchange_rates_index'|_ }}
+
+
{% if hasRole('owner') %}
-
-
-
- {{ 'menu_exchange_rates_index'|_ }}
-
-
diff --git a/routes/api.php b/routes/api.php
index ec16affdd9..1c1e082f59 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -86,159 +86,177 @@ Route::group(
}
);
-// V2 API route for Summary boxes
-// BASIC
+// CURRENCY ROUTES
Route::group(
[
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
- 'prefix' => 'v2/summary',
- 'as' => 'api.v2.summary.',
- ],
- static function (): void {
- // Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']);
- }
-);
-// V2 API route for all kinds of Transaction lists.
-// A lot of endpoints involve transactions. So any time Firefly III needs to list transactions
-// it's coming from these endpoints.
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
- 'prefix' => 'v2',
- 'as' => 'api.v2.',
- ],
- static function (): void {
- // basic list
- // Route::get('transactions', ['uses' => 'TransactionController@list', 'as' => 'transactions.list']);
-
- // list by parent or related object.
- // note how the check is done on the user group, not the user itself.
- // Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']);
- }
-);
-
-// V2 API routes for auto complete
-
-// V2 API route for net worth endpoint(s);
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
- 'prefix' => 'v2/net-worth',
- 'as' => 'api.v2.net-worth.',
- ],
- static function (): void {
- // Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']);
- }
-);
-
-// // V2 API route for accounts.
-// Route::group(
-// [
-// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account',
-// 'prefix' => 'v2/accounts',
-// 'as' => 'api.v2.accounts.',
-// ],
-// static function (): void {
-// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
-// Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']);
-// Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']);
-// }
-// );
-
-// V2 API route for subscriptions.
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Bill',
- 'prefix' => 'v2/subscriptions',
- 'as' => 'api.v2.subscriptions.',
- ],
- static function (): void {
- // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
- // Route::get('{userGroupBill}', ['uses' => 'ShowController@show', 'as' => 'show']);
- // Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']);
- // Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']);
- }
-);
-
-// V2 API route for piggy banks.
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\PiggyBank',
- 'prefix' => 'v2/piggy-banks',
- 'as' => 'api.v2.piggy-banks.',
- ],
- static function (): void {
- // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
- }
-);
-
-// V2 API route for transaction currencies
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Currency',
+ 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\TransactionCurrency',
'prefix' => 'v2/currencies',
'as' => 'api.v2.currencies.',
],
static function (): void {
- // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+ Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+// Route::post('', ['uses' => 'StoreController@store', 'as' => 'store']);
+// Route::get('{userGroup}', ['uses' => 'ShowController@show', 'as' => 'show']);
+ // Route::put('{userGroup}', ['uses' => 'UpdateController@update', 'as' => 'update']);
+ // Route::post('{userGroup}/use', ['uses' => 'UpdateController@useUserGroup', 'as' => 'use']);
+ // Route::put('{userGroup}/update-membership', ['uses' => 'UpdateController@updateMembership', 'as' => 'updateMembership']);
+ // Route::delete('{userGroup}', ['uses' => 'DestroyController@destroy', 'as' => 'destroy']);
}
);
-// V2 API route for transactions
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Transaction',
- 'prefix' => 'v2/transactions',
- 'as' => 'api.v2.transactions.',
- ],
- static function (): void {
- // Route::post('', ['uses' => 'StoreController@post', 'as' => 'store']);
- // Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']);
- // Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']);
- }
-);
-// infinite (transactions) list:
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
- 'prefix' => 'v2/infinite/transactions',
- 'as' => 'api.v2.infinite.transactions.',
- ],
- static function (): void {
- // Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']);
- }
-);
-
-// V2 API route for budgets and budget limits:
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\Model',
- 'prefix' => 'v2/budgets',
- 'as' => 'api.v2.budgets',
- ],
- static function (): void {
- // Route::get('', ['uses' => 'Budget\IndexController@index', 'as' => 'index']);
- // Route::get('{budget}', ['uses' => 'Budget\ShowController@show', 'as' => 'show']);
- // Route::get('{budget}/limits', ['uses' => 'BudgetLimit\IndexController@index', 'as' => 'budget-limits.index']);
- // Route::get('sum/budgeted', ['uses' => 'Budget\SumController@budgeted', 'as' => 'sum.budgeted']);
- // Route::get('sum/spent', ['uses' => 'Budget\SumController@spent', 'as' => 'sum.spent']);
- // Route::get('{budget}/budgeted', ['uses' => 'Budget\ShowController@budgeted', 'as' => 'budget.budgeted']);
- // Route::get('{budget}/spent', ['uses' => 'Budget\ShowController@spent', 'as' => 'budget.spent']);
- }
-);
-
-// V2 API route for system
-Route::group(
- [
- 'namespace' => 'FireflyIII\Api\V2\Controllers\System',
- 'prefix' => 'v2',
- 'as' => 'api.v2.system.',
- ],
- static function (): void {
- // Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']);
- }
-);
+// V2 API route for Summary boxes
+// BASIC
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
+// 'prefix' => 'v2/summary',
+// 'as' => 'api.v2.summary.',
+// ],
+// static function (): void {
+// // Route::get('basic', ['uses' => 'BasicController@basic', 'as' => 'basic']);
+// }
+//);
+//// V2 API route for all kinds of Transaction lists.
+//// A lot of endpoints involve transactions. So any time Firefly III needs to list transactions
+//// it's coming from these endpoints.
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
+// 'prefix' => 'v2',
+// 'as' => 'api.v2.',
+// ],
+// static function (): void {
+// // basic list
+// // Route::get('transactions', ['uses' => 'TransactionController@list', 'as' => 'transactions.list']);
+//
+// // list by parent or related object.
+// // note how the check is done on the user group, not the user itself.
+// // Route::get('accounts/{userGroupAccount}/transactions', ['uses' => 'AccountController@list', 'as' => 'accounts.transactions']);
+// }
+//);
+// V2 API routes for auto complete
+//
+//// V2 API route for net worth endpoint(s);
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Summary',
+// 'prefix' => 'v2/net-worth',
+// 'as' => 'api.v2.net-worth.',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'NetWorthController@get', 'as' => 'index']);
+// }
+//);
+//
+//// // V2 API route for accounts.
+//// Route::group(
+//// [
+//// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Account',
+//// 'prefix' => 'v2/accounts',
+//// 'as' => 'api.v2.accounts.',
+//// ],
+//// static function (): void {
+//// Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+//// Route::get('{account}', ['uses' => 'ShowController@show', 'as' => 'show']);
+//// Route::put('{account}', ['uses' => 'UpdateController@update', 'as' => 'update']);
+//// }
+//// );
+//
+//// V2 API route for subscriptions.
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Bill',
+// 'prefix' => 'v2/subscriptions',
+// 'as' => 'api.v2.subscriptions.',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+// // Route::get('{userGroupBill}', ['uses' => 'ShowController@show', 'as' => 'show']);
+// // Route::get('sum/paid', ['uses' => 'SumController@paid', 'as' => 'sum.paid']);
+// // Route::get('sum/unpaid', ['uses' => 'SumController@unpaid', 'as' => 'sum.unpaid']);
+// }
+//);
+//
+//// V2 API route for piggy banks.
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\PiggyBank',
+// 'prefix' => 'v2/piggy-banks',
+// 'as' => 'api.v2.piggy-banks.',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+// }
+//);
+//
+//// V2 API route for transaction currencies
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Currency',
+// 'prefix' => 'v2/currencies',
+// 'as' => 'api.v2.currencies.',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'IndexController@index', 'as' => 'index']);
+// }
+//);
+//
+//// V2 API route for transactions
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model\Transaction',
+// 'prefix' => 'v2/transactions',
+// 'as' => 'api.v2.transactions.',
+// ],
+// static function (): void {
+// // Route::post('', ['uses' => 'StoreController@post', 'as' => 'store']);
+// // Route::get('{userGroupTransaction}', ['uses' => 'ShowController@show', 'as' => 'show']);
+// // Route::put('{userGroupTransaction}', ['uses' => 'UpdateController@update', 'as' => 'update']);
+// }
+//);
+//// infinite (transactions) list:
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Transaction\List',
+// 'prefix' => 'v2/infinite/transactions',
+// 'as' => 'api.v2.infinite.transactions.',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'TransactionController@infiniteList', 'as' => 'list']);
+// }
+//);
+//
+//// V2 API route for budgets and budget limits:
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\Model',
+// 'prefix' => 'v2/budgets',
+// 'as' => 'api.v2.budgets',
+// ],
+// static function (): void {
+// // Route::get('', ['uses' => 'Budget\IndexController@index', 'as' => 'index']);
+// // Route::get('{budget}', ['uses' => 'Budget\ShowController@show', 'as' => 'show']);
+// // Route::get('{budget}/limits', ['uses' => 'BudgetLimit\IndexController@index', 'as' => 'budget-limits.index']);
+// // Route::get('sum/budgeted', ['uses' => 'Budget\SumController@budgeted', 'as' => 'sum.budgeted']);
+// // Route::get('sum/spent', ['uses' => 'Budget\SumController@spent', 'as' => 'sum.spent']);
+// // Route::get('{budget}/budgeted', ['uses' => 'Budget\ShowController@budgeted', 'as' => 'budget.budgeted']);
+// // Route::get('{budget}/spent', ['uses' => 'Budget\ShowController@spent', 'as' => 'budget.spent']);
+// }
+//);
+//
+//// V2 API route for system
+//Route::group(
+// [
+// 'namespace' => 'FireflyIII\Api\V2\Controllers\System',
+// 'prefix' => 'v2',
+// 'as' => 'api.v2.system.',
+// ],
+// static function (): void {
+// // Route::get('preferences/{preference}', ['uses' => 'PreferencesController@get', 'as' => 'preferences.get']);
+// }
+//);
+//
// V2 JSON API ROUTES