Files
GameList/Endpoints/StateEndpoints.cs

46 lines
1.6 KiB
C#

using GameList.Contracts;
using GameList.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
namespace GameList.Endpoints;
public static class StateEndpoints
{
public static void MapStateEndpoints(this IEndpointRouteBuilder app)
{
app.MapGet("/api/state", async (AppDbContext db) =>
{
var state = await db.AppState.AsNoTracking().FirstAsync();
var summary = new
{
state.CurrentPhase,
state.UpdatedAt,
Players = await db.Players.CountAsync(),
Suggestions = await db.Suggestions.CountAsync(),
Votes = await db.Votes.CountAsync()
};
return Results.Ok(summary);
});
app.MapGet("/api/me", async (HttpContext ctx, AppDbContext db) =>
{
var player = await EndpointHelpers.GetOrCreatePlayer(ctx, db);
return Results.Ok(new { player.Id, player.DisplayName });
});
app.MapPost("/api/me/name", async ([FromBody] SetNameRequest request, HttpContext ctx, AppDbContext db) =>
{
if (string.IsNullOrWhiteSpace(request.Name) || request.Name.Length > 64)
{
return Results.BadRequest(new { error = "Name is required and must be <= 64 characters." });
}
var player = await EndpointHelpers.GetOrCreatePlayer(ctx, db);
player.DisplayName = request.Name.Trim();
await db.SaveChangesAsync();
return Results.Ok(new { player.Id, player.DisplayName });
});
}
}