[backend/swagger] Mark all non-nullable schema properties as required
This commit is contained in:
parent
998a4412cb
commit
ae7cdf0f49
2 changed files with 19 additions and 2 deletions
|
@ -179,7 +179,7 @@ public static class ServiceExtensions
|
||||||
Scheme = "bearer"
|
Scheme = "bearer"
|
||||||
});
|
});
|
||||||
|
|
||||||
options.AddOperationFilters();
|
options.AddFilters();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,30 @@ namespace Iceshrimp.Backend.Core.Extensions;
|
||||||
|
|
||||||
public static class SwaggerGenOptionsExtensions
|
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<AuthorizeCheckOperationFilter>();
|
||||||
options.OperationFilter<HybridRequestOperationFilter>();
|
options.OperationFilter<HybridRequestOperationFilter>();
|
||||||
options.DocInclusionPredicate(DocInclusionPredicate);
|
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)
|
private static bool DocInclusionPredicate(string docName, ApiDescription apiDesc)
|
||||||
{
|
{
|
||||||
if (!apiDesc.TryGetMethodInfo(out var methodInfo)) return false;
|
if (!apiDesc.TryGetMethodInfo(out var methodInfo)) return false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue