using MediatR;
using System.ComponentModel.DataAnnotations;
namespace TakeoutSaaS.Application.App.Subscriptions.Commands;
///
/// 处理自动续费:为开启自动续费且即将到期的订阅生成续费账单。
///
public sealed record ProcessAutoRenewalCommand : IRequest
{
///
/// 到期前 N 天生成续费账单。
///
[Range(0, 365, ErrorMessage = "续费提前天数必须在 0~365 之间")]
public int RenewalDaysBeforeExpiry { get; init; } = 3;
}
///
/// 自动续费处理结果。
///
public sealed record ProcessAutoRenewalResult
{
///
/// 扫描到的候选订阅数量。
///
public int CandidateCount { get; init; }
///
/// 实际创建的账单数量。
///
public int CreatedBillCount { get; init; }
}