summaryrefslogtreecommitdiff
path: root/Services
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
parent9a59a9560eda09236e2dc56897d139c50a85c827 (diff)
Añadida lógica de rifa
Diffstat (limited to 'Services')
-rw-r--r--Services/GameService.cs16
-rw-r--r--Services/IRaffleService.cs2
-rw-r--r--Services/RaffleService.cs8
3 files changed, 19 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;
diff --git a/Services/IRaffleService.cs b/Services/IRaffleService.cs
index 2326629..059edd7 100644
--- a/Services/IRaffleService.cs
+++ b/Services/IRaffleService.cs
@@ -7,5 +7,7 @@ namespace BackendPIA.Services {
public Task<IEnumerable<Raffle>> GetRaffles(string query);
public Task<Raffle> GetRaffle(long id);
public Task<bool> DeleteRaffle(long id);
+ public Task<IEnumerable<int>> GetTakenTickets(long id);
+ public IEnumerable<Ticket> GetRaffleTickets(long id);
}
} \ No newline at end of file
diff --git a/Services/RaffleService.cs b/Services/RaffleService.cs
index 58401b8..c86ea3b 100644
--- a/Services/RaffleService.cs
+++ b/Services/RaffleService.cs
@@ -52,5 +52,13 @@ namespace BackendPIA.Services {
return true;
}
+
+ public async Task<IEnumerable<int>> GetTakenTickets(long id) {
+ return await _context.Tickets.Where(t => t.RaffleId == id).Select(t => t.Number).ToListAsync();
+ }
+
+ public IEnumerable<Ticket> GetRaffleTickets(long id) {
+ return _context.Tickets.Where(t => t.RaffleId == id);
+ }
}
} \ No newline at end of file