- 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 без потери актуальных заявок.
Абстрактный базовый класс + два sealed-наследника вместо одного DTO с
опциональными полями под обе категории — так специфичные для каждого
вида напоминания поля не путаются с полями другого вида. Полиморфная
сериализация System.Text.Json ([JsonPolymorphic]/[JsonDerivedType])
нужна, иначе список IReadOnlyList<ReminderDto> сериализовался бы только
по общим полям базового класса.