summaryrefslogtreecommitdiff
path: root/Services
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-11-25 17:52:22 -0600
committerHombreLaser <sebastian-440@live.com>2022-11-25 17:52:22 -0600
commit9a59a9560eda09236e2dc56897d139c50a85c827 (patch)
treef000b172dee22e3af763537988ed4abf33539b5c /Services
parentc1787bf85f0927a3a9def2c64068d9e340946b19 (diff)
Añadido servicio de rifa
Diffstat (limited to 'Services')
-rw-r--r--Services/GameService.cs47
-rw-r--r--Services/IGameService.cs7
-rw-r--r--Services/IPrizeService.cs2
3 files changed, 54 insertions, 2 deletions
diff --git a/Services/GameService.cs b/Services/GameService.cs
new file mode 100644
index 0000000..01c084a
--- /dev/null
+++ b/Services/GameService.cs
@@ -0,0 +1,47 @@
+using Microsoft.EntityFrameworkCore;
+using BackendPIA.Models;
+
+namespace BackendPIA.Services {
+ public class GameService : IGameService {
+ private readonly ApplicationDbContext _context;
+
+ public GameService(ApplicationDbContext context) {
+ _context = context;
+ }
+
+ 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);
+ List<RaffleWinner> raffle_winners = new List<RaffleWinner>();
+
+ foreach(int winner in winners) {
+ var raffle_winner = new RaffleWinner { UserAccountId = raffle.Tickets.Where(t => t.Number == winner).First().UserAccountId,
+ PrizeId = prizes.Dequeue(), RaffleId = raffle_id };
+ raffle_winners.Add(raffle_winner);
+ await _context.AddAsync(raffle_winner);
+ }
+
+ await _context.SaveChangesAsync();
+
+ return raffle_winners;
+ }
+
+ private List<int> GetTicketNumbers(int limit, List<int> 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.
+ continue;
+
+ winners.Append(tickets[i]);
+ }
+
+ return winners;
+ }
+ }
+} \ No newline at end of file
diff --git a/Services/IGameService.cs b/Services/IGameService.cs
new file mode 100644
index 0000000..c83087d
--- /dev/null
+++ b/Services/IGameService.cs
@@ -0,0 +1,7 @@
+using BackendPIA.Models;
+
+namespace BackendPIA.Services {
+ public interface IGameService {
+ public Task<IEnumerable<RaffleWinner>> GetWinners(long raffle_id);
+ }
+} \ No newline at end of file
diff --git a/Services/IPrizeService.cs b/Services/IPrizeService.cs
index c7261ab..4918e93 100644
--- a/Services/IPrizeService.cs
+++ b/Services/IPrizeService.cs
@@ -1,5 +1,3 @@
-using Microsoft.AspNetCore.Mvc.ModelBinding;
-using Microsoft.AspNetCore.JsonPatch;
using BackendPIA.Models;
namespace BackendPIA.Services {