/* * Copyright (c) 2023 Vaughn Nugent * * Library: VNLib * Package: Emails.Transactional * File: EmailDbCtx.cs * * EmailDbCtx.cs is part of Emails.Transactional which is part of the larger * VNLib collection of libraries and utilities. * * Emails.Transactional is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 2 of the License, * or (at your option) any later version. * * Emails.Transactional is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Emails.Transactional. If not, see http://www.gnu.org/licenses/. */ using System; using Microsoft.EntityFrameworkCore; using VNLib.Plugins.Extensions.Data; using VNLib.Plugins.Extensions.Loading.Sql; namespace Emails.Transactional { internal class EmailDbCtx : TransactionalDbContext, IDbTableDefinition { public DbSet EmailTransactions { get; set; } public EmailDbCtx(DbContextOptions options) : base(options) {} public EmailDbCtx() { } public void OnDatabaseCreating(IDbContextBuilder builder, object? userState) { //Define email tables builder.DefineTable(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); } } }