admin/tools/SwaggerDiag/Program.cs
2026-08-04 16:26:22 +08:00

48 lines
1.7 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using Oms.Application.Dtos.Orders;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Reflection;
var services = new ServiceCollection();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("OMS-Order", new OpenApiInfo { Title = "OMS-Order", Version = "v1" });
c.CustomSchemaIds(t => t.FullName?.Replace("+", ".") ?? t.Name);
});
var sp = services.BuildServiceProvider();
var gen = sp.GetRequiredService<ISchemaGenerator>();
var repo = new SchemaRepository("OMS-Order");
void Try(string name, Type t)
{
try
{
gen.GenerateSchema(t, repo);
Console.WriteLine($"OK {name}");
}
catch (Exception ex)
{
Console.WriteLine($"FAIL {name}: {ex.GetType().Name}: {ex.Message}");
if (ex.InnerException != null) Console.WriteLine($" inner: {ex.InnerException.Message}");
}
}
Try(nameof(OrderParcelBatchCreateInput), typeof(OrderParcelBatchCreateInput));
Try(nameof(OrderParcelCreateInput), typeof(OrderParcelCreateInput));
Try(nameof(OrderPriceCheckResultOutput), typeof(OrderPriceCheckResultOutput));
Try(nameof(OrderPriceCheckOutput), typeof(OrderPriceCheckOutput));
Try(nameof(OrderUploadInput), typeof(OrderUploadInput));
Try(nameof(OrderTemplateCustomDetailOutput), typeof(OrderTemplateCustomDetailOutput));
Try(nameof(OrderOutput), typeof(OrderOutput));
Try(nameof(OrderPaginatedOutput), typeof(OrderPaginatedOutput));
// Also generate for all public types in Orders Dtos
var asm = typeof(OrderOutput).Assembly;
foreach (var t in asm.GetTypes().Where(x => x.IsPublic && x.Namespace == "Oms.Application.Dtos.Orders").OrderBy(x => x.Name))
{
Try(t.Name, t);
}
Console.WriteLine($"Schemas generated: {repo.Schemas.Count}");