5a878b78d4
Add missing <summary>/<param>/<returns>/<typeparam> tags and switch interface implementations to <inheritdoc/> across 106 files; strip project bookkeeping identifiers (Task NN, #05-TNN, PLAN-04, StoreAndForward-0NN) from shipped code comments while preserving the descriptive rationale. Comment-only: zero code-logic lines changed; solution builds 0/0. Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj
197 lines
6.6 KiB
C#
197 lines
6.6 KiB
C#
using ZB.MOM.WW.ScadaBridge.Commons.Types.Notifications;
|
|
|
|
namespace ZB.MOM.WW.ScadaBridge.Commons.Messages.Notification;
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: paginated, filtered query over the notification outbox.
|
|
/// All filter fields are optional; <see cref="StuckOnly"/> restricts results to stuck notifications.
|
|
/// </summary>
|
|
public record NotificationOutboxQueryRequest(
|
|
string CorrelationId,
|
|
string? StatusFilter,
|
|
string? TypeFilter,
|
|
string? SourceSiteFilter,
|
|
string? ListNameFilter,
|
|
bool StuckOnly,
|
|
string? SubjectKeyword,
|
|
DateTimeOffset? From,
|
|
DateTimeOffset? To,
|
|
int PageNumber,
|
|
int PageSize,
|
|
string? SourceNodeFilter = null);
|
|
|
|
/// <summary>
|
|
/// A single notification row summarised for outbox UI display.
|
|
/// </summary>
|
|
public record NotificationSummary(
|
|
string NotificationId,
|
|
string Type,
|
|
string ListName,
|
|
string Subject,
|
|
string Status,
|
|
int RetryCount,
|
|
string? LastError,
|
|
string SourceSiteId,
|
|
string? SourceInstanceId,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset? DeliveredAt,
|
|
bool IsStuck,
|
|
string? SourceNode = null);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: paginated response for a <see cref="NotificationOutboxQueryRequest"/>.
|
|
/// </summary>
|
|
public record NotificationOutboxQueryResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage,
|
|
IReadOnlyList<NotificationSummary> Notifications,
|
|
int TotalCount);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request to immediately retry delivery of a notification.
|
|
/// </summary>
|
|
/// <param name="CorrelationId">Request/response correlation id.</param>
|
|
/// <param name="NotificationId">The notification to re-queue.</param>
|
|
/// <param name="RequestedBy">
|
|
/// The authenticated operator who initiated the retry, stamped as the <c>Actor</c> on
|
|
/// the emitted audit row so an un-park is attributable. Additive; null where
|
|
/// no identity is available (legacy senders compile unchanged).
|
|
/// </param>
|
|
public record RetryNotificationRequest(
|
|
string CorrelationId,
|
|
string NotificationId,
|
|
string? RequestedBy = null);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: result of a <see cref="RetryNotificationRequest"/>.
|
|
/// </summary>
|
|
public record RetryNotificationResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request to discard (cancel) a pending or stuck notification.
|
|
/// </summary>
|
|
/// <param name="CorrelationId">Request/response correlation id.</param>
|
|
/// <param name="NotificationId">The notification to discard.</param>
|
|
/// <param name="RequestedBy">
|
|
/// The authenticated operator who initiated the discard, stamped as the <c>Actor</c> on
|
|
/// the emitted terminal audit row. Additive; null where no identity is available.
|
|
/// </param>
|
|
public record DiscardNotificationRequest(
|
|
string CorrelationId,
|
|
string NotificationId,
|
|
string? RequestedBy = null);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: result of a <see cref="DiscardNotificationRequest"/>.
|
|
/// </summary>
|
|
public record DiscardNotificationResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request for the full detail of a single notification
|
|
/// (including Body and resolved recipients), for the report detail modal.
|
|
/// </summary>
|
|
public record NotificationDetailRequest(
|
|
string CorrelationId,
|
|
string NotificationId);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: full detail for one notification. On a repository fault or
|
|
/// missing row, Success is false / Detail is null and ErrorMessage carries the cause.
|
|
/// </summary>
|
|
public record NotificationDetailResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage,
|
|
NotificationDetail? Detail);
|
|
|
|
/// <summary>
|
|
/// Full notification detail for the report detail modal — everything in the grid's
|
|
/// NotificationSummary plus Body, ResolvedTargets (recipients), TypeData, SourceScript,
|
|
/// and the additional lifecycle timestamps.
|
|
/// </summary>
|
|
public record NotificationDetail(
|
|
string NotificationId,
|
|
string Type,
|
|
string ListName,
|
|
string Subject,
|
|
string Body,
|
|
string Status,
|
|
int RetryCount,
|
|
string? LastError,
|
|
string? ResolvedTargets,
|
|
string? TypeData,
|
|
string SourceSiteId,
|
|
string? SourceInstanceId,
|
|
string? SourceScript,
|
|
DateTimeOffset SiteEnqueuedAt,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset? LastAttemptAt,
|
|
DateTimeOffset? NextAttemptAt,
|
|
DateTimeOffset? DeliveredAt,
|
|
string? SourceNode = null);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request for the notification outbox KPI summary.
|
|
/// </summary>
|
|
public record NotificationKpiRequest(
|
|
string CorrelationId);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: KPI summary for the notification outbox dashboard.
|
|
/// On a repository fault <see cref="Success"/> is <c>false</c>, <see cref="ErrorMessage"/>
|
|
/// carries the cause, and the KPI fields are zeroed/<c>null</c>.
|
|
/// </summary>
|
|
public record NotificationKpiResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage,
|
|
int QueueDepth,
|
|
int StuckCount,
|
|
int ParkedCount,
|
|
int DeliveredLastInterval,
|
|
TimeSpan? OldestPendingAge);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request for the per-source-site notification outbox KPI breakdown.
|
|
/// </summary>
|
|
public record PerSiteNotificationKpiRequest(
|
|
string CorrelationId);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: per-site KPI breakdown for the Notification KPIs page.
|
|
/// On a repository fault <see cref="Success"/> is <c>false</c>, <see cref="ErrorMessage"/>
|
|
/// carries the cause, and <see cref="Sites"/> is empty.
|
|
/// </summary>
|
|
public record PerSiteNotificationKpiResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage,
|
|
IReadOnlyList<SiteNotificationKpiSnapshot> Sites);
|
|
|
|
/// <summary>
|
|
/// Outbox UI -> Central: request for the per-node notification outbox KPI breakdown.
|
|
/// Mirrors <see cref="PerSiteNotificationKpiRequest"/> but groups by <c>SourceNode</c>
|
|
/// instead of <c>SourceSiteId</c>. Additive — does not change per-site behaviour.
|
|
/// </summary>
|
|
public record PerNodeNotificationKpiRequest(
|
|
string CorrelationId);
|
|
|
|
/// <summary>
|
|
/// Central -> Outbox UI: per-node KPI breakdown for the Notification KPIs page.
|
|
/// On a repository fault <see cref="Success"/> is <c>false</c>, <see cref="ErrorMessage"/>
|
|
/// carries the cause, and <see cref="Nodes"/> is empty. Nodes with a <c>NULL</c>
|
|
/// <c>SourceNode</c> are omitted.
|
|
/// </summary>
|
|
public record PerNodeNotificationKpiResponse(
|
|
string CorrelationId,
|
|
bool Success,
|
|
string? ErrorMessage,
|
|
IReadOnlyList<NodeNotificationKpiSnapshot> Nodes);
|