[backend/swagger] Mark all non-nullable schema properties as required

This commit is contained in:
Laura Hausmann 2024-04-09 00:12:27 +02:00
parent 998a4412cb
commit ae7cdf0f49
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 19 additions and 2 deletions

View file

@ -179,7 +179,7 @@ public static class ServiceExtensions
Scheme = "bearer"
});
options.AddOperationFilters();
options.AddFilters();
});
}

View file

@ -12,13 +12,30 @@ namespace Iceshrimp.Backend.Core.Extensions;
public static class SwaggerGenOptionsExtensions
{
public static void AddOperationFilters(this SwaggerGenOptions options)
public static void AddFilters(this SwaggerGenOptions options)
{
options.SchemaFilter<RequireNonNullablePropertiesSchemaFilter>();
options.OperationFilter<AuthorizeCheckOperationFilter>();
options.OperationFilter<HybridRequestOperationFilter>();
options.DocInclusionPredicate(DocInclusionPredicate);
}
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Local",
Justification = "SwaggerGenOptions.SchemaFilter<T> instantiates this class at runtime")]
private class RequireNonNullablePropertiesSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema model, SchemaFilterContext context)
{
var additionalRequiredProps = model.Properties
.Where(x => !x.Value.Nullable && !model.Required.Contains(x.Key))
.Select(x => x.Key);
foreach (var propKey in additionalRequiredProps)
{
model.Required.Add(propKey);
}
}
}
private static bool DocInclusionPredicate(string docName, ApiDescription apiDesc)
{
if (!apiDesc.TryGetMethodInfo(out var methodInfo)) return false;