From 9a59a9560eda09236e2dc56897d139c50a85c827 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Fri, 25 Nov 2022 17:52:22 -0600 Subject: AƱadido servicio de rifa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 1 + Services/GameService.cs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ Services/IGameService.cs | 7 +++++++ Services/IPrizeService.cs | 2 -- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 Services/GameService.cs create mode 100644 Services/IGameService.cs diff --git a/Program.cs b/Program.cs index ec416e6..ed98bd4 100644 --- a/Program.cs +++ b/Program.cs @@ -26,6 +26,7 @@ builder.Services.AddAutoMapper(typeof(Program)); // Custom services configuration. builder.Services.AddSingleton(s => new TokenGenerator(builder.Configuration["Jwt:Key"])); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); 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> 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); + List raffle_winners = new List(); + + 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 GetTicketNumbers(int limit, List 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. + 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> 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 { -- cgit v1.2.3