CapRaffle.Domain.Raffle.DrawWinners.ExecuteDraw C# (CSharp) Метод

ExecuteDraw() публичный Метод

public ExecuteDraw ( ) : void
Результат void
        public void ExecuteDraw()
        {
            PopulateUserRaffleTicketsList();
            ApplyRulesForEvent();
            List<UserEvent> raffle = GenerateRaffleTickets();

            Random randomGenerator = new Random();
            int availableSpots = NumberOfSpotsLeftForEvent();
            raffle.RemoveAll(x => (!x.AcceptLessSpots && x.NumberOfSpots > availableSpots));

            while (availableSpots > 0 && raffle.Count > 0)
            {
                int winnerNumber = randomGenerator.Next(raffle.Count());
                UserEvent drawnParticipant = raffle.ElementAt(winnerNumber);

                int numberOfSpotsGiven = CalculateNumberOfSpotsToGive(availableSpots, drawnParticipant.NumberOfSpots);

                raffle.RemoveAll(x => x.UserEmail == drawnParticipant.UserEmail);

                SaveWinner(drawnParticipant, numberOfSpotsGiven);
                DeleteParticipant(drawnParticipant);
                availableSpots -= numberOfSpotsGiven;
                raffle.RemoveAll(x => (!x.AcceptLessSpots && x.NumberOfSpots > availableSpots));
            }
        }

Usage Example

 public void GiveTicketsToUsersWhoNeverHasWonInThisCategory(List<UserTickets> userRaffleTicketsList, int number)
 {
     var NeverWon = new List<UserTickets>();
     foreach (var urt in userRaffleTicketsList)
     {
         if (PreviousWinsInCategoryByUser(urt.Email) == 0)
         {
             NeverWon.Add(urt);
         }
     }
     if (NeverWon.Count() > 0)
     {
         var drawing = new DrawWinners(eventId, context);
         drawing.ApplyRules = false;
         drawing.UserTicketsList = NeverWon;
         drawing.ExecuteDraw();
         var winners = context.Winners.Where(x => x.EventId == eventId).ToList();
         winners.ForEach(x => userRaffleTicketsList.RemoveAll(y => y.Email == x.UserEmail));
     }
 }
All Usage Examples Of CapRaffle.Domain.Raffle.DrawWinners::ExecuteDraw