using GameList.Data; namespace GameList.Endpoints; public static class StateEndpoints { public static void MapStateEndpoints(this IEndpointRouteBuilder app) { var group = app.MapGroup("/api").RequireAuthorization(); group.MapGet("/state", async (HttpContext ctx, AppDbContext db, StateWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.GetStateAsync(player); return result.ToHttpResult(Results.Ok); }); group.MapGet("/me", async (HttpContext ctx, AppDbContext db, StateWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.GetMeAsync(player); return result.ToHttpResult(Results.Ok); }); group.MapPost("/me/phase/next", async (HttpContext ctx, AppDbContext db, StateWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.NextPhaseAsync(player); return result.ToHttpResult(Results.Ok); }); group.MapPost("/me/phase/prev", async (HttpContext ctx, AppDbContext db, StateWorkflowService service) => { var player = await EndpointHelpers.GetAuthenticatedPlayer(ctx, db); if (player is null) return EndpointHelpers.UnauthorizedError(); var result = await service.PrevPhaseAsync(player); return result.ToHttpResult(Results.Ok); }); } }