diff --git a/Apis/email-api/Program.cs b/Apis/email-api/Program.cs index e174e42..f954459 100644 --- a/Apis/email-api/Program.cs +++ b/Apis/email-api/Program.cs @@ -1,5 +1,10 @@ using System.Reflection; +using EmailApi.Data; +using EmailApi.Data.Repositories; +using EmailApi.Data.Repositories.Contracts; +using EmailApi.Data.Services; using EmailApi.Services; +using Microsoft.EntityFrameworkCore; using Models.Settings; using Serilog; using StartupHelpers; @@ -24,6 +29,19 @@ try builder.Services.Configure(builder.Configuration.GetSection("Smtp")); builder.Services.Configure(builder.Configuration.GetSection("FileStorage")); + builder.Services.AddDbContext(options => + { + var connectionString = builder.Services.GetConfiguredDbConnectionString(builder.Configuration); + options.UseSqlServer(connectionString, sql => + { + sql.MigrationsHistoryTable(EmailApiDbContext.MigrationTableName, EmailApiDbContext.SchemaName); + sql.MigrationsAssembly("email-api-data"); + }); + }); + + builder.Services.AddScoped(); + builder.Services.AddSingleton(); + builder.Services.AddScoped(); var app = builder.Build(); @@ -40,6 +58,13 @@ try app.UseAuthorization(); app.MapControllers(); + Log.Information("Running EF Core migrations if any"); + using (var scope = app.Services.CreateScope()) + { + var db = scope.ServiceProvider.GetRequiredService(); + db.Database.Migrate(); + } + Log.Information("{Service} startup complete. Listening for requests...", ServiceName); app.Run(); } diff --git a/Apis/email-api/Services/SmtpEmailDispatcher.cs b/Apis/email-api/Services/SmtpEmailDispatcher.cs index 3ca3eb0..d0adc1f 100644 --- a/Apis/email-api/Services/SmtpEmailDispatcher.cs +++ b/Apis/email-api/Services/SmtpEmailDispatcher.cs @@ -1,3 +1,4 @@ +using EmailApi.Data.Services; using EmailApi.Models.Requests; using MailKit.Net.Smtp; using MailKit.Security; @@ -11,44 +12,19 @@ public sealed class SmtpEmailDispatcher { private readonly SmtpSettings _smtp; private readonly FileStorageSettings _fileStorage; + private readonly IEmailTemplateService _templates; private readonly ILogger _log; private readonly string _environmentName; - private static readonly string HtmlShellStart = """ - - - - - - -
- - - - -
-

myAi

-
- """; - - private static readonly string HtmlShellEnd = """ -
- Automated message from myAi. -
-
- - - """; - public SmtpEmailDispatcher( IOptions smtp, IOptions fileStorage, + IEmailTemplateService templates, ILogger log) { _smtp = smtp.Value; _fileStorage = fileStorage.Value; + _templates = templates; _log = log; _environmentName = Environment.GetEnvironmentVariable("APP_ENVIRONMENT_NAME") ?? "Development"; } @@ -72,9 +48,12 @@ public sealed class SmtpEmailDispatcher msg.Subject = $"[{_environmentName}] {req.Subject}".Trim(); + var shellStart = _templates.Get("email.html-shell.start", "*"); + var shellEnd = _templates.Get("email.html-shell.end", "*"); + var builder = new BodyBuilder { - HtmlBody = HtmlShellStart + req.HtmlBody + HtmlShellEnd + HtmlBody = shellStart + req.HtmlBody + shellEnd }; if (!string.IsNullOrWhiteSpace(req.AttachmentPath)) diff --git a/Apis/email-api/email-api.csproj b/Apis/email-api/email-api.csproj index 111de58..489268c 100644 --- a/Apis/email-api/email-api.csproj +++ b/Apis/email-api/email-api.csproj @@ -22,6 +22,7 @@ +