using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Domain; using EnvelopeGenerator.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore; namespace EnvelopeGenerator.Application.Histories.Commands; /// /// /// public record CreateHistoryCommand : IRequest { /// /// /// public int EnvelopeId { get; set; } /// /// /// public string UserReference { get; set; } = null!; /// /// /// public Constants.EnvelopeStatus Status { get; set; } /// /// /// public DateTime AddedWhen { get; } = DateTime.Now; /// /// /// public DateTime ActionDate => AddedWhen; /// /// /// public string? Comment { get; set; } /// /// /// public EnvelopeQuery? Envelope { get; init; } /// /// / /// public ReceiverQuery? Receiver { get; init; } } #region Queries /// /// Repräsentiert eine Abfrage für Umschläge. /// public record EnvelopeQuery { /// /// Die eindeutige Kennung des Umschlags. /// public int? Id { get; init; } /// /// Die universell eindeutige Kennung des Umschlags. /// public string? Uuid { get; set; } } /// /// Stellt eine Abfrage dar, um die Details eines Empfängers zu lesen. /// um spezifische Informationen über einen Empfänger abzurufen. /// public record ReceiverQuery { /// /// ID des Empfängers /// public int? Id { get; init; } /// /// E-Mail Adresse des Empfängers /// public string? EmailAddress { get; init; } /// /// Eindeutige Signatur des Empfängers /// public string? Signature { get; set; } } #endregion /// /// /// 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 record = await _repo.ReadOnly() .Where(h => h.EnvelopeId == request.EnvelopeId) .Where(h => h.UserReference == request.UserReference) .Where(h => h.ActionDate == request.ActionDate) .SingleOrDefaultAsync(cancel); return record?.Id; } }