diff --git a/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs b/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs index 44e95ba0d..336025ee0 100644 --- a/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs +++ b/src/Squidex/Areas/Api/Config/Swagger/SwaggerServices.cs @@ -106,6 +106,7 @@ namespace Squidex.Areas.Api.Config.Swagger settings.GeneratorSettings.DocumentProcessors.Add(new RuleActionProcessor()); settings.GeneratorSettings.DocumentProcessors.Add(new XmlTagProcessor()); + settings.GeneratorSettings.OperationProcessors.Add(new TagByGroupNameProcessor()); settings.GeneratorSettings.OperationProcessors.Add(new XmlResponseTypesProcessor()); return settings; diff --git a/src/Squidex/Areas/Api/Config/Swagger/TagByGroupNameProcessor.cs b/src/Squidex/Areas/Api/Config/Swagger/TagByGroupNameProcessor.cs new file mode 100644 index 000000000..c1cc69ef6 --- /dev/null +++ b/src/Squidex/Areas/Api/Config/Swagger/TagByGroupNameProcessor.cs @@ -0,0 +1,32 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Collections.Generic; +using System.Reflection; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using NSwag.SwaggerGeneration.Processors; +using NSwag.SwaggerGeneration.Processors.Contexts; +using Squidex.Infrastructure.Tasks; + +namespace Squidex.Areas.Api.Config.Swagger +{ + public sealed class TagByGroupNameProcessor : IOperationProcessor + { + public Task ProcessAsync(OperationProcessorContext context) + { + var groupName = context.ControllerType.GetCustomAttribute()?.GroupName; + + if (!string.IsNullOrWhiteSpace(groupName)) + { + context.OperationDescription.Operation.Tags = new List { groupName }; + } + + return TaskHelper.True; + } + } +}