using AutoMapper;
using EnvelopeGenerator.Application.Common.Dto;
using EnvelopeGenerator.Application.Common.Query;
using EnvelopeGenerator.Domain.Entities;
using MediatR;
using EnvelopeGenerator.Application.Common.Extensions;
using DigitalData.Core.Abstraction.Application.Repository;
using Microsoft.EntityFrameworkCore;
namespace EnvelopeGenerator.Application.DocReceiverElements.Queries;
///
///
///
public record ReadDocReceiverElementQuery : EnvelopeReceiverQueryBase, IRequest>
{
}
///
///
///
public class ReadDocReceiverElementQueryHandler : IRequestHandler>
{
private readonly IRepository _repository;
private readonly IMapper _mapper;
///
///
///
///
///
public ReadDocReceiverElementQueryHandler(IRepository repository, IMapper mapper)
{
_repository = repository;
_mapper = mapper;
}
///
///
///
///
///
///
///
public async Task> Handle(ReadDocReceiverElementQuery request, CancellationToken cancellationToken)
{
var q = _repository.Query;
if(request.Envelope.Id is int envelopeId)
q = q.Where(e => e.Document.EnvelopeId == envelopeId);
if (request.Envelope.Uuid is string envelopeUuid)
q = q.Where(e => e.Document.Envelope.Uuid == envelopeUuid);
if (request.Receiver.Id is int receiverId)
q = q.Where(e => e.ReceiverId == receiverId);
if (request.Receiver.Signature is string signature)
q = q.Where(e => e.Receiver.Signature == signature);
var elements = await q.ToListAsync(cancellationToken);
return _mapper.Map>(elements);
}
}