ReminderDto: разделить на ApprovalOverdueReminderDto и ProbationEndingReminderDto

Абстрактный базовый класс + два sealed-наследника вместо одного DTO с
опциональными полями под обе категории — так специфичные для каждого
вида напоминания поля не путаются с полями другого вида. Полиморфная
сериализация System.Text.Json ([JsonPolymorphic]/[JsonDerivedType])
нужна, иначе список IReadOnlyList<ReminderDto> сериализовался бы только
по общим полям базового класса.
This commit is contained in:
gorbenko.pavel
2026-08-27 12:31:45 +05:00
parent 874e41990c
commit 5d7503209a
5 changed files with 99 additions and 68 deletions
@@ -0,0 +1,25 @@
namespace Tnsu.ApprovalRoute.Application.Reminders;
/// <param name="ManagerEmail">Email руководителя принимаемого сотрудника — кому напоминать.</param>
/// <param name="CandidateEmail">Email принимаемого сотрудника (см. ReminderService.GetProbationEndingAsync).</param>
/// <param name="CandidateName">ФИО принимаемого сотрудника (колонка CandidateName списка данных).</param>
/// <param name="ProbationPeriod">Текст испытательного срока (колонка ProbationPeriod).</param>
/// <param name="HireDate">Дата приёма (колонка HireDate).</param>
/// <param name="ProbationEndsAt">Дата окончания испытательного срока (HireDate + срок).</param>
/// <param name="DaysUntilProbationEnds">Сколько дней осталось до конца испытательного срока.</param>
public sealed record ProbationEndingReminderDto(
string ManagerEmail,
string CandidateEmail,
string CandidateName,
string? ProbationPeriod,
DateTimeOffset HireDate,
DateTimeOffset ProbationEndsAt,
int DaysUntilProbationEnds,
string Url,
int RequestTypeId,
string RequestTypeName,
int RequestId,
string Status,
string? RequestUniqueCode)
: ReminderDto(
ReminderCategory.ProbationEnding, Url, RequestTypeId, RequestTypeName, RequestId, Status, RequestUniqueCode);