sunpengfei
2025-08-01 7f162ab11684a2afddd2773c476b8df0248c6849
feat:文档开发
1个文件已添加
1 文件已重命名
4个文件已修改
78 ■■■■ 已修改文件
FlexJobApi.Core/FlexJobApiCoreStartup.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/SwaggerUtils/EnumSchemaFilter.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/XmlDocUtils/XmlDocUtils.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/settings.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.User.Application/Menus/Queries/MenuAllQueryHandler.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApiCoreStartup.cs
@@ -55,7 +55,8 @@
            services.AddSpecificationDocuments(options =>
            {
                options.OperationFilter<FurionCustomOperationIdFilter>();
                options.OperationFilter<CustomOperationIdFilter>();
                options.SchemaFilter<EnumSchemaFilter>();
            });
            services.AddControllers()
FlexJobApi.Core/Utils/SwaggerUtils/CustomOperationIdFilter.cs
File was renamed from FlexJobApi.Core/Utils/SwaggerUtils/FurionCustomOperationIdFilter.cs
@@ -9,7 +9,7 @@
namespace FlexJobApi.Core
{
    public class FurionCustomOperationIdFilter : IOperationFilter
    public class CustomOperationIdFilter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
FlexJobApi.Core/Utils/SwaggerUtils/EnumSchemaFilter.cs
New file
@@ -0,0 +1,40 @@
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.Core
{
    public class EnumSchemaFilter : ISchemaFilter
    {
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            if (context.Type.IsEnum)
            {
                // 枚举类型的描述(来自枚举本身的注释)
                schema.Description ??= GetEnumDescription(context.Type);
            }
        }
        // 获取枚举类型的注释
        private string GetEnumDescription(Type enumType)
        {
            var xmlDoc = XmlDocUtils.GetXmlDocAsync().Result;
            var member = XmlDocUtils.GetXmlDocMemberAsync(enumType, xmlDoc).Result;
            var description = member?.Summary ?? "";
            foreach (var enumValue in Enum.GetValues(enumType))
            {
                var enumMember = enumType.GetMember(enumValue.ToString()).First();
                var enumXmlDocMember = XmlDocUtils.GetXmlDocMemberAsync(enumMember, xmlDoc).Result;
                description += $"{enumValue}-{enumXmlDocMember?.Summary} ";
            }
            return description;
        }
    }
}
FlexJobApi.Core/Utils/XmlDocUtils/XmlDocUtils.cs
@@ -24,6 +24,8 @@
    {
        private const string cacheKey = "XmlDoc";
        public static XmlDoc XmlDoc { get; set; }
        /// <summary>
        /// 生成注释文档
        /// </summary>
@@ -75,6 +77,8 @@
                }
            }
            XmlDoc = xmlDoc;
            if (xmlDoc.Members.Any())
            {
                var json = JsonConvert.SerializeObject(xmlDoc);
@@ -90,17 +94,19 @@
        /// <returns></returns>
        public static async Task<XmlDoc> GetXmlDocAsync()
        {
            XmlDoc xmlDoc = null;
            if (XmlDoc == null)
            {
            var json = await App.GetService<IDistributedCache>().GetStringAsync(cacheKey);
            if (!string.IsNullOrEmpty(json))
            {
                xmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json);
                    XmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json);
            }
            if (xmlDoc == null)
                if (XmlDoc == null)
            {
                xmlDoc = await BuildXmlDocAsync();
                    XmlDoc = await BuildXmlDocAsync();
            }
            return xmlDoc;
            }
            return XmlDoc;
        }
        /// <summary>
@@ -113,15 +119,7 @@
        {
            if (xmlDoc == null)
            {
                var json = await App.GetService<IDistributedCache>().GetStringAsync(cacheKey);
                if (!string.IsNullOrEmpty(json))
                {
                    xmlDoc = JsonConvert.DeserializeObject<XmlDoc>(json);
                }
            }
            if (xmlDoc == null)
            {
                xmlDoc = await BuildXmlDocAsync();
                xmlDoc = await GetXmlDocAsync();
            }
            if (xmlDoc != null && memberInfo != null)
            {
FlexJobApi.Core/settings.json
@@ -11,8 +11,7 @@
          "Name": "孙鹏飞"
        }
      }
    ],
    "EnumToNumber": true
    ]
  },
  "CorsAccessorSettings": {
    "WithExposedHeaders": [
FlexJobApi.User.Application/Menus/Queries/MenuAllQueryHandler.cs
@@ -26,6 +26,8 @@
        public async Task<MenuAllCallback> Handle(MenuAllQuery request, CancellationToken cancellationToken)
        {
            var config = new TypeAdapterConfig();
            config.Default.MaxDepth(10);
            var callback = new MenuAllCallback();
            callback.Items = await menuRep.AsQueryable()
              .Include(it => it.Childrens.Where(c =>
@@ -37,7 +39,7 @@
                    it.Type == EnumMenuType.Menu
                    || it.Type == EnumMenuType.Page
                    || it.Type == EnumMenuType.Modal)
              .ProjectToType<MenuAllCallbackItem>()
              .ProjectToType<MenuAllCallbackItem>(config)
              .ToListAsync(cancellationToken);
            return callback;
        }