From 00c7fe531607ca67d2b860a09f5335db6dcd1abb Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 14 Nov 2025 13:24:02 +0100 Subject: [PATCH] feat(history): enhance ReadHistoryQuery to support Envelope object and UUID - Replace nullable `OnlyLast` with non-nullable default `true` - Support filtering by Envelope object (Id or Uuid) in addition to deprecated EnvelopeId - Throw `BadRequestException` if no valid Envelope reference is provided - Preserve status filtering and ordering for latest history entries --- .../Histories/Queries/CountHistoryQuery.cs | 16 ++++++++++++++-- .../Histories/Queries/HistoryQueryBase.cs | 2 +- .../Histories/Queries/ReadHistoryQuery.cs | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/EnvelopeGenerator.Application/Histories/Queries/CountHistoryQuery.cs b/EnvelopeGenerator.Application/Histories/Queries/CountHistoryQuery.cs index 2f1dae88..abe38c16 100644 --- a/EnvelopeGenerator.Application/Histories/Queries/CountHistoryQuery.cs +++ b/EnvelopeGenerator.Application/Histories/Queries/CountHistoryQuery.cs @@ -24,7 +24,7 @@ public static class CountHistoryQueryExtensions /// /// /// - public static async Task AnyHistoryAsync(this ISender sender, Action queryOptions, CancellationToken cancel) + public static async Task AnyHistoryAsync(this ISender sender, Action queryOptions, CancellationToken cancel = default) { var query = new CountHistoryQuery(); queryOptions(query); @@ -58,7 +58,19 @@ public class CountHistoryQueryHandler : IRequestHandler /// public Task Handle(CountHistoryQuery request, CancellationToken cancel = default) { - var query = _repo.Where(h => h.EnvelopeId == request.EnvelopeId); + var query = _repo.Query; + + if (request.Envelope.Id is int envId) + query = query.Where(e => e.Id == envId); + else if (request.Envelope.Uuid is string uuid) + query = query.Where(e => e.Envelope!.Uuid == uuid); +#pragma warning disable CS0618 // Type or member is obsolete + else if (request.EnvelopeId is not null) + query = query.Where(h => h.EnvelopeId == request.EnvelopeId); +#pragma warning restore CS0618 // Type or member is obsolete + else + throw new BadRequestException("Invalid request: An Envelope object or a valid EnvelopeId/UUID must be supplied."); + if (request.Status is not null) query = query.Where(h => h.Status == request.Status); diff --git a/EnvelopeGenerator.Application/Histories/Queries/HistoryQueryBase.cs b/EnvelopeGenerator.Application/Histories/Queries/HistoryQueryBase.cs index ad953ee2..f9c70b34 100644 --- a/EnvelopeGenerator.Application/Histories/Queries/HistoryQueryBase.cs +++ b/EnvelopeGenerator.Application/Histories/Queries/HistoryQueryBase.cs @@ -24,5 +24,5 @@ public record HistoryQueryBase /// /// /// - public EnvelopeQueryBase? Envelope { get; set; } + public EnvelopeQueryBase Envelope { get; set; } = new EnvelopeQueryBase(); } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Histories/Queries/ReadHistoryQuery.cs b/EnvelopeGenerator.Application/Histories/Queries/ReadHistoryQuery.cs index e8852cfd..13887f8f 100644 --- a/EnvelopeGenerator.Application/Histories/Queries/ReadHistoryQuery.cs +++ b/EnvelopeGenerator.Application/Histories/Queries/ReadHistoryQuery.cs @@ -51,9 +51,9 @@ public class ReadHistoryQueryHandler : IRequestHandler e.Id == envId); - else if (request.Envelope?.Uuid is string uuid) + else if (request.Envelope.Uuid is string uuid) query = query.Where(e => e.Envelope!.Uuid == uuid); #pragma warning disable CS0618 // Type or member is obsolete else if (request.EnvelopeId is not null)