Auto approve (#21)
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 3m39s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/21
This commit was merged in pull request #21.
This commit is contained in:
2026-09-14 09:01:56 +00:00
parent e2b6227015
commit 2b8fe77fac
24 changed files with 1443 additions and 29 deletions
+25
View File
@@ -6,12 +6,14 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
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.Approvals;
using Tnsu.ApprovalRoute.Application.ListPartitioning;
using Tnsu.ApprovalRoute.Application.Reminders;
using Tnsu.ApprovalRoute.Application.Reports;
@@ -59,6 +61,7 @@ builder.Services.AddApprovalRouteApplication();
builder.Services.Configure<RemindersOptions>(builder.Configuration.GetSection("Reminders"));
builder.Services.Configure<ListPartitioningOptions>(builder.Configuration.GetSection("ListPartitioning"));
builder.Services.Configure<ReportsOptions>(builder.Configuration.GetSection("Reports"));
builder.Services.Configure<AutoApproveOptions>(builder.Configuration.GetSection("AutoApprove"));
builder.Services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
@@ -133,6 +136,28 @@ app.UseHangfireDashboard("/hangfire", new DashboardOptions
]
});
// Рекуррентная задача регистрируется ПОСЛЕ Build (нужен собранный контейнер) и
// на каждом старте: AddOrUpdate идемпотентен и заодно подхватывает изменившееся
// расписание из конфигурации — иначе задача навсегда осталась бы с тем cron, с
// которым её создали в первый раз.
var autoApprove = app.Services.GetRequiredService<IOptions<AutoApproveOptions>>().Value;
var recurringJobs = app.Services.GetRequiredService<IRecurringJobManager>();
if (autoApprove.Enabled)
{
recurringJobs.AddOrUpdate<AutoApproveJob>(
AutoApproveJob.RecurringJobId,
job => job.RunAsync(CancellationToken.None),
autoApprove.Cron,
// Cron в настройке — в UTC, как и всё остальное время в сервисе; иначе
// расписание поехало бы при смене часового пояса машины.
new RecurringJobOptions { TimeZone = TimeZoneInfo.Utc });
}
else
{
// Выключили настройкой — снимаем задачу, а не оставляем её вхолостую крутиться.
recurringJobs.RemoveIfExists(AutoApproveJob.RecurringJobId);
}
app.MapControllers();
await app.InitAndRunAsync();