diff --git a/backend/Directory.Packages.props b/backend/Directory.Packages.props index 6673224..5696310 100644 --- a/backend/Directory.Packages.props +++ b/backend/Directory.Packages.props @@ -14,5 +14,6 @@ + \ No newline at end of file diff --git a/backend/src/Tnsu.ApprovalRoute.Api/Program.cs b/backend/src/Tnsu.ApprovalRoute.Api/Program.cs index 01a6c2d..76e4a2d 100644 --- a/backend/src/Tnsu.ApprovalRoute.Api/Program.cs +++ b/backend/src/Tnsu.ApprovalRoute.Api/Program.cs @@ -3,6 +3,7 @@ using Extensions.Hosting.AsyncInitialization; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Microsoft.OpenApi; using Tnsu.ApprovalRoute.Api.Auth; using Tnsu.ApprovalRoute.Application; using Tnsu.ApprovalRoute.Application.Common.Interfaces; @@ -15,7 +16,33 @@ builder.Services.AddApprovalRouteApplication(); builder.Services.AddApprovalRouteAuth(builder.Configuration); builder.Services.AddHttpContextAccessor(); builder.Services.AddScoped(); -builder.Services.AddOpenApi(); +builder.Services.AddOpenApi(options => +{ + options.AddDocumentTransformer((document, _, _) => + { + document.Components ??= new OpenApiComponents(); + document.Components.SecuritySchemes ??= new Dictionary(); + document.Components.SecuritySchemes["Bearer"] = new OpenApiSecurityScheme + { + Type = SecuritySchemeType.Http, + Scheme = "bearer", + BearerFormat = "JWT", + Description = "Введите JWT токен" + }; + return Task.CompletedTask; + }); + options.AddOperationTransformer((operation, context, _) => + { + operation.Security = + [ + new OpenApiSecurityRequirement + { + [new OpenApiSecuritySchemeReference("Bearer", context.Document)] = [] + } + ]; + return Task.CompletedTask; + }); +}); builder.Services.AddHealthChecks(); builder.Services.AddControllers() .AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())); @@ -23,7 +50,16 @@ builder.Services.AddControllers() var app = builder.Build(); if (app.Environment.IsDevelopment()) +{ app.MapOpenApi(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/openapi/v1.json", "Tnsu Approval Route v1"); + c.RoutePrefix = string.Empty; + c.ConfigObject.AdditionalItems["persistAuthorization"] = true; + c.EnableTryItOutByDefault(); + }); +} app.MapHealthChecks("/health"); diff --git a/backend/src/Tnsu.ApprovalRoute.Api/Tnsu.ApprovalRoute.Api.csproj b/backend/src/Tnsu.ApprovalRoute.Api/Tnsu.ApprovalRoute.Api.csproj index 325ff39..72b635e 100644 --- a/backend/src/Tnsu.ApprovalRoute.Api/Tnsu.ApprovalRoute.Api.csproj +++ b/backend/src/Tnsu.ApprovalRoute.Api/Tnsu.ApprovalRoute.Api.csproj @@ -12,5 +12,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive +