public async Task <IActionResult> MakeTransactionResponse([FromBody] ResponseWalletTransactionDto model, long requestUserId)
        {
            try
            {
                await _walletTransactionService.MakeTransactionResponse(model, requestUserId);

                return(Ok("Transaction Response was Successful"));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Ejemplo n.º 2
0
        public async Task <bool> InitiateTransaction(ResponseWalletTransactionDto response, long id)
        {
            var initiatedResponse = await _weGOPAYDbContext.WalletTransaction.Where(x => x.Id == id).FirstOrDefaultAsync();

            if (initiatedResponse != null && initiatedResponse.TransactionStatus == (int)TransactionStatus.Requested)
            {
                //Update the wallet Status to Processing
                {
                    initiatedResponse.TransactionStatus = (int)TransactionStatus.Processing;
                }
                _weGOPAYDbContext.Entry(initiatedResponse).State = EntityState.Modified;
                await _weGOPAYDbContext.SaveChangesAsync();
            }
            return(false);
        }
        public async Task <IActionResult> InitiateTransaction([FromBody] ResponseWalletTransactionDto model, long id)
        {
            try
            {
                var response = await _walletTransactionService.InitiateTransaction(model, id);

                if (response == true)
                {
                    return(Ok("Transaction Response Initiated"));
                }
                return(Ok("No Transaction Request to Initiate"));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Ejemplo n.º 4
0
        public async Task MakeTransactionResponse(ResponseWalletTransactionDto model, long requestId)
        {
            #region Transaction Response Completion
            try
            {
                #region Wallets/WalletTransaction Queries

                //Checks the Response Client wallet
                var getResponseWallet = await _weGOPAYDbContext.Wallet.Where(s => s.UserId == model.UserId).FirstOrDefaultAsync();

                //Checks the requested wallet transaction
                var nRequest = await _weGOPAYDbContext.WalletTransaction.Where(x => x.Id == requestId).FirstOrDefaultAsync();

                //Checks the Request Client wallet
                var getRequestWallet = await _weGOPAYDbContext.Wallet.Where(s => s.UserId == nRequest.UserId).FirstOrDefaultAsync();

                #endregion



                #region Naira to Dollar Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira && getRequestWallet.NairaBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.USDollar)
                            {
                                var currentNairaBalance  = getRequestWallet.NairaBalance - nRequest.Amount;
                                var currentDollarBalance = getRequestWallet.USDBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.NairaBalance = currentNairaBalance;
                                getRequestWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentDollarBalance = getResponseWallet.USDBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentNairaBalance  = getResponseWallet.NairaBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.USDBalance   = currentDollarBalance;
                                getResponseWallet.NairaBalance = currentNairaBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Dollar to Naira Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.USDollar && getRequestWallet.USDBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentDollarBalance = getRequestWallet.USDBalance - nRequest.Amount;
                                var currentNairaBalance  = getRequestWallet.NairaBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.NairaBalance = currentNairaBalance;
                                getRequestWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentNairaBalance  = getResponseWallet.NairaBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentDollarBalance = getResponseWallet.USDBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.USDBalance   = currentDollarBalance;
                                getResponseWallet.NairaBalance = currentNairaBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Dollar to Pounds Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.USDollar && getRequestWallet.USDBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentPoundBalance  = getRequestWallet.PoundBalance - nRequest.Amount;
                                var currentDollarBalance = getRequestWallet.USDBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.PoundBalance = currentPoundBalance;
                                getRequestWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.USDollar)
                            {
                                var currentPoundBalance  = getResponseWallet.NairaBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentDollarBalance = getResponseWallet.USDBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Pounds to Dollar Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound && getRequestWallet.USDBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.USDollar)
                            {
                                var currentPoundBalance  = getRequestWallet.PoundBalance - nRequest.Amount;
                                var currentDollarBalance = getRequestWallet.USDBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.PoundBalance = currentPoundBalance;
                                getRequestWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentDollarBalance = getResponseWallet.USDBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentPoundBalance  = getResponseWallet.PoundBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.USDBalance   = currentDollarBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Pounds to Euro Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound && getRequestWallet.USDBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.Euro)
                            {
                                var currentPoundBalance = getRequestWallet.PoundBalance - nRequest.Amount;
                                var currentEuroBalance  = getRequestWallet.EuroBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.PoundBalance = currentPoundBalance;
                                getRequestWallet.USDBalance   = currentEuroBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentEuroBalance  = getResponseWallet.EuroBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentPoundBalance = getResponseWallet.PoundBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.EuroBalance  = currentEuroBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Euro to Pounds Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.Euro && getRequestWallet.USDBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentEuroBalance  = getRequestWallet.EuroBalance - nRequest.Amount;
                                var currentPoundBalance = getRequestWallet.PoundBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.PoundBalance = currentPoundBalance;
                                getRequestWallet.USDBalance   = currentEuroBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentPoundBalance = getResponseWallet.PoundBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentEuroBalance  = getResponseWallet.EuroBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.EuroBalance  = currentEuroBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Naira to Pounds Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira && getRequestWallet.NairaBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.BritishPound)
                            {
                                var currentNairaBalance = getRequestWallet.NairaBalance - nRequest.Amount;
                                var currentPoundBalance = getRequestWallet.PoundBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.NairaBalance = currentNairaBalance;
                                getRequestWallet.PoundBalance = currentPoundBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentPoundBalance = getResponseWallet.PoundBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentNairaBalance = getResponseWallet.NairaBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.NairaBalance = currentNairaBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion

                #region Pounds to Naira Transaction
                using (var transaction = _weGOPAYDbContext.Database.BeginTransaction())
                {
                    if (nRequest.RequestCurrency == (int)CurrencyEnum.BritishPound && getRequestWallet.NairaBalance >= nRequest.Amount)
                    {
                        if (getRequestWallet != null)
                        {
                            if (nRequest.ResponseCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentPoundBalance = getRequestWallet.PoundBalance - nRequest.Amount;
                                var currentNairaBalance = getRequestWallet.NairaBalance + ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);

                                //Updating the Request Client

                                getRequestWallet.NairaBalance = currentNairaBalance;
                                getRequestWallet.PoundBalance = currentPoundBalance;

                                _weGOPAYDbContext.Entry(getRequestWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                        if (getResponseWallet != null)
                        {
                            if (nRequest.RequestCurrency == (int)CurrencyEnum.Naira)
                            {
                                var currentNairaBalance = getResponseWallet.NairaBalance - ConvertedAmount(nRequest.RequestCurrency, nRequest.ResponseCurrency, nRequest.Amount);
                                var currentPoundBalance = getResponseWallet.PoundBalance + nRequest.Amount;

                                //Updating the response Client

                                getResponseWallet.PoundBalance = currentPoundBalance;
                                getResponseWallet.NairaBalance = currentNairaBalance;

                                _weGOPAYDbContext.Entry(getResponseWallet).State = EntityState.Modified;
                                await _weGOPAYDbContext.SaveChangesAsync();
                            }
                        }
                    }

                    transaction.Commit();
                }

                #endregion



                //Update the wallet transactions
                #region Update transaction Status to Responded
                if (nRequest != null)
                {
                    nRequest.TransactionStatus = (int)TransactionStatus.Responded;
                }
                _weGOPAYDbContext.Entry(nRequest).State = EntityState.Modified;
                await _weGOPAYDbContext.SaveChangesAsync();

                #endregion
            }
            catch (Exception ex)
            {
                throw ex;
            }
            #endregion
        }