summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-11-26 15:55:40 -0600
committerHombreLaser <sebastian-440@live.com>2022-11-26 15:55:40 -0600
commit45eb6bcac6eaa57efba955dd45aad46f988aaf35 (patch)
tree1d87dfdc4e962a35b76e9db9e554c090938e5fc7
parent9fa6c5512cf229bd84ba131577f4a8d2b1efb770 (diff)
Corregido error de mappeo.
-rw-r--r--Controllers/RafflesController.cs20
-rw-r--r--Forms/WinnerDTO.cs10
-rw-r--r--Profiles/RaffleWinnerProfile.cs24
-rw-r--r--Services/GameService.cs5
-rw-r--r--Services/IRaffleService.cs1
-rw-r--r--Services/RaffleService.cs5
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