예제 #1
0
        public async Task <Result> RegisterTxUsingReferalCodeAsync(string txId, string referralCode, string EtherToUsdRateAtThatTime)
        {
            //check if tx id is not null or empty
            if (string.IsNullOrWhiteSpace(txId))
            {
                return(new Result(false, "TRANSACTION_ID_NULL"));
            }

            //check if it is already not registered
            var regTx = await registeredTxRepository.GetRegisteredTxUsingIdAsync(txId);

            if (regTx != null)
            {
                return(new Result(false, "TRANSACTION_ALREADY_REGISTERED"));
            }

            //check using infura if valid transaction, success transaction
            //also return the values of the transaction
            var(fromAddress, txFromBlockchain) = await ethTxCheckService.GetEthTxFromBlockChainUsingTxId(txId);

            if (txFromBlockchain == null)
            {
                return(new Result(false, "TRANSACTION_NOT_FOUND"));
            }

            //register transaction wrt user and include all the extra properties as well
            //check if the from address is the user id or not.
            var userData = await referralCodeRepository.GetUserByEthAddressAsync(fromAddress);

            if (userData == null)
            {
                return(new Result(false, "UNKNOWN_USER_TRANSACTION"));
            }

            txFromBlockchain.UserId = userData.Id;
            txFromBlockchain.EtherToUsdRateAtThatTime = EtherToUsdRateAtThatTime;
            txFromBlockchain.ReferralCode             = referralCode;

            //maintain all bonuses before saving it to db
            //calculate and add the referral bonusses.
            BigInteger presaleBonus = await SaveCalculateAndReturnPresaleBonus(txFromBlockchain);

            var(inviterBonus, inviteeBonus) = await SaveCalculateAndReturnReferralBonuses(txFromBlockchain);

            txFromBlockchain.ReferralZinTokensGenerated = inviterBonus.ToString();
            txFromBlockchain.BonusZinTokensGenerated    = inviteeBonus.ToString();
            txFromBlockchain.PresaleZinTokensGenerated  = presaleBonus.ToString();

            await registeredTxRepository.SaveRegisteredTxAsync(txFromBlockchain);

            //update the user the amount of tokens transferred
            await userBalanceRepository.AddUserTokenBalance(txFromBlockchain.UserId, BigInteger.Parse(txFromBlockchain.AmountTransferredInToken), BonusType.None);

            return(new Result(true, "TRANSACTION_REGISTERED_SUCCESSFULLY"));
        }
예제 #2
0
        public async Task <Result> RegisterAsync(UserDetails userDetails, string password)
        {
            // register user
            AppUser appUser = userDetails.ToCore();

            //save and update eth address only when it is already not registered with some user.
            if (!string.IsNullOrWhiteSpace(userDetails.EthAddress))
            {
                var alreadySavedData = await referralCodeRepository.GetUserByEthAddressAsync(userDetails.EthAddress);

                if (alreadySavedData == null)
                {
                    appUser.EthAddress = userDetails.EthAddress;
                }
            }

            appUser.ReferralCode = await referralCodeRepository.GetNewReferralCodeAsync();

            appUser.BonusZinTokens       = "0";
            appUser.PresaleZinTokens     = "0";
            appUser.ReferralZinTokens    = "0";
            appUser.ZinTokens            = "0";
            appUser.CreateDateTimeOffset = DateTimeOffset.UtcNow;

            IdentityResult result = await userManager.CreateAsync(appUser, password);

            if (!result.Succeeded)
            {
                return(new Result(result));
            }

            // send email confirmation
            string emailConfirmationUrl = await CreateEmailConfirmationUrlAsync(appUser);

            await emailService.SendRegisterEmailAsync(appUser.Email, $"{appUser.FirstName} {appUser.LastName}", emailConfirmationUrl);

            return(new Result(true, "ACCOUNT_CREATED"));
        }