diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs index 6a1145de..e245608d 100644 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQuery.cs @@ -1,9 +1,14 @@ -using EnvelopeGenerator.Application.Dto.EnvelopeReceiver; +using AutoMapper; +using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Exceptions; +using EnvelopeGenerator.Application.Dto.EnvelopeReceiver; using EnvelopeGenerator.Application.Envelopes.Queries; using EnvelopeGenerator.Application.Extensions; +using EnvelopeGenerator.Application.Model; using EnvelopeGenerator.Application.Receivers.Queries; using MediatR; -using EnvelopeGenerator.Application.Model; +using EnvelopeGenerator.Domain.Entities; +using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; @@ -61,4 +66,61 @@ public static class Extensions var q = new ReadEnvelopeReceiverQuery() { Key = key }; return mediator.Send(q, cancel).Then(envRcvs => envRcvs.FirstOrDefault()); } +} + +/// +/// +/// +public class ReadEnvelopeReceiverQueryHandler : IRequestHandler> +{ + private readonly IRepository _repo; + + private readonly IMapper _mapper; + + /// + /// + /// + /// + /// + public ReadEnvelopeReceiverQueryHandler(IRepository envelopeReceiver, IMapper mapper) + { + _repo = envelopeReceiver; + _mapper = mapper; + } + + /// + /// + /// + /// + /// + /// + /// + public async Task> Handle(ReadEnvelopeReceiverQuery request, CancellationToken cancel) + { + var q = _repo.Read().Where(request, notnull: false); + + if (request.Envelope.Status is not null) + { + var status = request.Envelope.Status; + if (status.Min is not null) + q = q.Where(er => er.Envelope!.Status >= status.Min); + + if (status.Max is not null) + q = q.Where(er => er.Envelope!.Status <= status.Max); + + if (status.Include?.Length > 0) + q = q.Where(er => status.Include.Contains(er.Envelope!.Status)); + + if (status.Ignore is not null) + q = q.Where(er => !status.Ignore.Contains(er.Envelope!.Status)); + } + + var envRcvs = await q.Include(er => er.Envelope).ThenInclude(e => e!.Documents).ThenInclude(d => d.Elements) + .Include(er => er.Envelope).ThenInclude(e => e!.History) + .Include(er => er.Envelope).ThenInclude(e => e!.User) + .Include(er => er.Receiver) + .ToListAsync(cancel); + + return _mapper.Map>(envRcvs); + } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQueryHandler.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQueryHandler.cs deleted file mode 100644 index 3689baa9..00000000 --- a/EnvelopeGenerator.Application/EnvelopeReceivers/Queries/ReadEnvelopeReceiverQueryHandler.cs +++ /dev/null @@ -1,87 +0,0 @@ -using AutoMapper; -using DigitalData.Core.Abstraction.Application.Repository; -using EnvelopeGenerator.Application.Dto.EnvelopeReceiver; -using EnvelopeGenerator.Domain.Entities; -using MediatR; -using Microsoft.EntityFrameworkCore; - -namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; - -/// -/// -/// -public class ReadEnvelopeReceiverQueryHandler : IRequestHandler> -{ - private readonly IRepository _repo; - - private readonly IMapper _mapper; - - /// - /// - /// - /// - /// - public ReadEnvelopeReceiverQueryHandler(IRepository envelopeReceiver, IMapper mapper) - { - _repo = envelopeReceiver; - _mapper = mapper; - } - - /// - /// - /// - /// - /// - /// - /// - public async Task> Handle(ReadEnvelopeReceiverQuery request, CancellationToken cancel) - { - var q = _repo.Read(); - - if(request.Envelope is not null) - { - var env = request.Envelope; - if (env.Id is not null) - q = q.Where(er => er.EnvelopeId == env.Id); - - if (env.Status is not null) - { - if(env.Status.Min is not null) - q = q.Where(er => er.Envelope.Status >= env.Status.Min); - - if(env.Status.Max is not null) - q = q.Where(er => er.Envelope.Status <= env.Status.Max); - - if(env.Status .Include?.Length > 0) - q = q.Where(er => env.Status.Include.Contains(er.Envelope.Status)); - - if(env.Status.Ignore is not null) - q = q.Where(er => !env.Status.Ignore.Contains(er.Envelope.Status)); - } - - if (env.Uuid is not null) - q = q.Where(er => er.Envelope.Uuid == env.Uuid); - } - - if (request.Receiver is not null) - { - var rcv = request.Receiver; - if (rcv.Id is not null) - q = q.Where(r => r.ReceiverId == rcv.Id); - - if (rcv.EmailAddress is not null) - q = q.Where(r => r.Receiver.EmailAddress == rcv.EmailAddress); - - if (rcv.Signature is not null) - q = q.Where(er => er.Receiver.Signature == rcv.Signature); - } - - var envRcvs = await q.Include(er => er.Envelope).ThenInclude(e => e.Documents).ThenInclude(d => d.Elements) - .Include(er => er.Envelope).ThenInclude(e => e.History) - .Include(er => er.Envelope).ThenInclude(e => e.User) - .Include(er => er.Receiver) - .ToListAsync(cancel); - - return _mapper.Map>(envRcvs); - } -}