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