76 lines
3.5 KiB
C#
76 lines
3.5 KiB
C#
using GameList.Data;
|
|
using GameList.Contracts;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using GameList.Infrastructure;
|
|
|
|
namespace GameList.Endpoints;
|
|
|
|
public static class AdminEndpoints
|
|
{
|
|
public static void MapAdminEndpoints(this IEndpointRouteBuilder app)
|
|
{
|
|
var admin = app.MapGroup("/api/admin").RequireAuthorization().AddEndpointFilter<AdminOnlyFilter>();
|
|
|
|
admin.MapPost("/results", async ([FromBody] ResultsOpenRequest request, AdminWorkflowService service) => await service.SetResultsOpenAsync(request.ResultsOpen));
|
|
|
|
admin.MapGet("/vote-status", async (AdminWorkflowService service) => await service.GetVoteStatusAsync());
|
|
|
|
admin.MapPost("/joker", async ([FromBody] GrantJokerRequest request, AdminWorkflowService service) => await service.GrantJokerAsync(request.PlayerId));
|
|
|
|
admin.MapPost("/players/{playerId:guid}/phase", async (Guid playerId, [FromBody] SetPlayerPhaseRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.SetPlayerPhaseAsync(playerId, request.Phase);
|
|
});
|
|
|
|
admin.MapDelete("/players/{playerId:guid}", async (Guid playerId, [FromBody] AdminPasswordRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.DeletePlayerAsync(playerId, player.Id, request.AdminPassword);
|
|
});
|
|
|
|
admin.MapPost("/link-suggestions", async ([FromBody] LinkSuggestionsRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.LinkSuggestionsAsync(player.Id, request.SourceSuggestionId, request.TargetSuggestionId);
|
|
});
|
|
|
|
admin.MapPost("/unlink-suggestions", async ([FromBody] UnlinkSuggestionsRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.UnlinkSuggestionsAsync(player.Id, request.SuggestionId);
|
|
});
|
|
|
|
admin.MapPost("/reset", async ([FromBody] AdminPasswordRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.ResetAsync(player.Id, request.AdminPassword);
|
|
});
|
|
|
|
admin.MapPost("/factory-reset", async ([FromBody] AdminPasswordRequest request, HttpContext ctx, AppDbContext db, AdminWorkflowService service) =>
|
|
{
|
|
var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db);
|
|
if (player is null)
|
|
return EndpointHelpers.UnauthorizedError();
|
|
|
|
return await service.FactoryResetAsync(player.Id, request.AdminPassword);
|
|
});
|
|
}
|
|
}
|
|
|