using Tnsu.ApprovalRoute.Domain.Enums; namespace Tnsu.ApprovalRoute.Application.TemplateRouteSteps; // SlaHours/AskOverdueReason у шага перекрывают одноимённые поля типа заявки. // null — «не задано, наследовать», поэтому оба поля nullable и необязательны // (0 часов и false — это осознанный выбор, а не «пусто»). Добавлены в конец // записей, чтобы не ломать существующие позиционные вызовы. /// Одно условие появления шага — см. Domain.Entities.TemplateRouteStepCondition. public sealed record RouteStepConditionDto(string FieldName, ComparisonOperator Operation, string Value); public sealed record TemplateRouteStepDto( int Id, int OrderNo, string? ExecutorEmail, string? Position, ProjectRole? ProjectRole, HeadType? HeadType, RouteStepStatus Status, int RouteId, bool AllowReassignToOtherApprovers, IReadOnlyList Conditions, ConditionsLogic ConditionsLogic, string? Warning = null, int? SlaHours = null, bool? AskOverdueReason = null); public sealed record CreateTemplateRouteStepRequest( int OrderNo, string? ExecutorEmail, string? Position, ProjectRole? ProjectRole, HeadType? HeadType, RouteStepStatus Status, bool AllowReassignToOtherApprovers, IReadOnlyList? Conditions, ConditionsLogic ConditionsLogic = ConditionsLogic.And, int? SlaHours = null, bool? AskOverdueReason = null); public sealed record UpdateTemplateRouteStepRequest( int OrderNo, string? ExecutorEmail, string? Position, ProjectRole? ProjectRole, HeadType? HeadType, RouteStepStatus Status, bool AllowReassignToOtherApprovers, IReadOnlyList? Conditions, ConditionsLogic ConditionsLogic = ConditionsLogic.And, int? SlaHours = null, bool? AskOverdueReason = null); /// /// Как и остальные поля PATCH, Conditions=null означает «не менять». Отличить /// «не менять» от «убрать все условия» здесь нельзя (тот же приём, что и раньше /// для FieldName) — очистка условий делается через PUT с Conditions: []. /// public sealed record PatchTemplateRouteStepRequest( int? OrderNo, string? ExecutorEmail, string? Position, ProjectRole? ProjectRole, HeadType? HeadType, RouteStepStatus? Status, bool? AllowReassignToOtherApprovers, IReadOnlyList? Conditions, ConditionsLogic? ConditionsLogic = null, int? SlaHours = null, bool? AskOverdueReason = null);