Clean up API code.

This commit is contained in:
James Cole 2018-07-05 06:10:35 +02:00
parent 7c3aaf7b7c
commit f6f8bb7fd1
21 changed files with 157 additions and 89 deletions

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\AvailableBudgetRequest; use FireflyIII\Api\V1\Requests\AvailableBudgetRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\AvailableBudget; use FireflyIII\Models\AvailableBudget;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
@ -144,11 +145,15 @@ class AvailableBudgetController extends Controller
* @param AvailableBudgetRequest $request * @param AvailableBudgetRequest $request
* *
* @return JsonResponse * @return JsonResponse
* @throws FireflyException
*/ */
public function store(AvailableBudgetRequest $request): JsonResponse public function store(AvailableBudgetRequest $request): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$currency = $this->currencyRepository->findNull($data['transaction_currency_id']); $currency = $this->currencyRepository->findNull($data['transaction_currency_id']);
if (null === $currency) {
throw new FireflyException('Could not find the indicated currency.');
}
$availableBudget = $this->repository->setAvailableBudget($currency, $data['start_date'], $data['end_date'], $data['amount']); $availableBudget = $this->repository->setAvailableBudget($currency, $data['start_date'], $data['end_date'], $data['amount']);
$manager = new Manager; $manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';

View File

@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Bill; use FireflyIII\Models\Bill;
use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\Bill\BillRepositoryInterface;
use FireflyIII\Transformers\BillTransformer; use FireflyIII\Transformers\BillTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@ -54,9 +55,12 @@ class BillController extends Controller
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var BillRepositoryInterface repository */ /** @var BillRepositoryInterface repository */
$this->repository = app(BillRepositoryInterface::class); $this->repository = app(BillRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }

View File

@ -28,6 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Budget; use FireflyIII\Models\Budget;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Transformers\BudgetTransformer; use FireflyIII\Transformers\BudgetTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
@ -53,9 +54,12 @@ class BudgetController extends Controller
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var BudgetRepositoryInterface repository */ /** @var BudgetRepositoryInterface repository */
$this->repository = app(BudgetRepositoryInterface::class); $this->repository = app(BudgetRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }

View File

@ -24,8 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use Carbon\Carbon; use Carbon\Carbon;
use Exception;
use FireflyIII\Api\V1\Requests\AvailableBudgetRequest;
use FireflyIII\Api\V1\Requests\BudgetLimitRequest; use FireflyIII\Api\V1\Requests\BudgetLimitRequest;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\BudgetLimit; use FireflyIII\Models\BudgetLimit;
@ -43,7 +41,6 @@ use League\Fractal\Resource\Collection as FractalCollection;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer; use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
use Throwable;
/** /**
* Class BudgetLimitController * Class BudgetLimitController
@ -206,8 +203,8 @@ class BudgetLimitController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param AvailableBudgetRequest $request * @param BudgetLimitRequest $request
* @param BudgetLimit $budgetLimit * @param BudgetLimit $budgetLimit
* *
* @return JsonResponse * @return JsonResponse
*/ */

View File

@ -28,6 +28,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Category; use FireflyIII\Models\Category;
use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Repositories\Category\CategoryRepositoryInterface;
use FireflyIII\Transformers\CategoryTransformer; use FireflyIII\Transformers\CategoryTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
@ -53,9 +54,12 @@ class CategoryController extends Controller
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var CategoryRepositoryInterface repository */ /** @var CategoryRepositoryInterface repository */
$this->repository = app(CategoryRepositoryInterface::class); $this->repository = app(CategoryRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }

View File

