[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"
|
||||
});
|
||||
|
||||
options.AddOperationFilters();
|
||||
options.AddFilters();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue