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; } }