using GameList.Contracts; using GameList.Data; using GameList.Infrastructure; using GameList.Domain; namespace GameList.Endpoints; public static class VoteEndpoints { public static void MapVoteEndpoints(this IEndpointRouteBuilder app) { var group = app.MapGroup("/api/votes").WithTags("Votes").RequireAuthorization().AddEndpointFilter(new PhaseRequirementFilter(Phase.Vote)); group.MapGet("/mine", async (HttpContext ctx, AppDbContext db, VoteWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.GetMineAsync(player.Id); return result.ToHttpResult(Results.Ok); }).WithName("GetMyVotes"); group.MapPost("/", async (VoteRequest request, HttpContext ctx, AppDbContext db, VoteWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.UpsertAsync(player.Id, request.SuggestionId, request.Score); return result.ToHttpResult(Results.Ok); }).WithName("UpsertVote"); group.MapPost("/finalize", async (VoteFinalizeRequest request, HttpContext ctx, AppDbContext db, VoteWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.SetFinalizeAsync(player.Id, request.Final); return result.ToHttpResult(Results.Ok); }).WithName("SetVotesFinalized"); } }