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);
}
}