From 45eb6bcac6eaa57efba955dd45aad46f988aaf35 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Sat, 26 Nov 2022 15:55:40 -0600 Subject: Corregido error de mappeo. --- Controllers/RafflesController.cs | 20 ++++++++++++++++++-- Forms/WinnerDTO.cs | 10 ++++++++++ Profiles/RaffleWinnerProfile.cs | 24 ++++++++++++++++++++++++ Services/GameService.cs | 5 ++--- Services/IRaffleService.cs | 1 + Services/RaffleService.cs | 5 +++++ 6 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 Forms/WinnerDTO.cs create mode 100644 Profiles/RaffleWinnerProfile.cs diff --git a/Controllers/RafflesController.cs b/Controllers/RafflesController.cs index 82e05a4..c649b70 100644 --- a/Controllers/RafflesController.cs +++ b/Controllers/RafflesController.cs @@ -82,14 +82,30 @@ namespace BackendPIA.Controllers { [Authorize(Roles = "Administrator")] [HttpPost("{id:int}/play")] - public async Task>> Play(long id) { + public async Task>> Play(long id) { RafflePlayLogic logic = new RafflePlayLogic(_game_service, _service, id); bool result = await logic.Call(); if(!result) return BadRequest(new { ErrorMessage = logic.ErrorMessage }); - return Ok(logic.Winners); + return Ok(_mapper.Map>(logic.Winners)); + } + + [Authorize] + [HttpGet("{id:int}/winners")] + public async Task>> GetWinners(long id) { + var raffle = await _service.GetRaffle(id); + + if(raffle == null) + return NotFound(new NotFoundError(404, $"The raffle with id {id} doesn't exist.")); + + if(!raffle.IsClosed) + return NotFound(new NotFoundError(404, $"The raffle with id {id} doesn't have any winners yet.")); + + var result = await _service.GetRaffleWinners(id); + + return Ok(_mapper.Map>(result)); } } } \ No newline at end of file diff --git a/Forms/WinnerDTO.cs b/Forms/WinnerDTO.cs new file mode 100644 index 0000000..a0d1871 --- /dev/null +++ b/Forms/WinnerDTO.cs @@ -0,0 +1,10 @@ +namespace BackendPIA.Forms { + public class WinnerDTO { + public long Id { get; set; } + public string? UserAccountId { get; set; } + public long RaffleId { get; set; } + public string? Winner { get; set; } + public string? Prize { get; set; } + public string? Raffle { get; set; } + } +} \ No newline at end of file diff --git a/Profiles/RaffleWinnerProfile.cs b/Profiles/RaffleWinnerProfile.cs new file mode 100644 index 0000000..63a327a --- /dev/null +++ b/Profiles/RaffleWinnerProfile.cs @@ -0,0 +1,24 @@ +using AutoMapper; +using BackendPIA.Forms; +using BackendPIA.Models; + +namespace BackendPIA.Profiles { + public class RaffleWinnerProfile : Profile { + public RaffleWinnerProfile() { + CreateMap().ForMember(dto => dto.Winner, o => o.MapFrom(MapWinner)).ForMember(dto => dto.Prize, o => o.MapFrom(MapPrize)) + .ForMember(dto => dto.Raffle, o => o.MapFrom(MapRaffle)); + } + + private string MapWinner(RaffleWinner model, WinnerDTO dto) { + return model.UserAccount.UserName; + } + + private string MapPrize(RaffleWinner model, WinnerDTO dto) { + return model.Prize.Name; + } + + private string MapRaffle(RaffleWinner model, WinnerDTO dto) { + return model.Raffle.Name; + } + } +} \ No newline at end of file diff --git a/Services/GameService.cs b/Services/GameService.cs index 76f5061..16f2803 100644 --- a/Services/GameService.cs +++ b/Services/GameService.cs @@ -14,19 +14,18 @@ namespace BackendPIA.Services { 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) { 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); } raffle.IsClosed = true; await _context.SaveChangesAsync(); - return raffle_winners; + return await _context.RaffleWinners.Include(rw => rw.UserAccount).Include(rw => rw.Raffle).Include(rw => rw.Prize) + .Where(rw => rw.RaffleId == raffle_id).ToListAsync(); } private List GetTicketNumbers(int limit, ICollection tickets) { diff --git a/Services/IRaffleService.cs b/Services/IRaffleService.cs index 059edd7..2ee8b10 100644 --- a/Services/IRaffleService.cs +++ b/Services/IRaffleService.cs @@ -9,5 +9,6 @@ namespace BackendPIA.Services { public Task DeleteRaffle(long id); public Task> GetTakenTickets(long id); public IEnumerable GetRaffleTickets(long id); + public Task> GetRaffleWinners(long id); } } \ No newline at end of file diff --git a/Services/RaffleService.cs b/Services/RaffleService.cs index c86ea3b..5d1901f 100644 --- a/Services/RaffleService.cs +++ b/Services/RaffleService.cs @@ -60,5 +60,10 @@ namespace BackendPIA.Services { public IEnumerable GetRaffleTickets(long id) { return _context.Tickets.Where(t => t.RaffleId == id); } + + public async Task> GetRaffleWinners(long id) { + return await _context.RaffleWinners.Include(rw => rw.UserAccount).Include(rw => rw.Raffle).Include(rw => rw.Prize) + .Where(rw => rw.RaffleId == id).ToListAsync(); + } } } \ No newline at end of file -- cgit v1.2.3