namespace Tnsu.ApprovalRoute.Application.RequestManage;
// Формы 1:1 с фронтендом (frontend/src/webparts/approvalAdmin/models/requestManage.ts,
// manageByUser.ts) — эти DTO заменяют собой то, что раньше собирал PnP-клиент
// НАПРЯМУЮ в SharePoint от имени текущего пользователя (см. requestManageService.ts):
// тут это делает бэкенд от имени приложения (см. ISharePointClient), поэтому
// результат не зависит от прав конкретного пользователя на списки SharePoint.
/// Заявка (строка списка «… — данные»), как её видит комбобокс выбора заявки.
public sealed record ManagedRequestSummaryDto(
int Id,
string Title,
string Status,
/// ISO 8601 или пустая строка.
string Created,
string AuthorName,
string? UniqueCode,
/// Партиция (серверный относительный url списка данных), где физически лежит заявка.
string ListId);
public sealed record ManagedRequestPageDto(IReadOnlyList Items, bool HasMore);
/// Строка списка «… — согласование».
public sealed record ManagedApprovalRowDto(
int Id,
int TicketId,
int? ApproverId,
string ApproverName,
string ApproverEmail,
string Position,
string Status,
/// ISO 8601 или пустая строка — форматирование под «дд.мм.гггг» остаётся на фронтенде.
string DateIso,
string Comment,
double Order,
bool AllowReassign,
string Phase,
int? SlaHours,
bool? AskOverdueReason);
/// Заявка + полный маршрут (обе фазы) — для экрана редактирования заявок.
public sealed record ManagedRequestMatrixDto(
ManagedRequestSummaryDto Request,
string SiteUrl,
string DataListTitle,
string DataListUrl,
string ApprovalListTitle,
IReadOnlyList Rows);
///
/// Строка согласования, найденная сразу по ВСЕМ типам заявок и партициям — для
/// экрана «Заявки по согласующему» (UserApprovalRow во фронтенде — тот же набор
/// полей, что и ManagedApprovalRowDto, только развёрнутый, а не вложенный).
///
public sealed record UserApprovalRowDto(
int Id,
int TicketId,
int? ApproverId,
string ApproverName,
string ApproverEmail,
string Position,
string Status,
string DateIso,
string Comment,
double Order,
bool AllowReassign,
string Phase,
int? SlaHours,
bool? AskOverdueReason,
int RequestTypeId,
string RequestTypeName,
string SiteUrl,
string ListId,
string ApprovalListTitle,
string RequestTitle,
string? RequestUniqueCode);