summaryrefslogtreecommitdiff
path: root/Services/GameService.cs
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-11-26 00:25:57 -0600
committerHombreLaser <sebastian-440@live.com>2022-11-26 00:25:57 -0600
commit9fa6c5512cf229bd84ba131577f4a8d2b1efb770 (patch)
tree8defdcf005f152e9eb0c32eaa1be80156f3a0e66 /Services/GameService.cs
parent9a59a9560eda09236e2dc56897d139c50a85c827 (diff)
Añadida lógica de rifa
Diffstat (limited to 'Services/GameService.cs')
-rw-r--r--Services/GameService.cs16
1 files changed, 9 insertions, 7 deletions
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<IEnumerable<RaffleWinner>> GetWinners(long raffle_id) {
- var raffle = await _context.Raffles.Include(r => r.Tickets.Select(t => t.Owner)).FirstOrDefaultAsync(r => r.Id == raffle_id);
- Queue<long> prizes = new Queue<long>(_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<int> 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<long> prizes = new Queue<long>(_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<int> winners = GetTicketNumbers(raffle.Winners, raffle.Tickets);
List<RaffleWinner> raffle_winners = new List<RaffleWinner>();
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<int> GetTicketNumbers(int limit, List<int> tickets) {
+ private List<int> GetTicketNumbers(int limit, ICollection<Ticket> tickets) {
List<int> winners = new List<int>();
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;