public async Task <ActionResult> Download(WalletDownload walletDownload, DateTime now) { var user = await _dbContext.User.FirstOrDefaultAsync(r => r.UserId == walletDownload.UserId); var userReferral = await _dbContext.UserReferral.FirstOrDefaultAsync(r => r.UserId == walletDownload.UserId); if (userReferral != null && !UserLockCollection.Lock(userReferral.UserId)) { return(StatusCode(UserLockCollection.UserLockedReturnCode)); } try { var downloads = _dbContext.WalletDownload.Where(w => w.TimeStamp.AddDays(7) > now).Where(d => d.IPAddress == walletDownload.IPAddress); if (!downloads.Any() && userReferral != null && (userReferral.ReferralId != 0 && userReferral.WalletDownloadDate == null)) { try { walletDownload.ReferralUserId = _dbContext.Referrer .FirstOrDefault(r => r.ReferralId == Convert.ToInt32(userReferral.ReferralId))?.UserId; walletDownload.ReferralCode = userReferral.ReferralId.ToString(); } catch (Exception e) { throw new Exception($"could not convert referral code: {walletDownload.ReferralCode} to an integer"); } var referrerUser = await _dbContext.JoinUserModels().FirstOrDefaultAsync(u => u.UserId == walletDownload.ReferralUserId); if (referrerUser != null && userReferral != null && userReferral?.WalletDownloadDate == null) { if (!referrerUser.IsBanned && !user.IsBanned) { await ReferralUtils.ReferralRewards(_dbContext, walletDownload, userReferral, referrerUser, user, "Wallet download"); } } } walletDownload.TimeStamp = now; _dbContext.WalletDownload.Add(walletDownload); await _dbContext.SaveAsync(); return(StatusCode((int)HttpStatusCode.OK)); } catch (Exception e) { await BITCORNLogger.LogError(_dbContext, e, JsonConvert.SerializeObject(walletDownload)); return(StatusCode((int)HttpStatusCode.InternalServerError)); } finally { if (userReferral != null) { UserLockCollection.Release(userReferral.UserId); } } }
public static async Task ReferralRewards(BitcornContext dbContext, WalletDownload walletDownload, UserReferral userReferral, User referrerUser, User user, string type) { if (user.IsBanned || referrerUser.IsBanned) { return; } var referrer = await dbContext.Referrer .FirstOrDefaultAsync(w => w.UserId == walletDownload.ReferralUserId); userReferral.WalletDownloadDate = DateTime.Now; if (IsValidReferrer(referrer)) { var referralPayoutTotal = await ReferralUtils.TotalReward(dbContext, referrer) + await ReferralUtils.WalletBonusReward(dbContext, referrer, 10);; var referrerReward = await TxUtils.SendFromBitcornhub(referrerUser, referralPayoutTotal, "BITCORNFarms", type, dbContext); var referreeReward = await TxUtils.SendFromBitcornhub(user, referrer.Amount + 10, "BITCORNFarms", type, dbContext); if (referrerReward && referreeReward) { await ReferralUtils.LogReferralTx(dbContext, referrerUser.UserId, referralPayoutTotal, type); await ReferralUtils.LogReferralTx(dbContext, user.UserId, referrer.Amount + 10, $"Recruit {type}"); await ReferralUtils.UpdateYtdTotal(dbContext, referrer, referralPayoutTotal); if (referrerUser.UserStat.TotalReferralRewardsCorn == null) { referrerUser.UserStat.TotalReferralRewardsCorn = 0; } if (referrerUser.UserStat.TotalReferralRewardsUsdt == null) { referrerUser.UserStat.TotalReferralRewardsUsdt = 0; } referrerUser.UserStat.TotalReferralRewardsCorn += referralPayoutTotal; referrerUser.UserStat.TotalReferralRewardsUsdt += ((referralPayoutTotal) * (await ProbitApi.GetCornPriceAsync(dbContext))); userReferral.WalletDownloadDate = DateTime.Now; await ReferralUtils.BonusPayout(dbContext, userReferral, referrer, user, referrerUser, referrerUser.UserStat); } } }
public async Task <ActionResult> Post([FromBody] WalletDownload walletDownload) { return(await Download(walletDownload, DateTime.Now)); }