From cf5a724bf25610004b94e29f1161f9f061ea98e5 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 28 Jan 2026 12:42:21 +0100 Subject: [PATCH] Add username filter to ReadEnvelopeReceiverQuery handler Extended ReadEnvelopeReceiverQuery to support optional username-based filtering. Refactored the handler to apply this filter, updated repository access for consistency, and improved code clarity and null-safety. Cleaned up comments and formatting. --- .../Queries/ReadEnvelopeReceiverQuery.cs | 117 +++++++++--------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs index efba8719..6c0bc362 100644 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs @@ -1,4 +1,4 @@ -using AutoMapper; +using AutoMapper; using DigitalData.Core.Abstraction.Application.Repository; using DigitalData.Core.Exceptions; using EnvelopeGenerator.Application.Envelopes.Queries; @@ -47,7 +47,13 @@ namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; /// Die Antwort enthält Details wie den Include, die Zuordnung zwischen Umschlag und Empfänger /// sowie zusätzliche Metadaten. /// -public record ReadEnvelopeReceiverQuery : EnvelopeReceiverQueryBase, IRequest>; +public record ReadEnvelopeReceiverQuery : EnvelopeReceiverQueryBase, IRequest> +{ + /// + /// Optionaler Benutzernamefilter, um Ergebnisse auf Umschläge eines bestimmten Besitzers einzuschränken. + /// + public string? Username { get; init; } +} /// /// @@ -82,73 +88,68 @@ public static class Extensions q.Receiver.Signature = signature; return mediator.Send(q, cancel).Then(envRcvs => envRcvs.FirstOrDefault()); } -} - -/// -/// -/// -public class ReadEnvelopeReceiverQueryHandler : IRequestHandler> -{ - private readonly IRepository _repo; - - private readonly IRepository _rcvRepo; - - private readonly IMapper _mapper; - /// - /// + /// Verarbeitet und liefert passende -Ergebnisse. /// - /// - /// - public ReadEnvelopeReceiverQueryHandler(IRepository envelopeReceiver, IRepository rcvRepo, IMapper mapper) + public class ReadEnvelopeReceiverQueryHandler : IRequestHandler> { - _repo = envelopeReceiver; - _mapper = mapper; - _rcvRepo = rcvRepo; - } + private readonly IRepository _repo; + private readonly IRepository _rcvRepo; + private readonly IMapper _mapper; - /// - /// - /// - /// - /// - /// - /// - public async Task> Handle(ReadEnvelopeReceiverQuery request, CancellationToken cancel) - { - var q = _repo.ReadOnly().Where(request, notnull: false); + public ReadEnvelopeReceiverQueryHandler(IRepository envelopeReceiver, IRepository rcvRepo, IMapper mapper) + { + _repo = envelopeReceiver; + _mapper = mapper; + _rcvRepo = rcvRepo; + } - if (request.Envelope.Status is not null) + /// + /// + /// + /// + /// + /// + /// + public async Task> Handle(ReadEnvelopeReceiverQuery request, CancellationToken cancel) { - var status = request.Envelope.Status; - if (status.Min is not null) - q = q.Where(er => er.Envelope!.Status >= status.Min); + var q = _repo.Query.Where(request, notnull: false); - if (status.Max is not null) - q = q.Where(er => er.Envelope!.Status <= status.Max); + if (request.Username is string username) + q = q.Where(er => er.Envelope!.User.Username == username); - if (status.Include?.Length > 0) - q = q.Where(er => status.Include.Contains(er.Envelope!.Status)); + if (request.Envelope.Status is not null) + { + var status = request.Envelope.Status; + if (status.Min is not null) + q = q.Where(er => er.Envelope!.Status >= status.Min); - if (status.Ignore is not null) - q = q.Where(er => !status.Ignore.Contains(er.Envelope!.Status)); - } + if (status.Max is not null) + q = q.Where(er => er.Envelope!.Status <= status.Max); - var envRcvs = await q - .Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements) - .Include(er => er.Envelope).ThenInclude(e => e!.Histories) - .Include(er => er.Envelope).ThenInclude(e => e!.User) - .Include(er => er.Receiver) - .ToListAsync(cancel); + if (status.Include?.Length > 0) + q = q.Where(er => status.Include.Contains(er.Envelope!.Status)); - if (request.Receiver.HasAnyCriteria && envRcvs.Any()) - { - var receiver = await _rcvRepo.ReadOnly().Where(request.Receiver).FirstAsync(cancel); + if (status.Ignore is not null) + q = q.Where(er => !status.Ignore.Contains(er.Envelope!.Status)); + } - foreach (var envRcv in envRcvs) - envRcv.Envelope?.Documents?.First().Elements.RemoveAll(s => s.ReceiverId != receiver.Id); - } + var envRcvs = await q + .Include(er => er.Envelope).ThenInclude(e => e!.Documents!).ThenInclude(d => d.Elements) + .Include(er => er.Envelope).ThenInclude(e => e!.Histories) + .Include(er => er.Envelope).ThenInclude(e => e!.User) + .Include(er => er.Receiver) + .ToListAsync(cancel); - return _mapper.Map>(envRcvs); + if (request.Receiver.HasAnyCriteria && envRcvs.Count != 0) + { + var receiver = await _rcvRepo.Query.Where(request.Receiver).FirstAsync(cancel); + + foreach (var envRcv in envRcvs) + envRcv.Envelope?.Documents?.FirstOrDefault()?.Elements?.RemoveAll(s => s.ReceiverId != receiver.Id); + } + + return _mapper.Map>(envRcvs); + } } -} \ No newline at end of file +} \ No newline at end of file