Auto approve (#21)
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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user