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
6 changes: 2 additions & 4 deletions BackgroundProcessing/Abstractions/JobDetails.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using Odin.DesignContracts;

namespace Odin.BackgroundProcessing
namespace Odin.BackgroundProcessing
{
/// <summary>
/// Represents the outcome of an attempt to schedule a job with the background jobs engine.
Expand All @@ -14,7 +12,7 @@ public sealed record JobDetails
/// <param name="scheduledFor"></param>
public JobDetails(string jobId, DateTimeOffset scheduledFor)
{
Precondition.Requires(!string.IsNullOrWhiteSpace(jobId));
ArgumentException.ThrowIfNullOrWhiteSpace(jobId);
JobId = jobId;
ScheduledFor = scheduledFor;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>

<ImplicitUsings>true</ImplicitUsings>
<PackageId>Odin.BackgroundProcessing.Abstractions</PackageId>
<RootNamespace>Odin.BackgroundProcessing</RootNamespace>
Expand All @@ -17,7 +16,6 @@
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\..\DesignContracts\Core\Odin.DesignContracts.csproj" />
<ProjectReference Include="..\..\System\Result\Odin.System.Result.csproj" />
<ProjectReference Include="..\..\System\Strings\Odin.System.Strings.csproj" />
</ItemGroup>
Expand Down
5 changes: 2 additions & 3 deletions BackgroundProcessing/Core/BackgroundProcessingOptions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Odin.DesignContracts;
using Odin.System;
using Odin.System;

namespace Odin.BackgroundProcessing
{
Expand All @@ -18,7 +17,7 @@ public string Provider
get => _provider;
set
{
Precondition.Requires(!string.IsNullOrWhiteSpace(value));
ArgumentException.ThrowIfNullOrWhiteSpace(value);
_provider = value.Replace("BackgroundProcessor", "", StringComparison.OrdinalIgnoreCase);
}
}
Expand Down
9 changes: 4 additions & 5 deletions BackgroundProcessing/Core/DependencyInjectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Odin.BackgroundProcessing;
using Odin.DesignContracts;
using Odin.System;

// ReSharper disable once CheckNamespace
Expand Down Expand Up @@ -80,7 +79,7 @@
this IServiceCollection serviceCollection, IConfiguration configuration,
IConfigurationSection configurationSection, Func<IServiceProvider, string>? sqlServerConnectionStringFactory = null)
{
Precondition.RequiresNotNull(configurationSection);
ArgumentNullException.ThrowIfNull(configurationSection);

BackgroundProcessingOptions options = new BackgroundProcessingOptions();
configurationSection.Bind(options);
Expand All @@ -97,7 +96,7 @@

if (options.Provider == BackgroundProcessingProviders.Null)
{
serviceCollection.AddTransient<IBackgroundProcessor, NullBackgroundProcessor>();

Check warning on line 99 in BackgroundProcessing/Core/DependencyInjectionExtensions.cs

View workflow job for this annotation

GitHub Actions / build

'IBackgroundProcessor' is obsolete: 'Rather use Hangfire and it's IBackgroundJobClient directly.'
return;
}

Expand Down Expand Up @@ -131,8 +130,8 @@
/// <param name="app"></param>
public static IApplicationBuilder UseBackgroundProcessing(this IApplicationBuilder app, IServiceProvider appServices)
{
Precondition.RequiresNotNull(appServices);
Precondition.RequiresNotNull(app);
ArgumentNullException.ThrowIfNull(appServices);
ArgumentNullException.ThrowIfNull(app);

BackgroundProcessingOptions options = appServices.GetRequiredService<BackgroundProcessingOptions>();
if (options.Provider == BackgroundProcessingProviders.Null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\DesignContracts\Core\Odin.DesignContracts.csproj"/>
<ProjectReference Include="..\..\System\Activator2\Odin.System.Activator2.csproj"/>
<ProjectReference Include="..\..\System\Result\Odin.System.Result.csproj"/>
<ProjectReference Include="..\Abstractions\Odin.BackgroundProcessing.Abstractions.csproj"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Hangfire;
using Hangfire;
using Hangfire.Annotations;
using Odin.DesignContracts;
using Odin.Logging;
using Odin.System;
using System.Linq.Expressions;
Expand All @@ -25,9 +24,9 @@ public sealed class HangfireBackgroundProcessor : IBackgroundProcessor
/// <param name="logger"></param>
public HangfireBackgroundProcessor(IRecurringJobManagerV2 recurringJobManager, IBackgroundJobClient jobClient, ILoggerWrapper<HangfireBackgroundProcessor> logger)
{
Precondition.RequiresNotNull(recurringJobManager);
Precondition.RequiresNotNull(jobClient);
Precondition.RequiresNotNull(logger);
ArgumentNullException.ThrowIfNull(recurringJobManager);
ArgumentNullException.ThrowIfNull(jobClient);
ArgumentNullException.ThrowIfNull(logger);
_recurringJobManager = recurringJobManager;
_jobClient = jobClient;
_logger = logger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Odin.DesignContracts;

namespace Odin.BackgroundProcessing
{
Expand All @@ -20,7 +19,7 @@ public sealed class HangfirePolicyAuthorisationFilter : IDashboardAuthorizationF
/// <param name="policyName"></param>
public HangfirePolicyAuthorisationFilter(string policyName)
{
Precondition.Requires(!string.IsNullOrWhiteSpace(policyName));
ArgumentException.ThrowIfNullOrWhiteSpace(policyName);
_policyName = policyName.Trim();
}

Expand Down
5 changes: 2 additions & 3 deletions BackgroundProcessing/Hangfire/HangfireServiceInjector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Odin.DesignContracts;

namespace Odin.BackgroundProcessing
{
Expand All @@ -16,8 +15,8 @@ public class HangfireServiceInjector : IBackgroundProcessorServiceInjector
public void TryAddBackgroundProcessor(IServiceCollection serviceCollection, IConfiguration configuration,
IConfigurationSection backgroundProcessingSection, Func<IServiceProvider, string>? connectionStringFactory = null)
{
Precondition.RequiresNotNull(serviceCollection);
Precondition.RequiresNotNull(backgroundProcessingSection);
ArgumentNullException.ThrowIfNull(serviceCollection);
ArgumentNullException.ThrowIfNull(backgroundProcessingSection);
IConfigurationSection? providerSection =
backgroundProcessingSection.GetSection(BackgroundProcessingProviders.Hangfire);
if (providerSection == null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>

<ImplicitUsings>true</ImplicitUsings>
<PackageId>Odin.BackgroundProcessing.Hangfire</PackageId>
<RootNamespace>Odin.BackgroundProcessing</RootNamespace>
<PackageIcon>icon.png</PackageIcon>
<Description>Concrete implementation of IBackgroundProcessor via Hangfire.



</Description>
</PropertyGroup>
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
using Odin.Configuration;
using System.Reflection;
using System.Runtime.CompilerServices;
using Xunit;

namespace Tests.Odin.Configuration;

Expand Down
1 change: 0 additions & 1 deletion Data/SqlScriptsRunner/Odin.Data.SqlScriptsRunner.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\DesignContracts\Core\Odin.DesignContracts.csproj" />
<ProjectReference Include="..\..\System\Result\Odin.System.Result.csproj" />
</ItemGroup>
<ItemGroup>
Expand Down
13 changes: 6 additions & 7 deletions Data/SqlScriptsRunner/SqlScriptsRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using DbUp.Helpers;
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
using Odin.DesignContracts;
using Odin.System;
using System.Reflection;

Expand Down Expand Up @@ -43,15 +42,15 @@ private SqlScriptsRunner(Assembly assemblyWithEmbeddedScripts)
{
// Contract.Requires(logger);
// _logger = logger;
Precondition.Requires(assemblyWithEmbeddedScripts != null!);
_assemblyWithEmbeddedScripts = assemblyWithEmbeddedScripts!;
ArgumentNullException.ThrowIfNull(assemblyWithEmbeddedScripts);
_assemblyWithEmbeddedScripts = assemblyWithEmbeddedScripts;
}

public static ResultValue<SqlScriptsRunner> CreateFromConnectionStringName(string connectionStringName,
Assembly assemblyWithEmbeddedScripts, IConfiguration configuration)
{
Precondition.Requires(configuration != null!);
Precondition.Requires(assemblyWithEmbeddedScripts != null!);
ArgumentNullException.ThrowIfNull(configuration);
ArgumentNullException.ThrowIfNull(assemblyWithEmbeddedScripts);
SqlScriptsRunner runner = new SqlScriptsRunner(assemblyWithEmbeddedScripts)
{
ConnectionString = configuration.GetConnectionString(connectionStringName)!
Expand All @@ -76,8 +75,8 @@ public static ResultValue<SqlScriptsRunner> CreateFromConnectionStringName(strin

public static ResultValue<SqlScriptsRunner> CreateFromConnectionString(string connectionString, Assembly assemblyWithEmbeddedScripts)
{
Precondition.Requires(assemblyWithEmbeddedScripts != null!);
Precondition.Requires(!string.IsNullOrWhiteSpace(connectionString));
ArgumentNullException.ThrowIfNull(assemblyWithEmbeddedScripts);
ArgumentException.ThrowIfNullOrWhiteSpace(connectionString);
SqlScriptsRunner runner = new SqlScriptsRunner(assemblyWithEmbeddedScripts)
{
ConnectionString = connectionString
Expand Down
7 changes: 3 additions & 4 deletions Email/Core/Attachment.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Odin.DesignContracts;
using System.Text.Json.Serialization;

namespace Odin.Email
Expand All @@ -17,9 +16,9 @@ public sealed record Attachment
/// <param name="contentType"></param>
public Attachment(string fileName, Stream data, string contentType)
{
Precondition.Requires(!string.IsNullOrWhiteSpace(fileName));
Precondition.Requires(!string.IsNullOrWhiteSpace(contentType));
Precondition.RequiresNotNull(data);
ArgumentException.ThrowIfNullOrWhiteSpace(fileName);
ArgumentException.ThrowIfNullOrWhiteSpace(contentType);
ArgumentNullException.ThrowIfNull(data);
FileName = fileName;
Data = data;
ContentType = contentType;
Expand Down
5 changes: 2 additions & 3 deletions Email/Core/DependencyInjectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Odin.DesignContracts;
using Odin.Email;
using Odin.System;

Expand Down Expand Up @@ -41,7 +40,7 @@ public static void AddOdinEmailSending(
public static void AddOdinEmailSending(
this IServiceCollection serviceCollection, IConfigurationSection configurationSection)
{
Precondition.RequiresNotNull(configurationSection);
ArgumentNullException.ThrowIfNull(configurationSection);

EmailSendingOptions emailOptions = new EmailSendingOptions();
configurationSection.Bind(emailOptions);
Expand Down
3 changes: 1 addition & 2 deletions Email/Core/EmailAddress.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using Odin.DesignContracts;

namespace Odin.Email
{
Expand All @@ -24,7 +23,7 @@ public sealed class EmailAddress
/// <param name="displayName"></param>
public EmailAddress(string emailAddress, string? displayName = null)
{
Precondition.Requires<ArgumentNullException>(!string.IsNullOrWhiteSpace(emailAddress), $"{nameof(emailAddress)} is required");
ArgumentException.ThrowIfNullOrWhiteSpace(emailAddress);
if (string.IsNullOrWhiteSpace(displayName))
{
DisplayName = null;
Expand Down
10 changes: 3 additions & 7 deletions Email/Core/EmailMessage.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using Odin.DesignContracts;

namespace Odin.Email
{
/// <summary>
Expand Down Expand Up @@ -29,10 +27,8 @@ public EmailMessage()
public EmailMessage(string toEmailAddress, string fromEmailAddress, string? subject, string? body,
bool isHtml = false)
{
Precondition.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(toEmailAddress),
$"{nameof(toEmailAddress)} is required");
Precondition.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(fromEmailAddress),
$"{nameof(fromEmailAddress)} is required");
ArgumentException.ThrowIfNullOrWhiteSpace(toEmailAddress);
ArgumentException.ThrowIfNullOrWhiteSpace(fromEmailAddress);
if (string.IsNullOrWhiteSpace(subject))
{
Subject = "";
Expand Down Expand Up @@ -207,7 +203,7 @@ public Dictionary<string, string> Headers
/// <param name="attachment"></param>
public void Attach(Attachment attachment)
{
Precondition.RequiresNotNull(attachment);
ArgumentNullException.ThrowIfNull(attachment);
Attachments.Add(attachment);
}
}
Expand Down
6 changes: 2 additions & 4 deletions Email/Core/EmailSendingOptions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Odin.DesignContracts;
using Odin.System;
using Odin.System;


namespace Odin.Email
Expand Down Expand Up @@ -52,8 +51,7 @@ public string Provider
get => _provider;
init
{
Precondition.Requires(!string.IsNullOrWhiteSpace(value));
// Ensure MailgunEmailSender is changed to Mailgun for backwards compatibility
ArgumentException.ThrowIfNullOrWhiteSpace(value);
_provider = value.Replace("EmailSender", "", StringComparison.OrdinalIgnoreCase);
}
}
Expand Down
1 change: 0 additions & 1 deletion Email/Core/Odin.Email.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\DesignContracts\Core\Odin.DesignContracts.csproj" />
<ProjectReference Include="..\..\System\Activator2\Odin.System.Activator2.csproj" />
<ProjectReference Include="..\..\System\Strings\Odin.System.Strings.csproj" />
<ProjectReference Include="..\..\System\Result\Odin.System.Result.csproj" />
Expand Down
36 changes: 23 additions & 13 deletions Email/Mailgun/MailgunEmailSender.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Microsoft.Extensions.Logging;
using Odin.DesignContracts;
using Microsoft.Extensions.Logging;
using Odin.Logging;
using Odin.System;
using Polly;
Expand Down Expand Up @@ -42,9 +41,9 @@ public sealed class MailgunEmailSender : IEmailSender
public MailgunEmailSender(MailgunOptions mailgunSettings,
EmailSendingOptions emailSettings, ILoggerWrapper<MailgunEmailSender> logger)
{
Precondition.RequiresNotNull(mailgunSettings);
Precondition.RequiresNotNull(emailSettings);
Precondition.RequiresNotNull(logger);
ArgumentNullException.ThrowIfNull(mailgunSettings);
ArgumentNullException.ThrowIfNull(emailSettings);
ArgumentNullException.ThrowIfNull(logger);
_mailgunSettings = mailgunSettings;
_emailSettings = emailSettings;
_logger = logger;
Expand All @@ -59,7 +58,10 @@ public MailgunEmailSender(MailgunOptions mailgunSettings,
endPoint += "/";
}

Precondition.Requires(!string.IsNullOrWhiteSpace(_mailgunSettings.Domain), "Domain missing in MailgunOptions");
if (string.IsNullOrWhiteSpace(_mailgunSettings.Domain))
{
throw new ArgumentException("Domain missing in MailgunOptions", nameof(mailgunSettings));
}
string subPath = $"{_mailgunSettings.Domain}/messages";
// Leading slash will replace the /v3
if (subPath[0] == '/')
Expand All @@ -68,7 +70,10 @@ public MailgunEmailSender(MailgunOptions mailgunSettings,
}
_httpClient.BaseAddress = new Uri(new Uri(endPoint), subPath);

Precondition.Requires(!string.IsNullOrWhiteSpace(_mailgunSettings.ApiKey), "ApiKey missing in MailgunOptions");
if (string.IsNullOrWhiteSpace(_mailgunSettings.ApiKey))
{
throw new ArgumentException("ApiKey missing in MailgunOptions", nameof(mailgunSettings));
}

byte[] byteArray = Encoding.ASCII.GetBytes($"api:{_mailgunSettings.ApiKey}");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
Expand All @@ -85,9 +90,11 @@ private static string EncodeAsHtml(string input)

private static ByteArrayContent ToByteArrayContent(Stream stream)
{
Precondition.RequiresNotNull(stream);
Precondition.Requires(stream.CanRead, "Stream.CanRead must be true");
Precondition.Requires(stream.CanSeek, "Stream.CanSeek must be true");
ArgumentNullException.ThrowIfNull(stream);
if (!stream.CanRead || !stream.CanSeek)
{
throw new ArgumentException("Stream.CanRead and Stream.CanSeek must be true", nameof(stream));
}

try
{
Expand All @@ -112,9 +119,12 @@ private static ByteArrayContent ToByteArrayContent(Stream stream)
/// <exception cref="HttpRequestException"></exception>
public async Task<ResultValue<string>> SendEmail(IEmailMessage email)
{
Precondition.RequiresNotNull(email);
Precondition.Requires(email.To.Any(), "Mailgun requires one or more to addresses.");
Precondition.Requires(!string.IsNullOrWhiteSpace(email.Subject), "Mailgun requires an email subject");
ArgumentNullException.ThrowIfNull(email);
if (!email.To.Any())
{
throw new ArgumentException("Mailgun requires one or more to addresses.", nameof(email));
}
ArgumentException.ThrowIfNullOrWhiteSpace(email.Subject,"Mailgun requires an email subject");

try
{
Expand Down
Loading
Loading