Introduced ReadReceiverNameQueryHandler to retrieve the most recently used name ("Anrede") for a receiver, supporting envelope generation. Updated ReadReceiverNameQuery to use MediatR and CQRS patterns, and implemented repository-based lookups for receiver identification and name retrieval. Added necessary using directives for repository and MediatR support.
63 lines
2.3 KiB
C#
63 lines
2.3 KiB
C#
using DigitalData.Core.Abstraction.Application.Repository;
|
|
using EnvelopeGenerator.Application.Common.Query;
|
|
using MediatR;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace EnvelopeGenerator.Application.Envelopes.Queries;
|
|
|
|
/// <summary>
|
|
/// Eine Abfrage, um die zuletzt verwendete Anrede eines Empfängers zu ermitteln,
|
|
/// damit diese für zukünftige Umschläge wiederverwendet werden kann.
|
|
/// </summary>
|
|
public record ReadReceiverNameQuery() : ReceiverQueryBase, IRequest<string?>;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class ReadReceiverNameQueryHandler : IRequestHandler<ReadReceiverNameQuery, string?>
|
|
{
|
|
private readonly IRepository<EnvelopeReceiver> _envelopeReceiverRepository;
|
|
private readonly IRepository<Receiver> _receiverRepository;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="envelopeReceiverRepository"></param>
|
|
/// <param name="receiverRepository"></param>
|
|
public ReadReceiverNameQueryHandler(IRepository<EnvelopeReceiver> envelopeReceiverRepository, IRepository<Receiver> receiverRepository)
|
|
{
|
|
_envelopeReceiverRepository = envelopeReceiverRepository;
|
|
_receiverRepository = receiverRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <param name="cancellationToken"></param>
|
|
/// <returns></returns>
|
|
public async Task<string?> Handle(ReadReceiverNameQuery request, CancellationToken cancellationToken)
|
|
{
|
|
var receiverQuery = _receiverRepository.Query.AsNoTracking();
|
|
|
|
if (request.Id is int id)
|
|
receiverQuery = receiverQuery.Where(r => r.Id == id);
|
|
if (request.EmailAddress is string email)
|
|
receiverQuery = receiverQuery.Where(r => r.EmailAddress == email);
|
|
if (request.Signature is string signature)
|
|
receiverQuery = receiverQuery.Where(r => r.Signature == signature);
|
|
|
|
var receiver = await receiverQuery.FirstOrDefaultAsync(cancellationToken);
|
|
if (receiver is null)
|
|
return null;
|
|
|
|
var erName = await _envelopeReceiverRepository.Query
|
|
.Where(er => er.ReceiverId == receiver.Id)
|
|
.OrderByDescending(er => er.AddedWhen)
|
|
.Select(er => er.Name)
|
|
.FirstOrDefaultAsync(cancellationToken);
|
|
|
|
return erName;
|
|
}
|
|
} |