using AutoMapper; using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Application.Common.Dto; using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Application.Envelopes.Queries; /// /// /// public record ReadSignedEnvelopeQuery : IRequest> { /// /// /// public bool? Burned { get; init; } = null; internal int? UserId { get; private set; } = null; /// /// /// /// /// public ReadSignedEnvelopeQuery Authorized(int userId) { UserId = userId; return this; } } /// /// /// /// /// public class ReadSignedEnvelopeQueryHandler(IRepository Repo, IMapper Mapper) : IRequestHandler> { /// /// /// /// /// /// /// public async Task> Handle(ReadSignedEnvelopeQuery request, CancellationToken cancel) { var eQuery = Repo.Query.Where(e => e.Status == Domain.Constants.EnvelopeStatus.EnvelopeCompletelySigned); if (request.Burned is bool burned) eQuery = burned ? eQuery.Where(e => e.DocResult != null) : eQuery.Where(e => e.DocResult == null); if(request.UserId is int userId) eQuery = eQuery.Where(e => e.UserId == userId); var envelopes = await eQuery.ToListAsync(cancel); return Mapper.Map>(envelopes); } }