Configure Swagger output?

Is it possible to configure the output from Litiums swagger implementation?

For example how OperationId is generated and define Response type?

We have a lot of custom API:s and as I understand since 7.4 you need to rely on Litiums swagger implementation.

Litium version: 7.7

Check this: Headless API Swashbuckle - #6 by patric.forsgard

From the link that @steve.redstorm provided to an old article you can configure the output with builders, example

        public void Configure(OpenApiDocumentBuilder builder)
        {
            builder.AddModelBuilder<HttpFileContent, HttpFileContentModelBuilder>();
            builder.AddModelBuilder<Search.FilterModel, FilterModelModelBuilder>();
            
            // Field framework
            builder.AddDocumentFilter<FieldTypeDocumentFilter>();
            builder.AddDocumentFilter<OptionFieldTypeDocumentFilter>();
            builder.AddModelBuilder<Localization<FieldTemplateFieldGroupLocalization>, FieldTemplateFieldGroupLocalizationModelBuilder>();
            builder.AddPropertyModel<MultiCultureFieldContainer, MultiCultureFieldContainerModelBuilder>();
            
            // Security
            builder.AddDocumentFilter<SecurityDocumentFilter>();
            builder.AddModelFilter<AccessControlListFilter>();

            // JSon Patch
            builder.AddModelFilter<JsonPatchDocumentSchemaFilter>();
            builder.AddDocumentFilter<JsonPatchDocumentSchemaFilter>();

            // Dynamic entity condition
            builder.AddModelFilter<DynamicEntityConditionFilter>();

            //Target group and dynamic group conditions
            builder.AddDocumentFilter<GroupConditionsDocumentFilter>();
            builder.AddModelFilter<GroupConditionFilter>();

            //Dynamic product list conditions
            builder.AddDocumentFilter<DynamicProductListConditionsDocumentFilter>();
            builder.AddModelFilter<DynamicProductListConditionFilter>();

            //Workflow task filter conditions
            builder.AddDocumentFilter<WorkflowTaskConditionsDocumentFilter>();
            builder.AddModelFilter<WorkflowTaskConditionFilter>();
        }

And example of a filter

using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using System.Linq;
using Litium.Runtime;
using Litium.Security;
using Litium.Web.WebApi.OpenApi;

namespace Litium.Web.OpenApi.Filters
{
    internal class AccessControlListFilter : IOpenApiModelFilter
    {
        private readonly OperationDefinitionService _operationDefinitionService;

        public AccessControlListFilter(OperationDefinitionService operationDefinitionService)
        {
            _operationDefinitionService = operationDefinitionService;
        }

        public void Apply(OpenApiSchema openApiSchema, OpenApiModelFilterContext context)
        {
            if (context.SystemType.Inherits<AccessControlOperationEntry>())
            {
                openApiSchema.Properties["operation"] = new OpenApiSchema
                {
                    Type = "string",
                    Enum = _operationDefinitionService.GetAll()
                                                      .OfType<FunctionOperationDefinition>()
                                                      .Select(x => new OpenApiString(x.Id))
                                                      .Cast<IOpenApiAny>()
                                                      .ToList()
                };
            }
            else if (context.SystemType.Inherits<AccessControlEntry>())
            {
                openApiSchema.Properties["operation"] = new OpenApiSchema
                {
                    Type = "string",
                    Enum = _operationDefinitionService.GetAll()
                                                      .OfType<EntityOperationDefinition>()
                                                      .Select(x => new OpenApiString(x.Id))
                                                      .Cast<IOpenApiAny>()
                                                      .ToList()
                };
            }
        }
    }
}
1 Like

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.