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; } }