55 lines
2.1 KiB
C#
55 lines
2.1 KiB
C#
using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using MediatR;
|
|
using Newtonsoft.Json;
|
|
using System.Dynamic;
|
|
|
|
namespace EnvelopeGenerator.Application.Common.Notifications.DocSigned;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="Original"></param>
|
|
public record DocSignedNotification(EnvelopeReceiverDto Original) : EnvelopeReceiverDto(Original), INotification, ISendMailNotification
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public required ExpandoObject Annotations { get; init; }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public EmailTemplateType TemplateType => EmailTemplateType.DocumentSigned;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string EmailAddress => Receiver?.EmailAddress
|
|
?? throw new InvalidOperationException($"Receiver is null." +
|
|
$"DocSignedNotification:\n{JsonConvert.SerializeObject(this, Format.Json.ForDiagnostics)}");
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public static class DocSignedNotificationExtensions
|
|
{
|
|
/// <summary>
|
|
/// Converts an <see cref="EnvelopeReceiverDto"/> to a <see cref="DocSignedNotification"/>.
|
|
/// </summary>
|
|
/// <param name="dto">The DTO to convert.</param>
|
|
/// <param name="annotations"></param>
|
|
/// <returns>A new <see cref="DocSignedNotification"/> instance.</returns>
|
|
public static DocSignedNotification ToDocSignedNotification(this EnvelopeReceiverDto dto, ExpandoObject annotations)
|
|
=> new(dto) { Annotations = annotations };
|
|
|
|
/// <summary>
|
|
/// Asynchronously converts a <see cref="Task{EnvelopeReceiverDto}"/> to a <see cref="DocSignedNotification"/>.
|
|
/// </summary>
|
|
/// <param name="dtoTask">The task that returns the DTO to convert.</param>
|
|
/// <param name="annotations"></param>
|
|
/// <returns>A task that represents the asynchronous conversion operation.</returns>
|
|
public static async Task<DocSignedNotification?> ToDocSignedNotification(this Task<EnvelopeReceiverDto?> dtoTask, ExpandoObject annotations)
|
|
=> await dtoTask is EnvelopeReceiverDto dto ? new(dto) { Annotations = annotations } : null;
|
|
} |