diff --git a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs deleted file mode 100644 index bbeb71e..0000000 --- a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/DependencyInjectionExtensions.cs +++ /dev/null @@ -1,10 +0,0 @@ -#if NET -namespace DigitalData.MessagingService.Client.DependencyInjection; - -/// -/// -/// -public static class DependencyInjectionExtensions -{ -} -#endif \ No newline at end of file diff --git a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs b/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs deleted file mode 100644 index cd78a1b..0000000 --- a/src/presentation/DigitalData.MessagingService.Client/DependencyInjection/MessagingServiceConfiguration.cs +++ /dev/null @@ -1,10 +0,0 @@ -#if NET -namespace DigitalData.MessagingService.Client.DependencyInjection; - -/// -/// -/// -public class MessagingServiceConfiguration -{ -} -#endif \ No newline at end of file diff --git a/src/presentation/DigitalData.MessagingService.Client/DependencyInjectionExtensions.cs b/src/presentation/DigitalData.MessagingService.Client/DependencyInjectionExtensions.cs new file mode 100644 index 0000000..1ab7182 --- /dev/null +++ b/src/presentation/DigitalData.MessagingService.Client/DependencyInjectionExtensions.cs @@ -0,0 +1,50 @@ +#if NET +using DigitalData.MessagingService.Application.DependencyInjection; +using DigitalData.MessagingService.Publisher; +using DigitalData.MessagingService.RabbitMQ; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; + +namespace DigitalData.MessagingService.Client.DependencyInjection; + +/// +/// +/// +public static class DependencyInjectionExtensions +{ + private static IServiceCollection AddMessagingServiceClientDefaults(this IServiceCollection services, string luckyPennySoftLicenseKey) + { + services.AddMessagingServiceApplication(luckyPennySoftLicenseKey); + return services.AddTransient(); + } + + /// + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMessagingServiceClient(this IServiceCollection services, string luckyPennySoftLicenseKey, Action configureRabbitMqConnection) + { + services.AddMessagingServiceClientDefaults(luckyPennySoftLicenseKey); + services.AddMessagingServicePublisher(configureRabbitMqConnection); + return services; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public static IServiceCollection AddMessagingServiceClient(this IServiceCollection services, string luckyPennySoftLicenseKey, IConfiguration configuration, string rabbitMqConnectionSectionName = RabbitMqConnectionConfiguration.SectionName) + { + services.AddMessagingServiceClientDefaults(luckyPennySoftLicenseKey); + services.AddMessagingServicePublisher(configuration, rabbitMqConnectionSectionName); + return services; + } +} +#endif \ No newline at end of file diff --git a/src/presentation/DigitalData.MessagingService.Client/Email.cs b/src/presentation/DigitalData.MessagingService.Client/Email.cs new file mode 100644 index 0000000..68e48db --- /dev/null +++ b/src/presentation/DigitalData.MessagingService.Client/Email.cs @@ -0,0 +1,34 @@ +#if NET +namespace DigitalData.MessagingService.Client; + +/// +/// Represents an email to be sent via the messaging service. +/// +public record Email +{ + /// + /// Sender email address. + /// + public required string From { get; init; } + + /// + /// Email subject. + /// + public required string Subject { get; init; } + + /// + /// Email body (HTML or plain text). + /// + public required string Body { get; init; } + + /// + /// Indicates whether is HTML. + /// + public required bool IsHtml { get; init; } + + /// + /// Recipient email addresses. + /// + public required List To { get; init; } +} +#endif diff --git a/src/presentation/DigitalData.MessagingService.Client/MessagingServiceClient.cs b/src/presentation/DigitalData.MessagingService.Client/MessagingServiceClient.cs new file mode 100644 index 0000000..82c634b --- /dev/null +++ b/src/presentation/DigitalData.MessagingService.Client/MessagingServiceClient.cs @@ -0,0 +1,34 @@ +#if NET +using DigitalData.MessagingService.Application.EmailAccounts.Queries; +using DigitalData.MessagingService.Application.EmailSending.Commands; +using MediatR; + +namespace DigitalData.MessagingService.Client; + +/// +/// +/// +public class MessagingServiceClient(ISender sender) +{ + /// + /// + /// + /// + /// + /// + public async Task SendAsync(Email email, CancellationToken cancellationToken = default) + { + await sender.Send(new PublishEmailViaSmtpCommand() + { + Sender = new GetEmailAccountQuery() + { + Username = email.From + }, + Recipients = email.To, + Subject = email.Subject, + Body = email.Body, + IsHtml = email.IsHtml + }, cancellationToken); + } +} +#endif \ No newline at end of file