private async Task <BigInteger> SaveCalculateAndReturnPresaleBonus(Repository.Models.RegisteredTx registeredTx) { //calculate related amount of tokens that should be assigned to that user //and assign the user that amount of tokens and update the user in db. BigInteger calculatedPresaleBonus = await CalculateBonus(BonusType.Presale, BigInteger.Parse(registeredTx.AmountTransferredInToken)); if (calculatedPresaleBonus > 0) { await userBalanceRepository.AddUserTokenBalance(registeredTx.UserId, calculatedPresaleBonus, BonusType.Presale); await bonusTxRepository.SaveBonusTxAsync(new BonusTx { InternalId = Guid.NewGuid().ToString(), TxId = registeredTx.TxId, UserId = registeredTx.UserId, BonusType = BonusType.Presale, ReferralCode = registeredTx.ReferralCode, EtherToUsdRateAtThatTime = registeredTx.EtherToUsdRateAtThatTime, AmountTransferredInEther = registeredTx.AmountTransferredInEther, AmountTransferredInToken = registeredTx.AmountTransferredInToken, BonusTokensGenerated = calculatedPresaleBonus.ToString() }); } return(calculatedPresaleBonus); }
/// <summary> /// private methods. /// </summary> /// <param name="userId"></param> /// <param name="referralCode"></param> /// <param name="originalAmount"></param> /// <returns></returns> private async Task <(BigInteger, BigInteger)> SaveCalculateAndReturnReferralBonuses(Repository.Models.RegisteredTx registeredTx) { //now check if the referral code is present or not if (string.IsNullOrWhiteSpace(registeredTx.ReferralCode)) { return(0, 0); } //if present then go and find out if it is correct and is assigned to a user (Case Sensitive) //get the user details var referredUser = await referralCodeRepository.GetUserByReferralCodeAsync(registeredTx.ReferralCode); if (referredUser == null || referredUser.UserName == registeredTx.UserId) { return(0, 0); } //calculate related amount of tokens that should be assigned to that user and assign the user that amount of tokens and update the user in db. BigInteger calculatedInviterBonus = await CalculateBonus(BonusType.Inviter, BigInteger.Parse(registeredTx.AmountTransferredInToken)); if (calculatedInviterBonus > 0) { await userBalanceRepository.AddUserTokenBalance(referredUser.Id, calculatedInviterBonus, BonusType.Inviter); await bonusTxRepository.SaveBonusTxAsync(new BonusTx { InternalId = Guid.NewGuid().ToString(), TxId = registeredTx.TxId, UserId = referredUser.Id, BonusType = BonusType.Inviter, ReferralCode = registeredTx.ReferralCode, EtherToUsdRateAtThatTime = registeredTx.EtherToUsdRateAtThatTime, AmountTransferredInEther = registeredTx.AmountTransferredInEther, AmountTransferredInToken = registeredTx.AmountTransferredInToken, BonusTokensGenerated = calculatedInviterBonus.ToString() }); } //calculate related amount of tokens that should be assigned to that user and assign the user that amount of tokens and update the user in db. BigInteger calculatedInviteeBonus = await CalculateBonus(BonusType.Invitee, BigInteger.Parse(registeredTx.AmountTransferredInToken)); if (calculatedInviteeBonus > 0) { await userBalanceRepository.AddUserTokenBalance(registeredTx.UserId, calculatedInviteeBonus, BonusType.Invitee); await bonusTxRepository.SaveBonusTxAsync(new BonusTx { InternalId = Guid.NewGuid().ToString(), TxId = registeredTx.TxId, UserId = registeredTx.UserId, BonusType = BonusType.Inviter, ReferralCode = registeredTx.ReferralCode, EtherToUsdRateAtThatTime = registeredTx.EtherToUsdRateAtThatTime, AmountTransferredInEther = registeredTx.AmountTransferredInEther, AmountTransferredInToken = registeredTx.AmountTransferredInToken, BonusTokensGenerated = calculatedInviterBonus.ToString() }); } return(calculatedInviterBonus, calculatedInviteeBonus); }