разные правки по беку

This commit is contained in:
gorbenko.pavel
2026-08-17 15:33:54 +05:00
parent 2a7130c37f
commit b92897254d
23 changed files with 475 additions and 315 deletions
+33 -3
View File
@@ -8,11 +8,12 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi;
using Scalar.AspNetCore;
using Serilog;
using Tnsu.ApprovalRoute.Api.Auth;
using Tnsu.ApprovalRoute.Api.Filters;
using Tnsu.ApprovalRoute.Application;
using Tnsu.ApprovalRoute.Application.ListPartitioning;
using Tnsu.ApprovalRoute.Application.Reminders;
using Tnsu.ApprovalRoute.Application.RequestTypeLists;
using Tnsu.ApprovalRoute.Application.Common.Interfaces;
using Tnsu.ApprovalRoute.Infrastructure;
@@ -20,11 +21,27 @@ const string CorsPolicyName = "Frontend";
var builder = WebApplication.CreateBuilder(args);
// Заменяет собой встроенных провайдеров логирования: все ILogger<T> в приложении
// (включая наши логи в ListPartitioning) идут через Serilog в оба синка ниже.
// ReadFrom.Configuration — чтобы Logging:LogLevel в appsettings продолжал работать
// как обычно, без второй, серилоговской системы настройки уровней рядом с ним.
builder.Host.UseSerilog((context, services, configuration) => configuration
.ReadFrom.Configuration(context.Configuration)
.Enrich.FromLogContext()
.WriteTo.Console()
// Один файл на календарный месяц (rollOnFileSizeLimit не включаем — ротация
// только по времени). retainedFileCountLimit: null — логи не подчищаются
// автоматически, ротацией места на диске занимается инфраструктура хоста.
.WriteTo.File(
"logs/log-.txt",
rollingInterval: RollingInterval.Month,
retainedFileCountLimit: null));
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
@@ -40,7 +57,7 @@ builder.Services.AddCors(options =>
builder.Services.AddApprovalRouteInfrastructure(builder.Configuration);
builder.Services.AddApprovalRouteApplication();
builder.Services.Configure<RemindersOptions>(builder.Configuration.GetSection("Reminders"));
builder.Services.Configure<ListProvisioningOptions>(builder.Configuration.GetSection("ListProvisioning"));
builder.Services.Configure<ListPartitioningOptions>(builder.Configuration.GetSection("ListPartitioning"));
// Hangfire на том же Postgres, что и остальные данные. Свои таблицы он создаёт сам
// (схема hangfire) при старте — отдельной EF-миграции для них не нужно.
@@ -109,6 +126,19 @@ app.UseCors(CorsPolicyName);
app.UseAuthentication();
app.UseAuthorization();
// Свой Basic Auth, а не схемы из AuthSetup: дашборд Hangfire открывается прямо в
// браузере без похода за токеном Entra, ему нужна отдельная, простая проверка.
// Логин/пароль — в конфигурации (Hangfire:Dashboard), см. appsettings.json.
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization =
[
new HangfireDashboardBasicAuthFilter(
app.Configuration["Hangfire:Dashboard:Username"] ?? string.Empty,
app.Configuration["Hangfire:Dashboard:Password"] ?? string.Empty)
]
});
app.MapControllers();
await app.InitAndRunAsync();