diff --git a/src/Simplify.Web.Swagger/ControllerActionsFactory.cs b/src/Simplify.Web.Swagger/ControllerActionsFactory.cs index e57220d..d172eb2 100644 --- a/src/Simplify.Web.Swagger/ControllerActionsFactory.cs +++ b/src/Simplify.Web.Swagger/ControllerActionsFactory.cs @@ -164,4 +164,4 @@ private static OpenApiResponse CreateResponse(ProducesResponseAttribute produces return response; } -} +} \ No newline at end of file diff --git a/src/Simplify.Web.Swagger/EnumNamesSchemaFilter.cs b/src/Simplify.Web.Swagger/EnumNamesSchemaFilter.cs new file mode 100644 index 0000000..7d49d5b --- /dev/null +++ b/src/Simplify.Web.Swagger/EnumNamesSchemaFilter.cs @@ -0,0 +1,29 @@ +using System; +using System.Linq; +using Microsoft.OpenApi.Any; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace Simplify.Web.Swagger; + +/// +/// Adds names extension and a human-readable description to enum schemas. +/// +public class EnumNamesSchemaFilter : ISchemaFilter +{ + /// + public void Apply(OpenApiSchema schema, SchemaFilterContext context) + { + if (!context.Type.IsEnum) + return; + + var names = Enum.GetNames(context.Type); + var values = Enum.GetValues(context.Type).Cast().ToArray(); + + var varnames = new OpenApiArray(); + foreach (var name in names) + varnames.Add(new OpenApiString(name)); + + schema.Extensions["names"] = varnames; + } +} \ No newline at end of file diff --git a/src/Simplify.Web.Swagger/RequestBodyAttribute.cs b/src/Simplify.Web.Swagger/RequestBodyAttribute.cs index 656848e..1defc38 100644 --- a/src/Simplify.Web.Swagger/RequestBodyAttribute.cs +++ b/src/Simplify.Web.Swagger/RequestBodyAttribute.cs @@ -29,4 +29,4 @@ public class RequestBodyAttribute(Type model, string contentType = "application/ /// The type of the content. /// public string ContentType { get; private set; } = contentType; -} +} \ No newline at end of file diff --git a/src/Simplify.Web.Swagger/Simplify.Web.Swagger.csproj b/src/Simplify.Web.Swagger/Simplify.Web.Swagger.csproj index a677e3a..f6cad09 100644 --- a/src/Simplify.Web.Swagger/Simplify.Web.Swagger.csproj +++ b/src/Simplify.Web.Swagger/Simplify.Web.Swagger.csproj @@ -9,7 +9,7 @@ snupkg true - 1.2 + 1.3 Swagger extensions for Simplify.Web web-framework Simplify diff --git a/src/Simplify.Web.Swagger/SimplifyWebSwaggerExtensions.cs b/src/Simplify.Web.Swagger/SimplifyWebSwaggerExtensions.cs index a5796e6..6e66d33 100644 --- a/src/Simplify.Web.Swagger/SimplifyWebSwaggerExtensions.cs +++ b/src/Simplify.Web.Swagger/SimplifyWebSwaggerExtensions.cs @@ -19,5 +19,7 @@ public static void AddSimplifyWebSwagger(this SwaggerGenOptions options, Simplif options.DocumentFilter(); else options.DocumentFilter(args); + + options.SchemaFilter(); } } \ No newline at end of file diff --git a/src/TesterApp/Controllers/Api/v1/Users/GetMultipleController.cs b/src/TesterApp/Controllers/Api/v1/Users/GetMultipleController.cs index 5c7fe89..f3c5977 100644 --- a/src/TesterApp/Controllers/Api/v1/Users/GetMultipleController.cs +++ b/src/TesterApp/Controllers/Api/v1/Users/GetMultipleController.cs @@ -19,12 +19,14 @@ public override ControllerResponse Invoke() new() { UserName = "User 1", - CreationTime = DateTime.Now + CreationTime = DateTime.Now, + Role = UserRole.Admin }, new() { UserName = "User 2", - CreationTime = DateTime.Now.Subtract(TimeSpan.FromDays(1)) + CreationTime = DateTime.Now.Subtract(TimeSpan.FromDays(1)), + Role = UserRole.User } }; diff --git a/src/TesterApp/ViewModels/Users/UserRole.cs b/src/TesterApp/ViewModels/Users/UserRole.cs new file mode 100644 index 0000000..ef90a39 --- /dev/null +++ b/src/TesterApp/ViewModels/Users/UserRole.cs @@ -0,0 +1,9 @@ +namespace TesterApp.ViewModels.Users; + +public enum UserRole +{ + Guest, + User, + Moderator, + Admin +} \ No newline at end of file diff --git a/src/TesterApp/ViewModels/Users/UserViewModel.cs b/src/TesterApp/ViewModels/Users/UserViewModel.cs index 6c37462..f7b63f8 100644 --- a/src/TesterApp/ViewModels/Users/UserViewModel.cs +++ b/src/TesterApp/ViewModels/Users/UserViewModel.cs @@ -4,4 +4,5 @@ public class UserViewModel { public string UserName { get; set; } public DateTime CreationTime { get; set; } + public UserRole Role { get; set; } } \ No newline at end of file