Beispiel #1
0
        public async Task <BetResult> EndBet(Bet bet, bool result)
        {
            var wagers = (await GetWagersByBetId(bet.Id)).ToList();

            var wagerResults = new List <WagerResult>();

            Fraction.TryParse(bet.ForOdds, out var forOdds);
            Fraction.TryParse(bet.AgainstOdds, out var againstOdds);

            if (wagers.Any())
            {
                foreach (var wager in wagers)
                {
                    var returns = 0.00M;

                    if (result == wager.InFavour)
                    {
                        returns = wager.InFavour
                            ? wager.Stake.CalculateWinnings(forOdds)
                            : wager.Stake.CalculateWinnings(againstOdds);
                    }

                    var bankAccount = await _bankingService.GetAccount(wager.UserId);

                    var wagerResult = wager.ToWagerResult(returns);

                    wagerResults.Add(wagerResult);

                    await _bankingService.Deposit(bankAccount, returns);
                }
            }

            var betResult = bet.ToBetResult(wagerResults);

            bet.HasEnded = true;

            await _betRepository.Update(bet);

            await _wagerRepository.DeleteRange(wagers);

            return(betResult);
        }