示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }