Add debug information.

This commit is contained in:
James Cole 2020-02-22 11:05:16 +01:00
parent 1d8f34275a
commit 6c163ebef3
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
10 changed files with 68 additions and 14 deletions

View File

@ -32,6 +32,7 @@ use Illuminate\Http\Response;
use Illuminate\Pagination\LengthAwarePaginator;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use League\Fractal\Resource\Collection as FractalCollection;
use Log;
/**
* Class AccountController
@ -62,6 +63,7 @@ class AccountController extends Controller
*/
public function search(Request $request)
{
Log::debug('Now in account search()');
$manager = $this->getManager();
$query = $request->get('query');
$field = $request->get('field');
@ -70,6 +72,8 @@ class AccountController extends Controller
return response(null, 422);
}
$types = $this->mapAccountTypes($type);
Log::debug(sprintf('Going to search for "%s" in types', $query), $types);
/** @var AccountSearch $search */
$search = app(AccountSearch::class);
$search->setUser(auth()->user());
@ -79,6 +83,8 @@ class AccountController extends Controller
$accounts = $search->search();
Log::debug(sprintf('Found %d accounts', $accounts->count()));
/** @var AccountTransformer $transformer */
$transformer = app(AccountTransformer::class);
$transformer->setParameters($this->parameters);

View File

