Ejemplo n.º 1
0
        public async void TransferFundNormally()
        {
            var transferFundDetails = new TransferFundDto()
            {
                DestinationAccountNumber = "0000000002",
                Amount = 5,
            };
            var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails);

            Assert.True(transferFundRequest.IsSuccess);
        }
        public async Task <IActionResult> TransferFund([FromBody] TransferFundDto transferDetails)
        {
            var currentUserId   = Convert.ToInt32(AES.Decrypt(User.FindFirst("LoggedInUserId").Value));
            var processTransfer = await _userAccountService.TransferFundToOtherUser(currentUserId, transferDetails);

            if (!processTransfer.IsSuccess)
            {
                return(BadRequest(processTransfer.Message));
            }
            return(Ok("Successfull Fund Transfer"));
        }
Ejemplo n.º 3
0
        public async void SenderBalanceIsGreaterThanAmountToBeSent()
        {
            var transferFundDetails = new TransferFundDto()
            {
                DestinationAccountNumber = "0000000002",
                Amount = 99999,
            };
            var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails);

            Assert.False(transferFundRequest.IsSuccess);
        }
Ejemplo n.º 4
0
        public async void SenderNotFound()
        {
            var transferFundDetails = new TransferFundDto()
            {
                DestinationAccountNumber = "0000000002",
                Amount = 99999,
            };
            var transferFundRequest = await _userAccountService.TransferFundToOtherUser(0, transferFundDetails);

            Assert.False(transferFundRequest.IsSuccess);
        }
Ejemplo n.º 5
0
        public async void AmountIsZeroOrNegative()
        {
            var transferFundDetails = new TransferFundDto()
            {
                DestinationAccountNumber = "0000000002",
                Amount = 0,
            };
            var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails);

            Assert.False(transferFundRequest.IsSuccess);
        }
Ejemplo n.º 6
0
        public async void DestinationAccountEmpty()
        {
            var transferFundDetails = new TransferFundDto()
            {
                DestinationAccountNumber = string.Empty,
                Amount = 200,
            };
            var transferFundRequest = await _userAccountService.TransferFundToOtherUser(1, transferFundDetails);

            Assert.False(transferFundRequest.IsSuccess);
        }
Ejemplo n.º 7
0
        public async Task <TransactionResultDto> TransferFundToOtherUser(int userId, TransferFundDto transferDetail)
        {
            if (string.IsNullOrEmpty(transferDetail.DestinationAccountNumber))
            {
                return(new TransactionResultDto("Destination Account Number is Empty"));
            }
            if (transferDetail.Amount <= 0)
            {
                return(new TransactionResultDto("Amount should be greater than 0"));
            }
            var sender = await _context.UserAccounts.FindAsync(userId);

            if (sender == null)
            {
                return(new TransactionResultDto("Sender Not Found!"));
            }

            if (transferDetail.Amount > sender.Balance)
            {
                return(new TransactionResultDto("Amount to transfer is greater than existing Balance!"));
            }

            var senderCurrentBalance = sender.Balance;

            var recipient = await _context.UserAccounts.FirstOrDefaultAsync(x => x.AccountNumber == transferDetail.DestinationAccountNumber);

            if (recipient == null)
            {
                return(new TransactionResultDto("Destination Account Number Not Found"));
            }

            var reciepientCurrentBalance = recipient.Balance;

            sender.Balance    = senderCurrentBalance - transferDetail.Amount;
            recipient.Balance = reciepientCurrentBalance + transferDetail.Amount;

            var senderTransaction = new Transaction()
            {
                TransactionType        = TransactionType.TRANSFER.ToString(),
                RecipientAccountNumber = transferDetail.DestinationAccountNumber,
                AmountTransferred      = transferDetail.Amount,
                SenderAccountNumber    = sender.AccountNumber,
                BeforeBalance          = senderCurrentBalance,
                AfterBalance           = senderCurrentBalance - transferDetail.Amount,
                UserAccountId          = userId
            };
            var receiptiendTransaction = new Transaction()
            {
                TransactionType        = TransactionType.TRANSFER.ToString(),
                SenderAccountNumber    = sender.AccountNumber,
                RecipientAccountNumber = recipient.AccountNumber,
                AmountTransferred      = transferDetail.Amount,
                BeforeBalance          = reciepientCurrentBalance,
                AfterBalance           = reciepientCurrentBalance + transferDetail.Amount,
                UserAccountId          = recipient.Id
            };

            _context.Add(senderTransaction);
            _context.Add(receiptiendTransaction);

            if (await _context.SaveChangesAsync() == 0)
            {
                return(new TransactionResultDto("No Transfer Happened"));
            }
            return(new TransactionResultDto());
        }