using AutoMapper; using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver; using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Application.Common.Query; using EnvelopeGenerator.Application.Envelopes.Queries; using EnvelopeGenerator.Application.Receivers.Queries; using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; /// /// Leichte Variante von : /// Lädt NUR Envelope (mit Histories + User) und Receiver. /// Lädt NICHT Documents/Elements. /// /// Verwendung: Status-Prüfungen wo keine Dokument-Daten benötigt werden /// (z.B. ReceiverAuthController.GetStatus). /// public record ReadEnvelopeReceiverLightQuery : EnvelopeReceiverQueryBase, IRequest; /// /// Handler für . /// public class ReadEnvelopeReceiverLightQueryHandler : IRequestHandler { private readonly IRepository _repo; private readonly IMapper _mapper; /// /// Konstruktor. /// /// EnvelopeReceiver-Repository /// AutoMapper public ReadEnvelopeReceiverLightQueryHandler(IRepository repo, IMapper mapper) { _repo = repo; _mapper = mapper; } /// /// Lädt einen EnvelopeReceiver ohne Documents/Elements. /// public async Task Handle(ReadEnvelopeReceiverLightQuery request, CancellationToken cancel) { var envRcv = await _repo.Query .Where(request, notnull: false) .AsNoTracking() .Include(er => er.Envelope).ThenInclude(e => e!.Histories) .Include(er => er.Envelope).ThenInclude(e => e!.User) .Include(er => er.Receiver) .FirstOrDefaultAsync(cancel); return envRcv is null ? null : _mapper.Map(envRcv); } }