feat(site-call-audit): additive TrackedOperationId query filter for ?correlationId= deep links

Claude-Session: https://claude.ai/code/session_01NcMG6xXdsJbmD2wYAgkK29
This commit is contained in:
Joseph Doherty
2026-09-06 11:00:03 -04:00
parent 5497ffd181
commit 95773aa9fd
6 changed files with 98 additions and 3 deletions
@@ -22,6 +22,11 @@ namespace ZB.MOM.WW.ScadaBridge.Commons.Messages.Audit;
/// Requested page size. The actor clamps this to the <c>[1, 200]</c> range, so
/// the effective ceiling is 200 rows per page regardless of the value sent.
/// </param>
/// <param name="TrackedOperationIdFilter">
/// Exact-match on one operation (the <c>?correlationId=</c> deep link from the
/// Flow Debugger / Audit Log); <c>null</c> = no filter. Additive, trailing
/// optional so existing positional callers are unaffected.
/// </param>
public sealed record SiteCallQueryRequest(
string CorrelationId,
string? StatusFilter,
@@ -34,7 +39,8 @@ public sealed record SiteCallQueryRequest(
DateTime? AfterCreatedAtUtc,
Guid? AfterId,
int PageSize,
string? SourceNodeFilter = null);
string? SourceNodeFilter = null,
Guid? TrackedOperationIdFilter = null);
/// <summary>
/// A single <c>SiteCalls</c> row summarised for the Site Calls UI grid. Carries
@@ -31,6 +31,12 @@ namespace ZB.MOM.WW.ScadaBridge.Commons.Types.Audit;
/// <c>"site-plant-a-node-a"</c>). Exact match; <c>null</c> means "do not
/// constrain". Rows with NULL <c>SourceNode</c> are excluded when set.
/// </param>
/// <param name="TrackedOperationId">
/// Restrict to exactly one cached call by its primary key — the
/// <c>?correlationId=</c> deep link from the Flow Debugger / Audit Log.
/// <c>null</c> means "do not constrain". AND-combined with every other field,
/// so a mismatching <see cref="SourceSite"/> (etc.) still yields no rows.
/// </param>
public sealed record SiteCallQueryFilter(
string? Channel = null,
string? SourceSite = null,
@@ -39,4 +45,5 @@ public sealed record SiteCallQueryFilter(
DateTime? FromUtc = null,
DateTime? ToUtc = null,
DateTime? StuckCutoffUtc = null,
string? SourceNode = null);
string? SourceNode = null,
Guid? TrackedOperationId = null);