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")); }
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")); }