aboutsummaryrefslogtreecommitdiff
path: root/lib/Emails.Transactional.Plugin
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Emails.Transactional.Plugin')
-rw-r--r--lib/Emails.Transactional.Plugin/src/EmailDbCtx.cs71
-rw-r--r--lib/Emails.Transactional.Plugin/src/TEmailEntryPoint.cs12
-rw-r--r--lib/Emails.Transactional.Plugin/src/Transactional Emails.csproj15
3 files changed, 83 insertions, 15 deletions
diff --git a/lib/Emails.Transactional.Plugin/src/EmailDbCtx.cs b/lib/Emails.Transactional.Plugin/src/EmailDbCtx.cs
index cd865d8..82bf696 100644
--- a/lib/Emails.Transactional.Plugin/src/EmailDbCtx.cs
+++ b/lib/Emails.Transactional.Plugin/src/EmailDbCtx.cs
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2022 Vaughn Nugent
+* Copyright (c) 2023 Vaughn Nugent
*
* Library: VNLib
* Package: Transactional Emails
@@ -27,14 +27,81 @@ using System;
using Microsoft.EntityFrameworkCore;
using VNLib.Plugins.Extensions.Data;
+using VNLib.Plugins.Extensions.Loading.Sql;
namespace Emails.Transactional
{
- internal class EmailDbCtx : TransactionalDbContext
+ internal class EmailDbCtx : TransactionalDbContext, IDbTableDefinition
{
public DbSet<EmailTransaction> EmailTransactions { get; set; }
public EmailDbCtx(DbContextOptions options) : base(options)
{}
+
+ public EmailDbCtx()
+ { }
+
+ public void OnDatabaseCreating(IDbContextBuilder builder, object? userState)
+ {
+ //Define email tables
+ builder.DefineTable<EmailTransaction>(nameof(EmailTransactions))
+
+ //Start with id, its a primary key
+ .WithColumn(e => e.Id)
+ .MaxLength(50)
+ .Next()
+
+ .WithColumn(e => e.Created)
+ .AllowNull(false)
+ .Next()
+
+ .WithColumn(e => e.LastModified)
+ .AllowNull(false)
+ .Next()
+
+ .WithColumn(e => e.UserId)
+ .MaxLength(100)
+ .Next()
+
+ //To is allowed to be null
+ .WithColumn(e => e.To)
+ .MaxLength(1000)
+ .Next()
+
+ .WithColumn(e => e.From)
+ .MaxLength(100)
+ .Next()
+
+ .WithColumn(e => e.FromName)
+ .MaxLength(100)
+ .Next()
+
+ .WithColumn(e => e.Subject)
+ .MaxLength(500)
+ .Next()
+
+ .WithColumn(e => e.Ccs)
+ .MaxLength(1000)
+ .Next()
+
+ .WithColumn(e => e.Bccs)
+ .MaxLength(1000)
+ .Next()
+
+ .WithColumn(e => e.ReplyTo)
+ .MaxLength(100)
+ .Next()
+
+ .WithColumn(e => e.ReplyToName)
+ .MaxLength(100)
+ .Next()
+
+ .WithColumn(e => e.TemplateId)
+ .MaxLength(100)
+ .Next()
+
+ .WithColumn(e => e.Result)
+ .MaxLength(200);
+ }
}
}
diff --git a/lib/Emails.Transactional.Plugin/src/TEmailEntryPoint.cs b/lib/Emails.Transactional.Plugin/src/TEmailEntryPoint.cs
index 8e7319a..42ba0ce 100644
--- a/lib/Emails.Transactional.Plugin/src/TEmailEntryPoint.cs
+++ b/lib/Emails.Transactional.Plugin/src/TEmailEntryPoint.cs
@@ -24,7 +24,6 @@
using System;
using System.Threading.Tasks;
-using System.Collections.Generic;
using Emails.Transactional.Endpoints;
@@ -33,6 +32,8 @@ using Minio.DataModel.Tracing;
using VNLib.Utils.Logging;
using VNLib.Plugins;
+using VNLib.Plugins.Extensions.Loading;
+using VNLib.Plugins.Extensions.Loading.Sql;
using VNLib.Plugins.Extensions.Loading.Routing;
namespace Emails.Transactional
@@ -64,6 +65,9 @@ namespace Emails.Transactional
//Route send oauth endpoint
this.Route<SendEndpoint>();
+ //Create databases
+ _ = this.ObserveWork(CreateDatabasesasync, 550);
+
Log.Information("Plugin loaded");
}
@@ -77,5 +81,11 @@ namespace Emails.Transactional
{
throw new NotImplementedException();
}
+
+ private async Task CreateDatabasesasync()
+ {
+ //Create the operation database
+ await this.EnsureDbCreatedAsync<EmailDbCtx>(this);
+ }
}
}
diff --git a/lib/Emails.Transactional.Plugin/src/Transactional Emails.csproj b/lib/Emails.Transactional.Plugin/src/Transactional Emails.csproj
index 0d628f8..db410b5 100644
--- a/lib/Emails.Transactional.Plugin/src/Transactional Emails.csproj
+++ b/lib/Emails.Transactional.Plugin/src/Transactional Emails.csproj
@@ -5,14 +5,15 @@
<RootNamespace>Emails.Transactional</RootNamespace>
<AssemblyName>Emails.Transactional</AssemblyName>
<Nullable>enable</Nullable>
+ <NeutralLanguage>en-US</NeutralLanguage>
<!-- Resolve nuget dll files and store them in the output dir -->
- <EnableDynamicLoading>true</EnableDynamicLoading>
-
+ <EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
<PropertyGroup>
<Authors>Vaughn Nugent</Authors>
+ <Company>Vaughn Nugent</Company>
<Copyright>Copyright © 2023 Vaughn Nugent</Copyright>
<Product>Emails.Transactional</Product>
<PackageProjectUrl>https://www.vaughnnugent.com/resources/software/modules/Emails.Transactional</PackageProjectUrl>
@@ -38,17 +39,7 @@
</ItemGroup>
<ItemGroup>
- <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
- </ItemGroup>
-
- <ItemGroup>
- <Folder Include="Endpoints\" />
- <Folder Include="Meta\" />
- </ItemGroup>
-
- <ItemGroup>
<ProjectReference Include="..\..\..\..\..\core\lib\Plugins.Essentials\src\VNLib.Plugins.Essentials.csproj" />
- <ProjectReference Include="..\..\..\..\..\core\lib\Plugins.PluginBase\src\VNLib.Plugins.PluginBase.csproj" />
<ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Data\src\VNLib.Plugins.Extensions.Data.csproj" />
<ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Loading.Sql\src\VNLib.Plugins.Extensions.Loading.Sql.csproj" />
<ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Loading\src\VNLib.Plugins.Extensions.Loading.csproj" />