/
DataDictionaryDocumentFilter.cs
77 lines (56 loc) · 3.54 KB
/
DataDictionaryDocumentFilter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;
using JJMasterData.Core.DataDictionary.Models;
using JJMasterData.Core.DataDictionary.Repository.Abstractions;
using JJMasterData.Core.Tasks;
using Microsoft.Extensions.DependencyInjection;
namespace JJMasterData.Swagger.AspNetCore;
public class DataDictionaryDocumentFilter(IServiceProvider serviceProvider) : IDocumentFilter
{
private static string Version { get; } = Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? string.Empty;
public void Apply(OpenApiDocument document, DocumentFilterContext context)
{
using var scope = serviceProvider.CreateScope();
var dataDictionaryRepository = scope.ServiceProvider.GetRequiredService<IDataDictionaryRepository>();
document.Info.Version = Version;
var formElements = dataDictionaryRepository.GetFormElementList();
foreach (var formElement in formElements)
{
var defaultPathItem = new DataDictionaryPathItem($"/MasterApi/{formElement.Name}");
var detailPathItem = new DataDictionaryPathItem($"{defaultPathItem.Key}/{{id}}");
var factory = new DataDictionaryOperationFactory(formElement, formElement.ApiOptions);
if (formElement.ApiOptions.EnableGetAll)
defaultPathItem.AddOperation(OperationType.Get, factory.GetAll());
if (formElement.ApiOptions.EnableGetDetail)
detailPathItem.AddOperation(OperationType.Get, factory.Get());
if (formElement.ApiOptions.EnableAdd)
defaultPathItem.AddOperation(OperationType.Post, factory.Post());
if (formElement.ApiOptions.EnableUpdate)
defaultPathItem.AddOperation(OperationType.Put, factory.Put());
if (formElement.ApiOptions.EnableUpdatePart)
defaultPathItem.AddOperation(OperationType.Patch, factory.Patch());
if (formElement.ApiOptions.EnableDel)
detailPathItem.AddOperation(OperationType.Delete, factory.Delete());
document.Paths.AddDataDictionaryPath(defaultPathItem);
document.Paths.AddDataDictionaryPath(detailPathItem);
foreach (var field in formElement.Fields)
{
if (field.Component != FormComponent.File || field.DataFile == null)
continue;
var filePathItem = new DataDictionaryPathItem($"/MasterApi/{formElement.Name}/{{id}}/{field.Name}/file");
var fileDetailPathItem = new DataDictionaryPathItem($"{filePathItem.Key}/{{fileName}}");
if (formElement.ApiOptions.EnableGetDetail)
fileDetailPathItem.AddOperation(OperationType.Get, factory.GetFile(field));
if (formElement.ApiOptions is { EnableAdd: true, EnableUpdate: true })
filePathItem.AddOperation(OperationType.Post, factory.PostFile(field));
if (formElement.ApiOptions.EnableUpdatePart)
fileDetailPathItem.AddOperation(OperationType.Patch, factory.RenameFile(field));
if (formElement.ApiOptions.EnableDel)
fileDetailPathItem.AddOperation(OperationType.Delete, factory.DeleteFile(field));
document.Paths.AddDataDictionaryPath(filePathItem);
document.Paths.AddDataDictionaryPath(fileDetailPathItem);
}
}
}
}