From cc2aea90ed4c8a9c8a61bb8c770b2e097663b198 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 1 Jul 2026 15:15:50 +0200 Subject: [PATCH] Enhance query criteria and add partial email matching - Added `[NotMapped]` attribute to `HasAnyCriteria` in `ReceiverQueryBase` to exclude it from database mapping. - Made `HasAnyCriteria` in `ReceiverQueryBase` virtual for overriding. - Introduced `EmailAddressSearch` in `ReadReceiverQuery` for partial email matching. - Overrode `HasAnyCriteria` in `ReadReceiverQuery` to include `EmailAddressSearch`. - Updated `ReadReceiverQueryHandler` to support partial email matching using `EF.Functions.Like`. --- .../Common/Query/ReceiverQueryBase.cs | 7 ++++-- .../Receivers/Queries/ReadReceiverQuery.cs | 25 ++++++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/EnvelopeGenerator.Application/Common/Query/ReceiverQueryBase.cs b/EnvelopeGenerator.Application/Common/Query/ReceiverQueryBase.cs index 589598a3..bfb6a26c 100644 --- a/EnvelopeGenerator.Application/Common/Query/ReceiverQueryBase.cs +++ b/EnvelopeGenerator.Application/Common/Query/ReceiverQueryBase.cs @@ -1,4 +1,6 @@ -namespace EnvelopeGenerator.Application.Common.Query; +using System.ComponentModel.DataAnnotations.Schema; + +namespace EnvelopeGenerator.Application.Common.Query; /// /// Stellt eine Abfrage dar, um die Details eines Empfängers zu lesen. @@ -29,5 +31,6 @@ public record ReceiverQueryBase /// , , or is not null. /// Usage example: The query can be executed only if at least one criterion is specified. /// - public bool HasAnyCriteria => Id is not null || EmailAddress is not null || Signature is not null; + [NotMapped] + public virtual bool HasAnyCriteria => Id is not null || EmailAddress is not null || Signature is not null; } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Receivers/Queries/ReadReceiverQuery.cs b/EnvelopeGenerator.Application/Receivers/Queries/ReadReceiverQuery.cs index b1255514..53d900ef 100644 --- a/EnvelopeGenerator.Application/Receivers/Queries/ReadReceiverQuery.cs +++ b/EnvelopeGenerator.Application/Receivers/Queries/ReadReceiverQuery.cs @@ -5,6 +5,7 @@ using EnvelopeGenerator.Application.Common.Query; using MediatR; using EnvelopeGenerator.Domain.Entities; using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; namespace EnvelopeGenerator.Application.Receivers.Queries; @@ -12,7 +13,24 @@ namespace EnvelopeGenerator.Application.Receivers.Queries; /// Stellt eine Abfrage dar, um die Details eines Empfängers zu lesen. /// um spezifische Informationen über einen Empfänger abzurufen. /// -public record ReadReceiverQuery : ReceiverQueryBase, IRequest>; +public record ReadReceiverQuery : ReceiverQueryBase, IRequest> +{ + /// + /// Suchbegriff für eine teilweise Übereinstimmung in der E-Mail Adresse des Empfängers + /// + public virtual string? EmailAddressSearch { get; set; } + + /// + /// Checks whether any of the specified query criteria have a value. + /// + /// + /// This property returns true if at least one of the fields + /// , , , or is not null. + /// Usage example: The query can be executed only if at least one criterion is specified. + /// + [NotMapped] + public override bool HasAnyCriteria => EmailAddressSearch is not null || base.HasAnyCriteria; +} /// /// @@ -53,6 +71,11 @@ public class ReadReceiverQueryHandler : IRequestHandler r.EmailAddress == email); } + if (!string.IsNullOrWhiteSpace(request.EmailAddressSearch)) + { + query = query.Where(r => EF.Functions.Like(r.EmailAddress, $"%{request.EmailAddressSearch}%")); + } + if (request.Signature is string signature) { query = query.Where(r => r.Signature == signature);