using Microsoft.Extensions.Options;
using SharedKernel;
namespace Web.Api.Extensions;
///
/// appsettings Features 섹션 기반 엔드포인트 게이트.
/// 플래그가 꺼져 있으면 매핑된 라우트가 404(NotFound)를 반환한다 — 라우트/핸들러 코드는 보존.
/// 사용: .RequireFeature(c => c.Channel)
///
public static class FeatureGateExtensions
{
public static TBuilder RequireFeature(this TBuilder builder, Func feature) where TBuilder : IEndpointConventionBuilder
{
builder.AddEndpointFilter(async (context, next) => {
var settings = context.HttpContext.RequestServices.GetRequiredService>().Value;
if (!feature(settings.Features))
{
return Results.NotFound();
}
return await next(context);
});
return builder;
}
}