using System.Text.Json.Serialization; namespace Tnsu.ApprovalRoute.Application.Reminders; /// Email того, кому адресовано напоминание. /// /// ФИО получателя, если оно известно. Не всегда доступно (например, у согласующего /// в старой строке списка без заполненного Title персонального поля) — тогда null. /// /// /// Ссылка на заявку. Собирается здесь, в сервисе (а не на стороне потребителя), /// потому что не константна: requestId и партиция списка (server-relative url, /// параметр rplist) у каждой заявки свои, и сервис их всё равно уже знает — /// дублировать эту логику снаружи незачем. /// /// /// Общая часть двух видов напоминаний — и /// . Категории заявки (RequestTypeId, /// RequestId и т.п.) здесь нет: она нужна только просроченным шагам согласования /// (Power Automate ссылается на неё, работая со списком согласования конкретного /// типа заявки) и объявлена прямо в ApprovalOverdueReminderDto. /// /// [JsonPolymorphic]/[JsonDerivedType] нужны, потому что ReminderService отдаёт /// список именно базового типа (IReadOnlyList<ReminderDto>) — без этих /// атрибутов System.Text.Json сериализовал бы только то, что объявлено здесь, /// теряя специфичные для наследника поля. Дискриминатор — системное поле "$type" /// со значением "ApprovalOverdue"/"ProbationEnding". /// [JsonPolymorphic] [JsonDerivedType(typeof(ApprovalOverdueReminderDto), "ApprovalOverdue")] [JsonDerivedType(typeof(ProbationEndingReminderDto), "ProbationEnding")] public abstract record ReminderDto(string ReceiverEmail, string? ReceiverName, string Url);