public void SetWinners(string drawId) { var draw = _drawRepository.GetById(drawId); if (draw == null) { throw new ArgumentException($"There is no draw with id: {drawId}"); } if (draw.IsActive) { throw new ArgumentException($"The draw is still active"); } if (draw.AreWinnersSet) { return; } var tickets = _ticketRepository.GetByDrawId(drawId); if (tickets == null || tickets.Count() == 0) { return; } var winners = new List <Winner>(); foreach (var ticket in tickets) { var winningNumbers = GetWinningNumbers(ticket.PickedNumbers, draw.DrawnNumbers); if (winningNumbers.Count() < 3) { continue; } var winner = new Winner { DrawId = drawId, TicketId = ticket.Id, Prize = GetPrizeForWinningNumbersCount(winningNumbers.Count()), WinningNumbers = winningNumbers }; winners.Add(winner); } _winnerRepository.AddMany(winners); draw.AreWinnersSet = true; _drawRepository.Update(draw); }