feat(notification-outbox): additive NotificationId query filter for ?correlationId= deep links

Claude-Session: https://claude.ai/code/session_01NcMG6xXdsJbmD2wYAgkK29
This commit is contained in:
Joseph Doherty
2026-09-06 10:59:49 -04:00
parent 7e3e809a70
commit 5497ffd181
6 changed files with 83 additions and 3 deletions
@@ -6,6 +6,11 @@ namespace ZB.MOM.WW.ScadaBridge.Commons.Messages.Notification;
/// Outbox UI -> Central: paginated, filtered query over the notification outbox.
/// All filter fields are optional; <see cref="StuckOnly"/> restricts results to stuck notifications.
/// </summary>
/// <param name="NotificationIdFilter">
/// Exact match on a single notification — the <c>?correlationId=</c> deep link from the
/// Flow Debugger / Audit Log. Additive; <c>null</c> means "no filter" (legacy senders
/// compile unchanged).
/// </param>
public record NotificationOutboxQueryRequest(
string CorrelationId,
string? StatusFilter,
@@ -18,7 +23,8 @@ public record NotificationOutboxQueryRequest(
DateTimeOffset? To,
int PageNumber,
int PageSize,
string? SourceNodeFilter = null);
string? SourceNodeFilter = null,
string? NotificationIdFilter = null);
/// <summary>
/// A single notification row summarised for outbox UI display.
@@ -23,6 +23,10 @@ namespace ZB.MOM.WW.ScadaBridge.Commons.Types.Notifications;
/// <c>"central-a"</c>, <c>"site-plant-a-node-a"</c>). Exact match; <c>null</c>
/// means "do not constrain".
/// </param>
/// <param name="NotificationId">
/// Exact match on a single <c>NotificationId</c> — the <c>?correlationId=</c> deep link
/// from the Flow Debugger / Audit Log. <c>null</c> means "do not constrain".
/// </param>
public record NotificationOutboxFilter(
NotificationStatus? Status = null,
NotificationType? Type = null,
@@ -33,4 +37,5 @@ public record NotificationOutboxFilter(
DateTimeOffset? StuckCutoff = null,
DateTimeOffset? From = null,
DateTimeOffset? To = null,
string? SourceNode = null);
string? SourceNode = null,
string? NotificationId = null);