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 int? Id { get; set; } = null; /// /// /// public bool IncludeDocument { get; set; } = false; } /// /// /// 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.Id is not null) q = q.Where(e => e.Id == request.Id); 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); if( request.IncludeDocument) q = q.Include(e => e.Document); var elements = await q.ToListAsync(cancellationToken); return _mapper.Map>(elements); } }