diff options
-rw-r--r-- | Controllers/RafflesController.cs | 20 | ||||
-rw-r--r-- | Forms/WinnerDTO.cs | 10 | ||||
-rw-r--r-- | Profiles/RaffleWinnerProfile.cs | 24 | ||||
-rw-r--r-- | Services/GameService.cs | 5 | ||||
-rw-r--r-- | Services/IRaffleService.cs | 1 | ||||
-rw-r--r-- | Services/RaffleService.cs | 5 |
6 files changed, 60 insertions, 5 deletions
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<ActionResult<IEnumerable<RaffleWinner>>> Play(long id) { + public async Task<ActionResult<IEnumerable<WinnerDTO>>> 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<IEnumerable<WinnerDTO>>(logic.Winners)); + } + + [Authorize] + [HttpGet("{id:int}/winners")] + public async Task<ActionResult<IEnumerable<WinnerDTO>>> 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<IEnumerable<WinnerDTO>>(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<RaffleWinner, WinnerDTO>().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<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) { 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<int> GetTicketNumbers(int limit, ICollection<Ticket> 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<bool> DeleteRaffle(long id); public Task<IEnumerable<int>> GetTakenTickets(long id); public IEnumerable<Ticket> GetRaffleTickets(long id); + public Task<IEnumerable<RaffleWinner>> 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<Ticket> GetRaffleTickets(long id) { return _context.Tickets.Where(t => t.RaffleId == id); } + + public async Task<IEnumerable<RaffleWinner>> 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 |