cfc2b393bd
- ReminderDto: базовый класс сузился до ReceiverEmail/ReceiverName/Url; RequestTypeId/RequestTypeName/RequestId/Status/RequestUniqueCode остались только в ApprovalOverdueReminderDto — ProbationEndingReminderDto они не нужны. Дискриминатор полиморфной сериализации ($type) больше не дублируется отдельным enum-полем Category. - ApprovalOverdueReminderDto: старый Email сохранён рядом с унаследованным ReceiverEmail (то же значение) — контракт можно переключать постепенно. - ApprovalRow/RowSelect: добавлен Title согласующего (TansuSiteApprover/Title) — заполняет ReceiverName для просроченных шагов, когда он есть в SharePoint. - EmployeeDirectorySnapshot.NameByEmail: обратный поиск ФИО руководителя по email — заполняет ReceiverName для напоминаний об испытательном сроке без лишнего похода в api.tnsu.kz (данные уже загружены для EmailOf). - GetProbationEndingAsync: испытательный срок не длиннее 6 месяцев, поэтому читаем только текущую и последнюю архивную партицию (не весь архив) и фильтруем строки по HireDate не старше 6 месяцев — экономим лишние запросы к SharePoint без потери актуальных заявок.
33 lines
2.4 KiB
C#
33 lines
2.4 KiB
C#
using System.Text.Json.Serialization;
|
|
|
|
namespace Tnsu.ApprovalRoute.Application.Reminders;
|
|
|
|
/// <param name="ReceiverEmail">Email того, кому адресовано напоминание.</param>
|
|
/// <param name="ReceiverName">
|
|
/// ФИО получателя, если оно известно. Не всегда доступно (например, у согласующего
|
|
/// в старой строке списка без заполненного Title персонального поля) — тогда null.
|
|
/// </param>
|
|
/// <param name="Url">
|
|
/// Ссылка на заявку. Собирается здесь, в сервисе (а не на стороне потребителя),
|
|
/// потому что не константна: requestId и партиция списка (server-relative url,
|
|
/// параметр rplist) у каждой заявки свои, и сервис их всё равно уже знает —
|
|
/// дублировать эту логику снаружи незачем.
|
|
/// </param>
|
|
/// <remarks>
|
|
/// Общая часть двух видов напоминаний — <see cref="ApprovalOverdueReminderDto"/> и
|
|
/// <see cref="ProbationEndingReminderDto"/>. Категории заявки (RequestTypeId,
|
|
/// RequestId и т.п.) здесь нет: она нужна только просроченным шагам согласования
|
|
/// (Power Automate ссылается на неё, работая со списком согласования конкретного
|
|
/// типа заявки) и объявлена прямо в ApprovalOverdueReminderDto.
|
|
///
|
|
/// [JsonPolymorphic]/[JsonDerivedType] нужны, потому что ReminderService отдаёт
|
|
/// список именно базового типа (IReadOnlyList<ReminderDto>) — без этих
|
|
/// атрибутов System.Text.Json сериализовал бы только то, что объявлено здесь,
|
|
/// теряя специфичные для наследника поля. Дискриминатор — системное поле "$type"
|
|
/// со значением "ApprovalOverdue"/"ProbationEnding".
|
|
/// </remarks>
|
|
[JsonPolymorphic]
|
|
[JsonDerivedType(typeof(ApprovalOverdueReminderDto), "ApprovalOverdue")]
|
|
[JsonDerivedType(typeof(ProbationEndingReminderDto), "ProbationEnding")]
|
|
public abstract record ReminderDto(string ReceiverEmail, string? ReceiverName, string Url);
|