@ -274,6 +274,7 @@ class TransactionController extends Controller
*/
public function store(TransactionStoreRequest $request): JsonResponse
{
Log::debug('Now in API TransactionController::store()');
$data = $request->getAll();
$data['user'] = auth()->user()->id;
@ -283,6 +284,7 @@ class TransactionController extends Controller
try {
$transactionGroup = $this->groupRepository->store($data);
} catch (DuplicateTransactionException $e) {
Log::warning('Caught a duplicate. Return error message.');
// return bad validation message.
// TODO use Laravel's internal validation thing to do this.
$response = [

View File

@ -30,7 +30,7 @@ use FireflyIII\Rules\IsDateOrTime;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\Validation\TransactionValidation;
use Illuminate\Validation\Validator;
use Log;
/**
* Class TransactionStoreRequest
@ -46,6 +46,7 @@ class TransactionStoreRequest extends Request
*/
public function authorize(): bool
{
Log::debug('Authorize TransactionStoreRequest');
// Only allow authenticated users
return auth()->check();
}
@ -57,6 +58,7 @@ class TransactionStoreRequest extends Request
*/
public function getAll(): array
{
Log::debug('get all data in TransactionStoreRequest');
$data = [
'group_title' => $this->string('group_title'),
'error_if_duplicate_hash' => $this->boolean('error_if_duplicate_hash'),
@ -73,6 +75,7 @@ class TransactionStoreRequest extends Request
*/
public function rules(): array
{
Log::debug('Collect rules of TransactionStoreRequest');
$rules = [
// basic fields for group:
'group_title' => 'between:1,1000|nullable',

View File

@ -26,6 +26,7 @@ namespace FireflyIII\Factory;
use FireflyIII\Exceptions\DuplicateTransactionException;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\User;
use Log;
/**
* Class TransactionGroupFactory
@ -60,7 +61,12 @@ class TransactionGroupFactory
$this->journalFactory->setUser($this->user);
$this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash'] ?? false);
try {
$collection = $this->journalFactory->create($data);
} catch(DuplicateTransactionException $e) {
Log::warning('GroupFactory::create() caught journalFactory::create() with a duplicate!');
throw new DuplicateTransactionException($e->getMessage());
}
$title = $data['group_title'] ?? null;
$title = '' === $title ? null : $title;

View File

@ -129,11 +129,11 @@ class TransactionJournalFactory
public function create(array $data): Collection
{
// convert to special object.
$data = new NullArrayObject($data);
$dataObject = new NullArrayObject($data);
Log::debug('Start of TransactionJournalFactory::create()');
$collection = new Collection;
$transactions = $data['transactions'] ?? [];
$transactions = $dataObject['transactions'] ?? [];
if (0 === count($transactions)) {
Log::error('There are no transactions in the array, the TransactionJournalFactory cannot continue.');
@ -145,7 +145,12 @@ class TransactionJournalFactory
Log::debug(sprintf('Now creating journal %d/%d', $index + 1, count($transactions)));
Log::debug('Going to call createJournal', $row);
try {
$journal = $this->createJournal(new NullArrayObject($row));
} catch (DuplicateTransactionException|Exception $e) {
Log::warning('TransactionJournalFactory::create() caught a duplicate journal in createJournal()');
throw new DuplicateTransactionException($e->getMessage());
}
if (null !== $journal) {
$collection->push($journal);
}
@ -395,17 +400,20 @@ class TransactionJournalFactory
*/
private function errorIfDuplicate(string $hash): void
{
Log::debug(sprintf('In errorIfDuplicate(%s)', $hash));
if (false === $this->errorOnHash) {
return;
}
$result = null;
if ($this->errorOnHash) {
Log::debug('Will verify duplicate!');
/** @var TransactionJournalMeta $result */
$result = TransactionJournalMeta::where('data', json_encode($hash, JSON_THROW_ON_ERROR))
->with(['transactionJournal', 'transactionJournal.transactionGroup'])
->first();
}
if (null !== $result) {
Log::warning('Found a duplicate!');
throw new DuplicateTransactionException(sprintf('Duplicate of transaction #%d.', $result->transactionJournal->transaction_group_id));
}
}
@ -526,6 +534,9 @@ class TransactionJournalFactory
public function setErrorOnHash(bool $errorOnHash): void
{
$this->errorOnHash = $errorOnHash;
if (true === $errorOnHash) {
Log::info('Will trigger duplication alert for this journal.');
}
}

View File

@ -45,6 +45,7 @@ use FireflyIII\Services\Internal\Update\GroupUpdateService;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Builder;
use Log;
/**
* Class TransactionGroupRepository
@ -337,8 +338,14 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterface
/** @var TransactionGroupFactory $factory */
$factory = app(TransactionGroupFactory::class);
$factory->setUser($this->user);
try {
return $factory->create($data);
} catch (DuplicateTransactionException $e) {
Log::warning('Group repository caught group factory with a duplicate exception!');
throw new DuplicateTransactionException($e->getMessage());
}
}
/**

View File

@ -41,7 +41,8 @@ trait AccountFilter
protected function mapAccountTypes(string $type): array
{
$types = [
'all' => [AccountType::DEFAULT, AccountType::CASH, AccountType::ASSET, AccountType::EXPENSE, AccountType::REVENUE,
'all' => [AccountType::DEFAULT, AccountType::CASH,
AccountType::ASSET, AccountType::EXPENSE, AccountType::REVENUE,
AccountType::INITIAL_BALANCE, AccountType::BENEFICIARY, AccountType::IMPORT, AccountType::RECONCILIATION,
AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE],
'asset' => [AccountType::DEFAULT, AccountType::ASSET,],

View File

@ -82,8 +82,8 @@ class AccountSearch implements GenericSearchInterface
$query->orWhere(
static function (Builder $q) use ($originalQuery) {
$json = json_encode($originalQuery, JSON_THROW_ON_ERROR);
$q->where('account_meta.name', 'account_number');
$q->where('account_meta.data', $json);
$q->where('account_meta.name', '=', 'account_number');
$q->where('account_meta.data', 'LIKE', $json);
}
);
break;
@ -107,7 +107,6 @@ class AccountSearch implements GenericSearchInterface
);
break;
}
return $query->distinct()->get(['accounts.*']);
}

View File

@ -559,7 +559,7 @@ class AccountValidator
// if both values are NULL we return false,
// because the source of a withdrawal can't be created.
$this->sourceError = (string)trans('validation.transfer_source_need_data');
Log::warning('Not a valid source, need more data.');
return false;
}
@ -567,10 +567,11 @@ class AccountValidator
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
if (null === $search) {
$this->sourceError = (string)trans('validation.transfer_source_bad_data', ['id' => $accountId, 'name' => $accountName]);
Log::warning('Not a valid source, cant find it.', $validTypes);
return false;
}
$this->source = $search;
Log::debug('Valid source!');
return true;
}
@ -634,6 +635,7 @@ class AccountValidator
// if both values are NULL we return false,
// because the source of a withdrawal can't be created.
$this->sourceError = (string)trans('validation.withdrawal_source_need_data');
Log::warning('Not a valid source. Need more data.');
return false;
}
@ -642,10 +644,11 @@ class AccountValidator
$search = $this->findExistingAccount($validTypes, (int)$accountId, (string)$accountName);
if (null === $search) {
$this->sourceError = (string)trans('validation.withdrawal_source_bad_data', ['id' => $accountId, 'name' => $accountName]);
Log::warning('Not a valid source. Cant find it.', $validTypes);
return false;
}
$this->source = $search;
Log::debug('Valid source account!');
return true;
}

View File

@ -42,6 +42,7 @@ trait TransactionValidation
*/
public function validateAccountInformation(Validator $validator): void
{
Log::debug('Now in validateAccountInformation()');
$transactions = $this->getTransactionsArray($validator);
$data = $validator->getData();
@ -88,6 +89,7 @@ trait TransactionValidation
*/
public function validateAccountInformationUpdate(Validator $validator): void
{
Log::debug('Now in validateAccountInformationUpdate()');
$transactions = $this->getTransactionsArray($validator);
/** @var AccountValidator $accountValidator */
@ -141,9 +143,10 @@ trait TransactionValidation
*/
public function validateDescriptions(Validator $validator): void
{
Log::debug('Now in validateDescriptions()');
$transactions = $this->getTransactionsArray($validator);
$validDescriptions = 0;
foreach ($transactions as $index => $transaction) {
foreach ($transactions as $transaction) {
if ('' !== (string)($transaction['description'] ?? null)) {
$validDescriptions++;
}
@ -164,6 +167,7 @@ trait TransactionValidation
*/
public function validateForeignCurrencyInformation(Validator $validator): void
{
Log::debug('Now in validateForeignCurrencyInformation()');
$transactions = $this->getTransactionsArray($validator);
foreach ($transactions as $index => $transaction) {
@ -191,6 +195,7 @@ trait TransactionValidation
*/
public function validateGroupDescription(Validator $validator): void
{
Log::debug('Now in validateGroupDescription()');
$data = $validator->getData();
$transactions = $this->getTransactionsArray($validator);
@ -207,6 +212,7 @@ trait TransactionValidation
*/
public function validateOneRecurrenceTransaction(Validator $validator): void
{
Log::debug('Now in validateOneRecurrenceTransaction()');
$transactions = $this->getTransactionsArray($validator);
// need at least one transaction
@ -222,6 +228,7 @@ trait TransactionValidation
*/
public function validateOneRecurrenceTransactionUpdate(Validator $validator): void
{
Log::debug('Now in validateOneRecurrenceTransactionUpdate()');
$transactions = $this->getTransactionsArray($validator);
// need at least one transaction
if (0 === count($transactions)) {
@ -236,11 +243,15 @@ trait TransactionValidation
*/
public function validateOneTransaction(Validator $validator): void
{
Log::debug('Now in validateOneTransaction()');
$transactions = $this->getTransactionsArray($validator);
// need at least one transaction
if (0 === count($transactions)) {
$validator->errors()->add('transactions.0.description', (string)trans('validation.at_least_one_transaction'));
Log::debug('Added error: at_least_one_transaction.');
return;
}
Log::debug('Added NO errors.');
}
/**
@ -250,6 +261,7 @@ trait TransactionValidation
*/
public function validateTransactionTypes(Validator $validator): void
{
Log::debug('Now in validateTransactionTypes()');
$transactions = $this->getTransactionsArray($validator);
$types = [];
@ -276,6 +288,7 @@ trait TransactionValidation
*/
public function validateTransactionTypesForUpdate(Validator $validator): void
{
Log::debug('Now in validateTransactionTypesForUpdate()');
$transactions = $this->getTransactionsArray($validator);
$types = [];
foreach ($transactions as $index => $transaction) {
@ -383,6 +396,7 @@ trait TransactionValidation
*/
private function validateEqualAccounts(Validator $validator): void
{
Log::debug('Now in validateEqualAccounts()');
$data = $validator->getData();
$transactions = $data['transactions'] ?? [];
@ -433,6 +447,7 @@ trait TransactionValidation
*/
private function validateEqualAccountsForUpdate(Validator $validator, TransactionGroup $transactionGroup): void
{
Log::debug('Now in validateEqualAccountsForUpdate()');
$data = $validator->getData();
$transactions = $data['transactions'] ?? [];
@ -525,6 +540,7 @@ trait TransactionValidation
*/
private function validateJournalIds(Validator $validator, TransactionGroup $transactionGroup): void
{
Log::debug('Now in validateJournalIds()');
$data = $validator->getData();
$transactions = $data['transactions'] ?? [];