public async Task <Result> ApplyTransaction(Transaction transaction) // AccountHolder accountHolder
        {
            try
            {
                var accounts = new Dictionary <Guid, Account>();

                var validationResult = _transactionValidationService.ValidateTransaction(transaction);

                if (validationResult.IsSuccessful) // TODO: Convert to Result<T>
                {
                    foreach (var entry in transaction.Entries)
                    {
                        Account account;
                        if (!accounts.TryGetValue(entry.AccountId, out account))
                        {
                            account = await _accountRepository.GetAccountAsync(entry.AccountId);
                        }

                        if (null == account)
                        {
                            throw new InvalidOperationException("Invalid AccountId");
                        }
                        accounts.Add(account.AccountId, account);
                        account.Entries.Add(entry);
                    }
                }

                return(_resultFactory.Success <Entry>(newEntry));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                throw;
            }
        }