public async Task <IActionResult> GetById(int bettingId) { var bids = this.bidService.Get(x => x.BettingId == bettingId); string userId = (await userManager.FindByNameAsync(User.Identity.Name)).Id; if (bids != null) { foreach (var bid in bids) { if (bid.UserId != userId) { bid.PaymentAddress = null; } bid.PossibleWin = BettingHelper.GetAmountPayment( bid.Amount, bid.Coefficient, this.bettingService.GetBank(bid.BettingId, bid.Side), this.bettingService.GetBank(bid.BettingId, !bid.Side)); } return(Ok(new { result = true, list = bids })); } return(Ok(new { result = false })); }
public void GetAmountPayment_InvalidParams_ExpectException() { var bet = -1M; var coefficient = 0M; var betBank = 0M; var oppositeBank = 0M; Assert.ThrowsException <ArgumentException>(() => BettingHelper.GetAmountPayment(bet, coefficient, betBank, oppositeBank)); }
public void GetAmountPayment_ValidParams_ExpectWin() { var bet = 1M; var coefficient = 2M; var betBank = 1M; var oppositeBank = 1M; var amount = BettingHelper.GetAmountPayment(bet, coefficient, betBank, oppositeBank); Assert.AreEqual(amount, 1.9M); }
public async Task Execute(IJobExecutionContext context) { var bet = this.bettingService.Get(model => model.Status == BettingStatus.Waiting) .OrderBy(model => model.FinishDate).FirstOrDefault(); if (bet != null) { decimal?currentExchange; do { currentExchange = this.bettingService.CurrentExchange; }while (!currentExchange.HasValue); var sideWin = currentExchange.Value > bet.ExchangeRate; // Set status and who win bet.Result = sideWin; bet.Status = BettingStatus.Done; await this.bettingService.Update(bet); var bankMore = this.bettingService.GetBank(bet.BettingId, true); var bankLess = this.bettingService.GetBank(bet.BettingId, false); var bids = this.bidService.Get( model => model.BettingId == bet.BettingId && !model.Status && model.PaymentStatus == PaymentStatus.Confirmed); // select ids of addresses where can be coins var ids = bids.Select(model => model.BidId).ToList(); // use first address as basic ids.Add(this.BasicAddressId); foreach (var bid in bids) { if (bid.Side == sideWin) { var award = sideWin ? BettingHelper.GetAmountPayment(bid.Amount, bid.Coefficient, bankMore, bankLess) : BettingHelper.GetAmountPayment(bid.Amount, bid.Coefficient, bankLess, bankMore); try { var address = this.walletService.GetById(bid.WalletId); if (address != null) { // send to winners and send remainder sum to first address this.bitcoinWalletService.Send(address.Address, award, ids, this.BasicAddressId); bid.Paid = true; var user = await this.userManager.FindByIdAsync(bid.UserId); await this.emailSender.SendEmailAsync( user.Email, "Bitcoin app payment", "You win " + (decimal)award + " on your wallet " + bid.PaymentAddress); } } catch (Exception e) { // ignored } } bid.Status = true; this.bidService.Update(bid); } } }