Напоминания: убрать дубль ManagerEmail, ссылка из настроек; None первым во всех enum

Напоминания:
- ProbationEndingReminderDto: ManagerEmail убран — это был унаследованный
  ReceiverEmail под вторым именем.
- Ссылка для ProbationEnding больше не ведёт на саму заявку на приём (она уже
  закрыта, решать по ней нечего) — берётся из новой настройки
  RemindersOptions.ProbationReminderUrl и ведёт в раздел, где заводят новую
  заявку. Подстановок в ней нет: адрес конкретной формы в портал не передать,
  rptype без rpid/rpsource игнорируется (см. parseRoute в request-portal).
  Заодно ушли BuildProbationUrl и ненужные больше параметры type/listId.

Стайлгайд (CLAUDE.md) — у enum первое значение None:
- ReminderFeed: None=0 трактуется как ApprovalOverdue, чтобы вызов без явного
  выбора работал как раньше.
- EmploymentStatus: заодно инвертирован switch в ReminderService — раньше
  «продолжить» было веткой по умолчанию, и новый None молча означал бы
  «сотрудник работает». Теперь по умолчанию пропуск с предупреждением.
- ConditionsLogic: None — НЕвалидное значение, отвергается валидаторами шага
  (в том числе новым PatchTemplateRouteStepRequestValidator, его не было вовсе).
  Поэтому у ConditionsLogic в Create/Update-запросах убрано значение по
  умолчанию: System.Text.Json в .NET 10 уважает дефолты параметров
  конструктора, и пропущенное поле молча означало «И». Теперь пропущенное поле
  даёт None и упирается в валидатор.

ЛОМАЮЩЕЕ ИЗМЕНЕНИЕ КОНТРАКТА: клиент, не присылающий conditionsLogic в
POST/PUT шага, получит 400 вместо прежнего молчаливого «И». Админка не
затронута — она это поле всегда отправляет.
This commit is contained in:
gorbenko.pavel
2026-08-27 15:53:31 +05:00
parent 81ed85d6ce
commit 31a0a8e9e3
11 changed files with 192 additions and 102 deletions
@@ -1,8 +1,9 @@
namespace Tnsu.ApprovalRoute.Application.Reminders;
/// <param name="ManagerEmail">
/// То же значение, что и унаследованный ReceiverEmail, — email руководителя
/// принимаемого сотрудника, кому адресовано напоминание.
/// <param name="ReceiverEmail">
/// Email руководителя принимаемого сотрудника — кому адресовано напоминание.
/// Отдельного ManagerEmail рядом нет намеренно: это было то же самое значение
/// под вторым именем.
/// </param>
/// <param name="CandidateEmail">Email принимаемого сотрудника (см. ReminderService.GetProbationEndingAsync).</param>
/// <param name="CandidateName">ФИО принимаемого сотрудника (колонка CandidateName списка данных).</param>
@@ -11,7 +12,7 @@ namespace Tnsu.ApprovalRoute.Application.Reminders;
/// <param name="ProbationEndsAt">Дата окончания испытательного срока (HireDate + срок).</param>
/// <param name="DaysUntilProbationEnds">Сколько дней осталось до конца испытательного срока.</param>
public sealed record ProbationEndingReminderDto(
string ManagerEmail,
string ReceiverEmail,
string CandidateEmail,
string CandidateName,
string? ProbationPeriod,
@@ -20,4 +21,4 @@ public sealed record ProbationEndingReminderDto(
int DaysUntilProbationEnds,
string Url,
string? ReceiverName = null)
: ReminderDto(ManagerEmail, ReceiverName, Url);
: ReminderDto(ReceiverEmail, ReceiverName, Url);