public IActionResult Create([FromBody] CreateTransactionRequestModel request)
        {
            if (request == null)
            {
                return(BadRequest(GetInvalidRequestResponse(new Exception("Request is empty."))));
            }

            try
            {
                Precondition.CheckArgument(!string.IsNullOrEmpty(request.AccountNumber), "AccountNumber", "Account Number cannot be empty.");
                Precondition.CheckArgument(!string.IsNullOrEmpty(request.BSB), "BSB", "BSB cannot be empty.");
                Precondition.CheckArgument(!string.IsNullOrEmpty(request.FirstName), "First Name", "First Name cannot be empty.");
                Precondition.CheckArgument(!string.IsNullOrEmpty(request.AccountNumber), "Last Name", "Last Name cannot be empty.");
                Precondition.CheckArgument(!(request.Amount <= 1.00), "Amount", "Amount is invalid.");

                _log.LogInformation("\nTransactionController.Create - Started. - " + DateTime.Now);

                TransactionsApiResult transactionsApiResult;
                var httpStatusCode = _transactionService.CreateTransaction(
                    new CreateTranscationRequest
                {
                    AccountNumber = request.AccountNumber,
                    BSB           = request.BSB,
                    FirstName     = request.FirstName,
                    LastName      = request.LastName,
                    Reference     = request.Reference,
                    Amount        = request.Amount
                }, out transactionsApiResult);

                _log.LogInformation("\nTransactionController.Create - Ended. - " + DateTime.Now);
                return(StatusCode(httpStatusCode.GetHashCode(), transactionsApiResult));
            }
            catch (ArgumentException ArgEx)
            {
                _log.LogError(ArgEx, "\nTransactionController.Create failed. - " + DateTime.Now);
                return(BadRequest(new TransactionsApiResult
                {
                    Status = ApiStatusCode.Error,
                    code = 10,
                    Message = ArgEx.Message,
                    Data = ArgEx.InnerException
                }));
            }
            catch (Exception ex)
            {
                _log.LogError(ex, "TransactionController.Create failed.");
                return(StatusCode(500, GetInternalServerErrorResponse(ex)));
            }
        }
        public async Task <ActionResult <CreateTransactionResponseModel> > CreateTransaction(CreateTransactionRequestModel model)
        {
            if (model.Amount <= 0)
            {
                return(BadRequest("Invalid amount."));
            }
            string email     = HttpContext.User.Identity.Name;
            var    sender    = _authService.FindUser(email);
            var    recipient = _authService.FindUserByName(model.Name);

            if (recipient == null)
            {
                return(BadRequest("Invalid username of recipient."));
            }
            if (model.Amount > sender.Balance)
            {
                return(BadRequest("Amount greater than your balance."));
            }
            Transaction transaction = await _paymentService.CreateTransactionAsync(sender, recipient, model.Amount);

            if (transaction == null)
            {
                return(BadRequest("Something went wroong."));
            }

            return(new CreateTransactionResponseModel()
            {
                Trans_token = new TransactionToken[]
                {
                    new TransactionToken()
                    {
                        Id = transaction.Id,
                        Date = transaction.CreatedAt.ToString(),
                        Amount = transaction.Amount,
                        Balance = transaction.BalanceRecipient,
                        Username = model.Name
                    }
                }
            });
        }