using GameList.Data; using GameList.Domain; using Microsoft.AspNetCore.Authentication; namespace GameList.Infrastructure; public class EnsurePlayerExistsMiddleware(RequestDelegate next) { public async Task InvokeAsync(HttpContext context, AppDbContext db) { if (context.User.Identity?.IsAuthenticated == true) { var id = context.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value; if (string.IsNullOrWhiteSpace(id) || !Guid.TryParse(id, out var playerId)) { await context.SignOutAsync(); context.Response.StatusCode = StatusCodes.Status401Unauthorized; return; } var player = await db.Players.FindAsync(playerId); if (player is null) { await context.SignOutAsync(); context.Response.StatusCode = StatusCodes.Status401Unauthorized; return; } context.Items[nameof(Player)] = player; } await next(context); } }