using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Application.Common.Extensions; using MediatR; using Microsoft.EntityFrameworkCore; using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Application.Common.Query; namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries; /// /// /// public record ReceiverAlreadySignedQuery : EnvelopeReceiverQueryBase, IRequest; /// /// /// public static class ReceiverAlreadySignedQueryExtensions { /// /// /// /// /// /// /// public static Task IsSignedAsync(this IMediator mediator, string key, CancellationToken cancel = default) => mediator.Send(new ReceiverAlreadySignedQuery { Key = key }, cancel); /// /// /// /// /// /// /// /// public static Task IsSignedAsync(this IMediator mediator, string uuid, string signature, CancellationToken cancel = default) => mediator.Send(new ReceiverAlreadySignedQuery { Envelope = new() { Uuid = uuid }, Receiver = new() { Signature = signature } }, cancel); } /// /// /// public class ReceiverAlreadySignedQueryHandler : IRequestHandler { private readonly IRepository _repo; /// /// /// /// public ReceiverAlreadySignedQueryHandler(IRepository repo) { _repo = repo; } /// /// /// /// /// /// public async Task Handle(ReceiverAlreadySignedQuery request, CancellationToken cancel = default) { return await _repo.ReadOnly().Where(request).Where(h => h.Status == EnvelopeStatus.DocumentSigned).AnyAsync(cancel); } }