using MediatR;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using TakeoutSaaS.Application.App.Subscriptions.Commands;
using TakeoutSaaS.Module.Scheduler.Options;
namespace TakeoutSaaS.Module.Scheduler.Jobs;
///
/// 订阅到期检查任务:到期进入宽限期,宽限期到期自动暂停。
///
public sealed class SubscriptionExpiryCheckJob(
IMediator mediator,
IOptionsMonitor optionsMonitor,
ILogger logger)
{
///
/// 执行订阅到期检查。
///
public async Task ExecuteAsync()
{
// 1. 读取配置并执行到期处理
var options = optionsMonitor.CurrentValue;
var result = await mediator.Send(new ProcessSubscriptionExpiryCommand
{
GracePeriodDays = options.GracePeriodDays
});
// 2. 记录执行结果
logger.LogInformation(
"定时任务:订阅到期检查完成,进入宽限期 {EnteredGracePeriodCount},暂停 {SuspendedCount}",
result.EnteredGracePeriodCount,
result.SuspendedCount);
}
}