@ -25,6 +25,8 @@ namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Configuration; use FireflyIII\Models\Configuration;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -34,12 +36,33 @@ use Illuminate\Http\Request;
class ConfigurationController extends Controller class ConfigurationController extends Controller
{ {
/** @var UserRepositoryInterface */
private $repository;
/**
* BudgetController constructor.
*/
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
$this->repository = app(UserRepositoryInterface::class);
return $next($request);
}
);
}
/** /**
* @throws FireflyException * @throws FireflyException
*/ */
public function index() public function index()
{ {
if (!auth()->user()->hasRole('owner')) { /** @var User $admin */
$admin = auth()->user();
if (!$this->repository->hasRole($admin, 'owner')) {
throw new FireflyException('No access to method.'); // @codeCoverageIgnore throw new FireflyException('No access to method.'); // @codeCoverageIgnore
} }
$configData = $this->getConfigData(); $configData = $this->getConfigData();
@ -55,7 +78,9 @@ class ConfigurationController extends Controller
*/ */
public function update(Request $request): JsonResponse public function update(Request $request): JsonResponse
{ {
if (!auth()->user()->hasRole('owner')) { /** @var User $admin */
$admin = auth()->user();
if (!$this->repository->hasRole($admin, 'owner')) {
throw new FireflyException('No access to method.'); // @codeCoverageIgnore throw new FireflyException('No access to method.'); // @codeCoverageIgnore
} }
$name = $request->get('name'); $name = $request->get('name');

View File

@ -30,6 +30,7 @@ use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Transformers\CurrencyTransformer; use FireflyIII\Transformers\CurrencyTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
@ -51,18 +52,19 @@ class CurrencyController extends Controller
/** /**
* CurrencyRepository constructor. * CurrencyRepository constructor.
*
* @throws FireflyException
*/ */
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var CurrencyRepositoryInterface repository */ /** @var CurrencyRepositoryInterface repository */
$this->repository = app(CurrencyRepositoryInterface::class); $this->repository = app(CurrencyRepositoryInterface::class);
$this->userRepository = app(UserRepositoryInterface::class); $this->userRepository = app(UserRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }
@ -79,7 +81,10 @@ class CurrencyController extends Controller
*/ */
public function delete(TransactionCurrency $currency): JsonResponse public function delete(TransactionCurrency $currency): JsonResponse
{ {
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { /** @var User $admin */
$admin = auth()->user();
if (!$this->userRepository->hasRole($admin, 'owner')) {
// access denied: // access denied:
throw new FireflyException('No access to method, user is not owner.'); // @codeCoverageIgnore throw new FireflyException('No access to method, user is not owner.'); // @codeCoverageIgnore
} }
@ -155,11 +160,11 @@ class CurrencyController extends Controller
{ {
$currency = $this->repository->store($request->getAll()); $currency = $this->repository->store($request->getAll());
if ($request->boolean('default') === true) {
app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark();
}
if (null !== $currency) { if (null !== $currency) {
if ($request->boolean('default') === true) {
app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark();
}
$manager = new Manager(); $manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl)); $manager->setSerializer(new JsonApiSerializer($baseUrl));

View File

@ -28,11 +28,13 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Services\Currency\ExchangeRateInterface; use FireflyIII\Services\Currency\ExchangeRateInterface;
use FireflyIII\Transformers\CurrencyExchangeRateTransformer; use FireflyIII\Transformers\CurrencyExchangeRateTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use InvalidArgumentException; use InvalidArgumentException;
use League\Fractal\Manager; use League\Fractal\Manager;
use League\Fractal\Resource\Item; use League\Fractal\Resource\Item;
use League\Fractal\Serializer\JsonApiSerializer;
use Log; use Log;
/** /**
@ -52,8 +54,11 @@ class CurrencyExchangeRateController extends Controller
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
$this->repository = app(CurrencyRepositoryInterface::class); $this->repository = app(CurrencyRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }
@ -72,6 +77,7 @@ class CurrencyExchangeRateController extends Controller
// create some objects: // create some objects:
$manager = new Manager; $manager = new Manager;
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl));
// currencies // currencies
$fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR'); $fromCurrency = $this->repository->findByCodeNull($request->get('from') ?? 'EUR');
@ -99,10 +105,12 @@ class CurrencyExchangeRateController extends Controller
// get the exchange rate. // get the exchange rate.
$rate = $this->repository->getExchangeRate($fromCurrency, $toCurrency, $dateObj); $rate = $this->repository->getExchangeRate($fromCurrency, $toCurrency, $dateObj);
if (null === $rate) { if (null === $rate) {
/** @var User $admin */
$admin = auth()->user();
// create service: // create service:
/** @var ExchangeRateInterface $service */ /** @var ExchangeRateInterface $service */
$service = app(ExchangeRateInterface::class); $service = app(ExchangeRateInterface::class);
$service->setUser(auth()->user()); $service->setUser($admin);
// get rate: // get rate:
$rate = $service->getRate($fromCurrency, $toCurrency, $dateObj); $rate = $service->getRate($fromCurrency, $toCurrency, $dateObj);

View File

@ -151,7 +151,10 @@ class LinkTypeController extends Controller
*/ */
public function store(LinkTypeRequest $request): JsonResponse public function store(LinkTypeRequest $request): JsonResponse
{ {
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) { /** @var User $admin */
$admin = auth()->user();
if (!$this->userRepository->hasRole($admin, 'owner')) {
throw new FireflyException('You need the "owner"-role to do this.'); throw new FireflyException('You need the "owner"-role to do this.');
} }
$data = $request->getAll(); $data = $request->getAll();
@ -179,7 +182,11 @@ class LinkTypeController extends Controller
if ($linkType->editable === false) { if ($linkType->editable === false) {
throw new FireflyException(sprintf('You cannot edit this link type (#%d, "%s")', $linkType->id, $linkType->name)); throw new FireflyException(sprintf('You cannot edit this link type (#%d, "%s")', $linkType->id, $linkType->name));
} }
if (!$this->userRepository->hasRole(auth()->user(), 'owner')) {
/** @var User $admin */
$admin = auth()->user();
if (!$this->userRepository->hasRole($admin, 'owner')) {
throw new FireflyException('You need the "owner"-role to do this.'); throw new FireflyException('You need the "owner"-role to do this.');
} }

View File

@ -53,10 +53,12 @@ class PiggyBankController extends Controller
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $user */ /** @var User $admin */
$user = auth()->user(); $admin = auth()->user();
$this->repository = app(PiggyBankRepositoryInterface::class); $this->repository = app(PiggyBankRepositoryInterface::class);
$this->repository->setUser($admin);
return $next($request); return $next($request);
} }

View File

@ -42,20 +42,6 @@ use Preferences;
*/ */
class PreferenceController extends Controller class PreferenceController extends Controller
{ {
public function __construct()
{
parent::__construct();
$this->middleware(
function ($request, $next) {
/** @var User $user */
$user = auth()->user();
// todo add local repositories.
return $next($request);
}
);
}
/** /**
* List all of them. * List all of them.
* *

View File

@ -162,7 +162,7 @@ class RecurrenceController extends Controller
*/ */
public function update(RecurrenceRequest $request, Recurrence $recurrence): JsonResponse public function update(RecurrenceRequest $request, Recurrence $recurrence): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
// //

View File

@ -136,7 +136,7 @@ class RuleController extends Controller
/** /**
* Store new object. * Store new object.
* *
* @param Request $request * @param RuleRequest $request
* *
* @return JsonResponse * @return JsonResponse
*/ */
@ -160,9 +160,9 @@ class RuleController extends Controller
*/ */
public function update(RuleRequest $request, Rule $rule): JsonResponse public function update(RuleRequest $request, Rule $rule): JsonResponse
{ {
$rule = $this->ruleRepository->update($rule, $request->getAll()); $rule = $this->ruleRepository->update($rule, $request->getAll());
$manager = new Manager(); $manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
$manager->setSerializer(new JsonApiSerializer($baseUrl)); $manager->setSerializer(new JsonApiSerializer($baseUrl));
$resource = new Item($rule, new RuleTransformer($this->parameters), 'rules'); $resource = new Item($rule, new RuleTransformer($this->parameters), 'rules');

View File

@ -62,7 +62,7 @@ class RuleGroupController extends Controller
/** /**
* Delete the resource. * Delete the resource.
* *
* @param string $object * @param RuleGroup $ruleGroup
* *
* @return JsonResponse * @return JsonResponse
*/ */
@ -151,8 +151,8 @@ class RuleGroupController extends Controller
} }
/** /**
* @param Request $request * @param RuleGroupRequest $request
* @param string $object * @param RuleGroup $ruleGroup
* *
* @return JsonResponse * @return JsonResponse
*/ */

View File

@ -25,6 +25,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Controllers; namespace FireflyIII\Api\V1\Controllers;
use FireflyIII\Api\V1\Requests\TransactionRequest; use FireflyIII\Api\V1\Requests\TransactionRequest;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Collector\JournalCollectorInterface; use FireflyIII\Helpers\Collector\JournalCollectorInterface;
use FireflyIII\Helpers\Filter\InternalTransferFilter; use FireflyIII\Helpers\Filter\InternalTransferFilter;
use FireflyIII\Helpers\Filter\NegativeAmountFilter; use FireflyIII\Helpers\Filter\NegativeAmountFilter;
@ -33,6 +34,8 @@ use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionType; use FireflyIII\Models\TransactionType;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Transformers\TransactionTransformer; use FireflyIII\Transformers\TransactionTransformer;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
use League\Fractal\Manager; use League\Fractal\Manager;
@ -52,17 +55,18 @@ class TransactionController extends Controller
/** /**
* TransactionController constructor. * TransactionController constructor.
*
* @throws \FireflyIII\Exceptions\FireflyException
*/ */
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->middleware( $this->middleware(
function ($request, $next) { function ($request, $next) {
/** @var User $admin */
$admin = auth()->user();
/** @var JournalRepositoryInterface repository */ /** @var JournalRepositoryInterface repository */
$this->repository = app(JournalRepositoryInterface::class); $this->repository = app(JournalRepositoryInterface::class);
$this->repository->setUser(auth()->user()); $this->repository->setUser($admin);
return $next($request); return $next($request);
} }
@ -74,9 +78,9 @@ class TransactionController extends Controller
* *
* @param \FireflyIII\Models\Transaction $transaction * @param \FireflyIII\Models\Transaction $transaction
* *
* @return \Illuminate\Http\Response * @return JsonResponse
*/ */
public function delete(Transaction $transaction) public function delete(Transaction $transaction): JsonResponse
{ {
$journal = $transaction->transactionJournal; $journal = $transaction->transactionJournal;
$this->repository->destroy($journal); $this->repository->destroy($journal);
@ -87,9 +91,9 @@ class TransactionController extends Controller
/** /**
* @param Request $request * @param Request $request
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function index(Request $request) public function index(Request $request): JsonResponse
{ {
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@ -105,13 +109,16 @@ class TransactionController extends Controller
$manager->setSerializer(new JsonApiSerializer($baseUrl)); $manager->setSerializer(new JsonApiSerializer($baseUrl));
// collect transactions using the journal collector // collect transactions using the journal collector
/** @var User $admin */
$admin = auth()->user();
/** @var JournalCollectorInterface $collector */
$collector = app(JournalCollectorInterface::class); $collector = app(JournalCollectorInterface::class);
$collector->setUser(auth()->user()); $collector->setUser($admin);
$collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation(); $collector->withOpposingAccount()->withCategoryInformation()->withBudgetInformation();
$collector->setAllAssetAccounts(); $collector->setAllAssetAccounts();
// remove internal transfer filter: // remove internal transfer filter:
if (\in_array(TransactionType::TRANSFER, $types)) { if (\in_array(TransactionType::TRANSFER, $types, true)) {
$collector->removeFilter(InternalTransferFilter::class); $collector->removeFilter(InternalTransferFilter::class);
} }
@ -137,9 +144,9 @@ class TransactionController extends Controller
* @param Transaction $transaction * @param Transaction $transaction
* @param string $include * @param string $include
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function show(Request $request, Transaction $transaction, string $include = null) public function show(Request $request, Transaction $transaction, string $include = null): JsonResponse
{ {
$manager = new Manager(); $manager = new Manager();
$baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1';
@ -177,9 +184,10 @@ class TransactionController extends Controller
* *
* @param JournalRepositoryInterface $repository * @param JournalRepositoryInterface $repository
* *
* @return \Illuminate\Http\JsonResponse * @throws FireflyException
* @return JsonResponse
*/ */
public function store(TransactionRequest $request, JournalRepositoryInterface $repository) public function store(TransactionRequest $request, JournalRepositoryInterface $repository): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$data['user'] = auth()->user()->id; $data['user'] = auth()->user()->id;
@ -221,9 +229,9 @@ class TransactionController extends Controller
* @param JournalRepositoryInterface $repository * @param JournalRepositoryInterface $repository
* @param Transaction $transaction * @param Transaction $transaction
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function update(TransactionRequest $request, JournalRepositoryInterface $repository, Transaction $transaction) public function update(TransactionRequest $request, JournalRepositoryInterface $repository, Transaction $transaction): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$data['user'] = auth()->user()->id; $data['user'] = auth()->user()->id;

View File

@ -29,6 +29,7 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Transformers\UserTransformer; use FireflyIII\Transformers\UserTransformer;
use FireflyIII\User; use FireflyIII\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Manager; use League\Fractal\Manager;
@ -49,8 +50,6 @@ class UserController extends Controller
/** /**
* UserController constructor. * UserController constructor.
*
* @throws \FireflyIII\Exceptions\FireflyException
*/ */
public function __construct() public function __construct()
{ {
@ -70,12 +69,14 @@ class UserController extends Controller
* *
* @param \FireflyIII\User $user * @param \FireflyIII\User $user
* *
* @return \Illuminate\Http\Response * @return JsonResponse
* @throws FireflyException * @throws FireflyException
*/ */
public function delete(User $user) public function delete(User $user): JsonResponse
{ {
if (auth()->user()->hasRole('owner')) { /** @var User $admin */
$admin = auth()->user();
if ($this->repository->hasRole($admin, 'owner')) {
$this->repository->destroy($user); $this->repository->destroy($user);
return response()->json([], 204); return response()->json([], 204);
@ -88,9 +89,9 @@ class UserController extends Controller
* *
* @param Request $request * @param Request $request
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function index(Request $request) public function index(Request $request): JsonResponse
{ {
// user preferences // user preferences
$pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data; $pageSize = (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data;
@ -120,9 +121,9 @@ class UserController extends Controller
* @param Request $request * @param Request $request
* @param User $user * @param User $user
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function show(Request $request, User $user) public function show(Request $request, User $user): JsonResponse
{ {
// make manager // make manager
$manager = new Manager(); $manager = new Manager();
@ -142,9 +143,9 @@ class UserController extends Controller
/** /**
* @param UserRequest $request * @param UserRequest $request
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function store(UserRequest $request) public function store(UserRequest $request): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$user = $this->repository->store($data); $user = $this->repository->store($data);
@ -168,9 +169,9 @@ class UserController extends Controller
* @param UserRequest $request * @param UserRequest $request
* @param User $user * @param User $user
* *
* @return \Illuminate\Http\JsonResponse * @return JsonResponse
*/ */
public function update(UserRequest $request, User $user) public function update(UserRequest $request, User $user): JsonResponse
{ {
$data = $request->getAll(); $data = $request->getAll();
$user = $this->repository->update($user, $data); $user = $this->repository->update($user, $data);

View File

@ -23,7 +23,6 @@
declare(strict_types=1); declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
/** /**
* Class AccountRequest * Class AccountRequest
*/ */

View File

@ -26,7 +26,6 @@ namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Models\Bill; use FireflyIII\Models\Bill;
use FireflyIII\Models\ImportJob; use FireflyIII\Models\ImportJob;
use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionJournal;
use FireflyIII\Rules\IsBase64;
use FireflyIII\Rules\IsValidAttachmentModel; use FireflyIII\Rules\IsValidAttachmentModel;
/** /**

View File

@ -28,6 +28,7 @@ use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType; use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\BelongsUser;
use FireflyIII\User;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
use InvalidArgumentException; use InvalidArgumentException;
use Log; use Log;
@ -196,6 +197,8 @@ class RecurrenceRequest extends Request
*/ */
protected function assetAccountExists(Validator $validator, ?int $accountId, ?string $accountName, string $idField, string $nameField): ?Account protected function assetAccountExists(Validator $validator, ?int $accountId, ?string $accountName, string $idField, string $nameField): ?Account
{ {
/** @var User $admin */
$admin = auth()->user();
$accountId = (int)$accountId; $accountId = (int)$accountId;
$accountName = (string)$accountName; $accountName = (string)$accountName;
// both empty? hard exit. // both empty? hard exit.
@ -207,7 +210,7 @@ class RecurrenceRequest extends Request
// ID belongs to user and is asset account: // ID belongs to user and is asset account:
/** @var AccountRepositoryInterface $repository */ /** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
$repository->setUser(auth()->user()); $repository->setUser($admin);
$set = $repository->getAccountsById([$accountId]); $set = $repository->getAccountsById([$accountId]);
Log::debug(sprintf('Count of accounts found by ID %d is: %d', $accountId, $set->count())); Log::debug(sprintf('Count of accounts found by ID %d is: %d', $accountId, $set->count()));
if ($set->count() === 1) { if ($set->count() === 1) {
@ -302,17 +305,19 @@ class RecurrenceRequest extends Request
*/ */
protected function opposingAccountExists(Validator $validator, string $type, ?int $accountId, ?string $accountName, string $idField): ?Account protected function opposingAccountExists(Validator $validator, string $type, ?int $accountId, ?string $accountName, string $idField): ?Account
{ {
/** @var User $admin */
$admin = auth()->user();
$accountId = (int)$accountId; $accountId = (int)$accountId;
$accountName = (string)$accountName; $accountName = (string)$accountName;
// both empty? done! // both empty? done!
if ($accountId < 1 && \strlen($accountName) === 0) { if ($accountId < 1 && '' === $accountName) {
return null; return null;
} }
if ($accountId !== 0) { if ($accountId !== 0) {
// ID belongs to user and is $type account: // ID belongs to user and is $type account:
/** @var AccountRepositoryInterface $repository */ /** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
$repository->setUser(auth()->user()); $repository->setUser($admin);
$set = $repository->getAccountsById([$accountId]); $set = $repository->getAccountsById([$accountId]);
if ($set->count() === 1) { if ($set->count() === 1) {
/** @var Account $first */ /** @var Account $first */

View File

@ -30,6 +30,7 @@ use FireflyIII\Models\AccountType;
use FireflyIII\Models\Transaction; use FireflyIII\Models\Transaction;
use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\BelongsUser;
use FireflyIII\User;
use Illuminate\Validation\Validator; use Illuminate\Validation\Validator;
@ -200,11 +201,12 @@ class TransactionRequest extends Request
*/ */
protected function assetAccountExists(Validator $validator, ?int $accountId, ?string $accountName, string $idField, string $nameField): ?Account protected function assetAccountExists(Validator $validator, ?int $accountId, ?string $accountName, string $idField, string $nameField): ?Account
{ {
/** @var User $admin */
$admin = auth()->user();
$accountId = (int)$accountId; $accountId = (int)$accountId;
$accountName = (string)$accountName; $accountName = (string)$accountName;
// both empty? hard exit. // both empty? hard exit.
if ($accountId < 1 && \strlen($accountName) === 0) { if ($accountId < 1 && '' === $accountName) {
$validator->errors()->add($idField, trans('validation.filled', ['attribute' => $idField])); $validator->errors()->add($idField, trans('validation.filled', ['attribute' => $idField]));
return null; return null;
@ -212,7 +214,7 @@ class TransactionRequest extends Request
// ID belongs to user and is asset account: // ID belongs to user and is asset account:
/** @var AccountRepositoryInterface $repository */ /** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
$repository->setUser(auth()->user()); $repository->setUser($admin);
$set = $repository->getAccountsById([$accountId]); $set = $repository->getAccountsById([$accountId]);
if ($set->count() === 1) { if ($set->count() === 1) {
/** @var Account $first */ /** @var Account $first */
@ -271,7 +273,7 @@ class TransactionRequest extends Request
} }
// no valid descriptions and empty journal description? error. // no valid descriptions and empty journal description? error.
if ($validDescriptions === 0 && \strlen($journalDescription) === 0) { if ($validDescriptions === 0 && '' === $journalDescription) {
$validator->errors()->add('description', trans('validation.filled', ['attribute' => trans('validation.attributes.description')])); $validator->errors()->add('description', trans('validation.filled', ['attribute' => trans('validation.attributes.description')]));
} }
@ -290,7 +292,7 @@ class TransactionRequest extends Request
foreach ($transactions as $index => $transaction) { foreach ($transactions as $index => $transaction) {
$description = (string)($transaction['description'] ?? ''); $description = (string)($transaction['description'] ?? '');
// filled description is mandatory for split transactions. // filled description is mandatory for split transactions.
if (\count($transactions) > 1 && \strlen($description) === 0) { if ('' === $description && \count($transactions) > 1) {
$validator->errors()->add( $validator->errors()->add(
'transactions.' . $index . '.description', 'transactions.' . $index . '.description',
trans('validation.filled', ['attribute' => trans('validation.attributes.transaction_description')]) trans('validation.filled', ['attribute' => trans('validation.attributes.transaction_description')])
@ -358,17 +360,19 @@ class TransactionRequest extends Request
*/ */
protected function opposingAccountExists(Validator $validator, string $type, ?int $accountId, ?string $accountName, string $idField): ?Account protected function opposingAccountExists(Validator $validator, string $type, ?int $accountId, ?string $accountName, string $idField): ?Account
{ {
/** @var User $admin */
$admin = auth()->user();
$accountId = (int)$accountId; $accountId = (int)$accountId;
$accountName = (string)$accountName; $accountName = (string)$accountName;
// both empty? done! // both empty? done!
if ($accountId < 1 && \strlen($accountName) === 0) { if ($accountId < 1 && '' === $accountName) {
return null; return null;
} }
if ($accountId !== 0) { if ($accountId !== 0) {
// ID belongs to user and is $type account: // ID belongs to user and is $type account:
/** @var AccountRepositoryInterface $repository */ /** @var AccountRepositoryInterface $repository */
$repository = app(AccountRepositoryInterface::class); $repository = app(AccountRepositoryInterface::class);
$repository->setUser(auth()->user()); $repository->setUser($admin);
$set = $repository->getAccountsById([$accountId]); $set = $repository->getAccountsById([$accountId]);
if ($set->count() === 1) { if ($set->count() === 1) {
/** @var Account $first */ /** @var Account $first */

View File

@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Api\V1\Requests; namespace FireflyIII\Api\V1\Requests;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\User; use FireflyIII\User;
@ -43,7 +44,11 @@ class UserRequest extends Request
} }
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
if (!$user->hasRole('owner')) {
/** @var UserRepositoryInterface $repository */
$repository = app(UserRepositoryInterface::class);
if (!$repository->hasRole($user, 'owner')) {
return false; // @codeCoverageIgnore return false; // @codeCoverageIgnore
} }