using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Application.Model; using EnvelopeGenerator.Domain; using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; using EnvelopeGenerator.Application.Extensions; namespace EnvelopeGenerator.Application.Histories.Commands; /// /// /// public record CreateHistoryCommand: EnvelopeReceiverQueryBase, IRequest { /// /// /// public int? EnvelopeId { get; set; } /// /// /// public string? UserReference { get; set; } /// /// /// public Constants.EnvelopeStatus Status { get; set; } /// /// /// public DateTime AddedWhen { get; } = DateTime.Now; /// /// /// public DateTime ActionDate => AddedWhen; /// /// /// public string? Comment { get; set; } } /// /// /// public class CreateHistoryCommandHandler : IRequestHandler { private readonly IRepository _repo; /// /// /// /// public CreateHistoryCommandHandler(IRepository repo) { _repo = repo; } /// /// /// /// /// /// public async Task Handle(CreateHistoryCommand request, CancellationToken cancel) { // create entitiy await _repo.CreateAsync(request, cancel); // check if created var query = _repo.ReadOnly(); query = request.EnvelopeId is null ? query.Where(request.Envelope) : query.Where(h => h.EnvelopeId == request.EnvelopeId); query = request.UserReference is null ? query.Where(request.Receiver) : query.Where(h => h.UserReference == request.UserReference); var record = await query .Where(h => h.ActionDate == request.ActionDate) .SingleOrDefaultAsync(cancel); return record?.Id; } }