Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Text;

namespace MessagingService.BusinessLogic.Common
{
using System.Data.Common;
using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Shared.General;
using Shared.Repositories;

[ExcludeFromCodeCoverage]
public class ConfigurationReaderConnectionStringRepository : IConnectionStringConfigurationRepository
{
#region Methods

/// <summary>
/// Creates the connection string.
/// </summary>
/// <param name="externalIdentifier">The external identifier.</param>
/// <param name="connectionStringType">Type of the connection string.</param>
/// <param name="connectionString">The connection string.</param>
/// <param name="cancellationToken">The cancellation token.</param>
public async Task CreateConnectionString(String externalIdentifier,
ConnectionStringType connectionStringType,
String connectionString,
CancellationToken cancellationToken)
{
throw new NotImplementedException("This is only required to complete the interface");
}

/// <summary>
/// Deletes the connection string configuration.
/// </summary>
/// <param name="externalIdentifier">The external identifier.</param>
/// <param name="connectionStringType">Type of the connection string.</param>
/// <param name="cancellationToken">The cancellation token.</param>
public async Task DeleteConnectionStringConfiguration(String externalIdentifier,
ConnectionStringType connectionStringType,
CancellationToken cancellationToken)
{
throw new NotImplementedException("This is only required to complete the interface");
}

/// <summary>
/// Gets the connection string.
/// </summary>
/// <param name="externalIdentifier">The external identifier.</param>
/// <param name="connectionStringType">Type of the connection string.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns></returns>
public async Task<String> GetConnectionString(String externalIdentifier,
ConnectionStringType connectionStringType,
CancellationToken cancellationToken)
{
String connectionString = string.Empty;
String databaseName = string.Empty;
switch (connectionStringType)
{
case ConnectionStringType.ReadModel:
databaseName = "EstateReportingReadModel" + externalIdentifier;
connectionString = ConfigurationReader.GetConnectionString("EstateReportingReadModel");
break;
default:
throw new NotSupportedException($"Connection String type [{connectionStringType}] is not supported");
}

DbConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString)
{
InitialCatalog = databaseName
};

return builder.ToString();
}

#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<Folder Include="Manager\" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="MediatR" Version="8.0.1" />
<PackageReference Include="Shared.EventStore" Version="0.0.12" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\MessagingService.EmailMessageAggregate\MessagingService.EmailMessageAggregate.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
namespace MessagingService.BusinessLogic.RequestHandlers
{
using System;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Requests;
using Services;

/// <summary>
///
/// </summary>
/// <seealso cref="MediatR.IRequestHandler{MessagingService.BusinessLogic.Requests.SendEmailRequest, System.String}" />
public class EmailRequestHandler : IRequestHandler<SendEmailRequest, String>
{
#region Fields

/// <summary>
/// The email domain service
/// </summary>
private readonly IEmailDomainService EmailDomainService;

#endregion

#region Constructors

/// <summary>
/// Initializes a new instance of the <see cref="EmailRequestHandler"/> class.
/// </summary>
/// <param name="emailDomainService">The email domain service.</param>
public EmailRequestHandler(IEmailDomainService emailDomainService)
{
this.EmailDomainService = emailDomainService;
}

#endregion

#region Methods

/// <summary>
/// Handles a request
/// </summary>
/// <param name="request">The request</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>
/// Response from the request
/// </returns>
public async Task<String> Handle(SendEmailRequest request,
CancellationToken cancellationToken)
{
await this.EmailDomainService.SendEmailMessage(request.ConnectionIdentifier,
request.MessageId,
request.FromAddress,
request.ToAddresses,
request.Subject,
request.Body,
request.IsHtml,
cancellationToken);

return string.Empty;
}

#endregion
}
}
130 changes: 130 additions & 0 deletions MessagingService.BusinessLogic/Requests/SendEmailRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
namespace MessagingService.BusinessLogic.Requests
{
using System;
using System.Collections.Generic;
using MediatR;

/// <summary>
///
/// </summary>
/// <seealso cref="MediatR.IRequest{System.String}" />
public class SendEmailRequest : IRequest<String>
{
#region Constructors

/// <summary>
/// Initializes a new instance of the <see cref="SendEmailRequest" /> class.
/// </summary>
/// <param name="connectionIdentifier">The connection identifier.</param>
/// <param name="messageId">The message identifier.</param>
/// <param name="fromAddress">From address.</param>
/// <param name="toAddresses">To addresses.</param>
/// <param name="subject">The subject.</param>
/// <param name="body">The body.</param>
/// <param name="isHtml">if set to <c>true</c> [is HTML].</param>
private SendEmailRequest(Guid connectionIdentifier,
Guid messageId,
String fromAddress,
List<String> toAddresses,
String subject,
String body,
Boolean isHtml)
{
this.ConnectionIdentifier = connectionIdentifier;
this.MessageId = messageId;
this.FromAddress = fromAddress;
this.ToAddresses = toAddresses;
this.Subject = subject;
this.Body = body;
this.IsHtml = isHtml;
}

#endregion

#region Properties

/// <summary>
/// Gets the body.
/// </summary>
/// <value>
/// The body.
/// </value>
public String Body { get; }

/// <summary>
/// Gets the connection identifier.
/// </summary>
/// <value>
/// The connection identifier.
/// </value>
public Guid ConnectionIdentifier { get; }

/// <summary>
/// Gets from address.
/// </summary>
/// <value>
/// From address.
/// </value>
public String FromAddress { get; }

/// <summary>
/// Gets a value indicating whether this instance is HTML.
/// </summary>
/// <value>
/// <c>true</c> if this instance is HTML; otherwise, <c>false</c>.
/// </value>
public Boolean IsHtml { get; }

/// <summary>
/// Gets the message identifier.
/// </summary>
/// <value>
/// The message identifier.
/// </value>
public Guid MessageId { get; }

/// <summary>
/// Gets the subject.
/// </summary>
/// <value>
/// The subject.
/// </value>
public String Subject { get; }

/// <summary>
/// Converts to address.
/// </summary>
/// <value>
/// To address.
/// </value>
public List<String> ToAddresses { get; }

#endregion

#region Methods

/// <summary>
/// Creates the specified from address.
/// </summary>
/// <param name="connectionIdentifier">The connection identifier.</param>
/// <param name="messageId">The message identifier.</param>
/// <param name="fromAddress">From address.</param>
/// <param name="toAddresses">To addresses.</param>
/// <param name="subject">The subject.</param>
/// <param name="body">The body.</param>
/// <param name="isHtml">if set to <c>true</c> [is HTML].</param>
/// <returns></returns>
public static SendEmailRequest Create(Guid connectionIdentifier,
Guid messageId,
String fromAddress,
List<String> toAddresses,
String subject,
String body,
Boolean isHtml)
{
return new SendEmailRequest(connectionIdentifier, messageId, fromAddress, toAddresses, subject, body, isHtml);
}

#endregion
}
}
Loading