From 9fa6c5512cf229bd84ba131577f4a8d2b1efb770 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Sat, 26 Nov 2022 00:25:57 -0600 Subject: Añadida lógica de rifa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Services/GameService.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'Services/GameService.cs') diff --git a/Services/GameService.cs b/Services/GameService.cs index 01c084a..76f5061 100644 --- a/Services/GameService.cs +++ b/Services/GameService.cs @@ -10,10 +10,10 @@ namespace BackendPIA.Services { } public async Task> GetWinners(long raffle_id) { - var raffle = await _context.Raffles.Include(r => r.Tickets.Select(t => t.Owner)).FirstOrDefaultAsync(r => r.Id == raffle_id); - Queue prizes = new Queue(_context.Prizes.Where(p => p.RaffleId == raffle_id).Select(p => p.Id)); - var tickets = await _context.Tickets.Where(t => t.RaffleId == raffle_id).Select(t => t.Number).ToListAsync(); - List winners = GetTicketNumbers(raffle.Winners, tickets); + var raffle = await _context.Raffles.Include(r => r.Tickets).ThenInclude(t => t.Owner).FirstOrDefaultAsync(r => r.Id == raffle_id); + Queue prizes = new Queue(_context.Prizes.Where(p => p.RaffleId == raffle_id).OrderBy(p => p.Tier).Select(p => p.Id)); + // var tickets = await _context.Tickets.Where(t => t.RaffleId == raffle_id).Select(t => t.Number).ToListAsync(); + List winners = GetTicketNumbers(raffle.Winners, raffle.Tickets); List raffle_winners = new List(); foreach(int winner in winners) { @@ -23,22 +23,24 @@ namespace BackendPIA.Services { await _context.AddAsync(raffle_winner); } + raffle.IsClosed = true; await _context.SaveChangesAsync(); return raffle_winners; } - private List GetTicketNumbers(int limit, List tickets) { + private List GetTicketNumbers(int limit, ICollection tickets) { List winners = new List(); Random rng = new Random(); while(winners.Count < limit) { int i = rng.Next(tickets.Count - 1); - if(winners.Contains(tickets[i])) // Check for duplicate numbers. + if(winners.Contains(tickets.ElementAt(i).Number)) // Check for duplicate numbers. continue; - winners.Append(tickets[i]); + winners.Add(tickets.ElementAt(i).Number); + tickets.ElementAt(i).IsWinner = true; } return winners; -- cgit v1.2.3