32 lines
1.2 KiB
C#
32 lines
1.2 KiB
C#
namespace GameList.Infrastructure;
|
|
|
|
public sealed class StateChangeNotificationMiddleware(RequestDelegate next)
|
|
{
|
|
public async Task InvokeAsync(HttpContext context, StateChangeNotifier notifier)
|
|
{
|
|
await next(context);
|
|
|
|
if (ShouldNotify(context))
|
|
notifier.NotifyChange();
|
|
}
|
|
|
|
private static bool ShouldNotify(HttpContext context)
|
|
{
|
|
if (context.Response.StatusCode >= StatusCodes.Status400BadRequest)
|
|
return false;
|
|
|
|
if (!HttpMethods.IsPost(context.Request.Method)
|
|
&& !HttpMethods.IsPut(context.Request.Method)
|
|
&& !HttpMethods.IsDelete(context.Request.Method))
|
|
return false;
|
|
|
|
var path = context.Request.Path;
|
|
|
|
return path.StartsWithSegments("/api/suggestions", StringComparison.OrdinalIgnoreCase)
|
|
|| path.StartsWithSegments("/api/votes", StringComparison.OrdinalIgnoreCase)
|
|
|| path.StartsWithSegments("/api/admin", StringComparison.OrdinalIgnoreCase)
|
|
|| path.StartsWithSegments("/api/me/phase", StringComparison.OrdinalIgnoreCase)
|
|
|| path.StartsWithSegments("/api/auth/register", StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
}
|