예제 #1
0
        private async Task <(FundedWalletRespnse entity, string Message)> FundNoob(FundedWalletRespnse fundedResponse, string symbolCaps, FXUser userInDb, FundWalletModel model, List <Wallet> uwallet)
        {
            //var getUserWallet = await _walletrepo.FirstOrDefault(t => t.UserId == userInDb.Id);
            var    getUserWallet = uwallet.FirstOrDefault(r => r.UserId == userInDb.Id);
            string message       = "";

            if (getUserWallet == null)
            {
                return(entity : null, Message : $"WALLET NOT FOUND.");
            }
            if (getUserWallet.CurrencySymbol == symbolCaps)
            {
                var walletdto = getUserWallet;
                walletdto.GrandAmount        += model.Amount;
                walletdto.IsCurrencyConverted = true;
                walletdto.ActionTaken         = $"Funded Wallet by {userInDb.Username}.";

                fundedResponse.AcctDigits = getUserWallet.AcctDigits;
                // This New Amount is the proposed amount user will have after approval.
                fundedResponse.NewAmountAfterApproval = walletdto.GrandAmount;

                // Noob User still sees previous amount
                fundedResponse.Amount       = getUserWallet.Amount;
                fundedResponse.UserIdToFund = userInDb.Id;

                if (userInDb.Role == UserRoles.Admin)
                {
                    message = $"Successful. wallet is funded.";
                    fundedResponse.IsApproved = true;
                    walletdto.Amount          = walletdto.GrandAmount;
                }

                // Update wallet in db when admin has approved
                await _walletrepo.Update(walletdto);

                message = $"Success. Account funded in {getUserWallet.CurrencySymbol}. You just need wait for admin to approve funding.";
                return(entity : fundedResponse, Message : message);
            }
            try
            {
                var(conversionresult, info) = await _currency.CurrencyConversion(symbolCaps, getUserWallet.CurrencySymbol, model.Amount);

                if (conversionresult == null)
                {
                    return(entity : null, Message : $"An error occurred.");
                }

                var walletdto = getUserWallet;
                walletdto.GrandAmount        += conversionresult.Result;
                walletdto.IsCurrencyConverted = true;
                walletdto.ActionTaken         = $"Funded Wallet by {userInDb.Username}.";
                log.LogInformation($"{conversionresult.Result}");
                await _walletrepo.Update(walletdto);

                fundedResponse.AcctDigits = getUserWallet.AcctDigits;
                // This New Amount is the proposed amount user will have after approval.
                fundedResponse.NewAmountAfterApproval = walletdto.GrandAmount;

                // Noob User still sees previous amount before approval
                fundedResponse.Amount       = getUserWallet.Amount;
                fundedResponse.UserIdToFund = userInDb.Id;

                if (userInDb.Role == UserRoles.Admin)
                {
                    message = $"Successful. wallet is funded. And approved.";
                    fundedResponse.IsApproved = true;
                }

                message = $"Success. Account funded in {getUserWallet.CurrencySymbol}. You just need wait for admin to approve funding.";
                return(entity : fundedResponse, Message : message);
            }
            catch (Exception e)
            {
                log.LogError($"An error occurred. {e.Message}");
            }
            return(entity : null, Message : $"An error occurred. out side if block");
        }