From 9d61e460f51e7af4a18bef1a846b89eacdf9dd6f Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Wed, 22 Apr 2020 15:39:46 -0400 Subject: [PATCH] Expose DatabaseType in IDatabaseContext --- .../Configuration/DatabaseType.cs | 2 +- .../Database/DatabaseContext.cs | 17 +++++++++++------ .../Database/IDatabaseContext.cs | 6 ++++++ .../Database/MySqlDatabaseContext.cs | 10 +++++++--- .../Database/SqlServerDatabaseContext.cs | 11 ++++++++--- .../Database/SqliteDatabaseContext.cs | 10 +++++++--- 6 files changed, 40 insertions(+), 16 deletions(-) diff --git a/src/Tgstation.Server.Host/Configuration/DatabaseType.cs b/src/Tgstation.Server.Host/Configuration/DatabaseType.cs index d1432ac99c..e370e40c68 100644 --- a/src/Tgstation.Server.Host/Configuration/DatabaseType.cs +++ b/src/Tgstation.Server.Host/Configuration/DatabaseType.cs @@ -3,7 +3,7 @@ /// /// Type of database to user /// - enum DatabaseType + public enum DatabaseType { /// /// Use Microsoft SQL Server diff --git a/src/Tgstation.Server.Host/Database/DatabaseContext.cs b/src/Tgstation.Server.Host/Database/DatabaseContext.cs index d12fdb9ce5..8d0a0c0d5a 100644 --- a/src/Tgstation.Server.Host/Database/DatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/DatabaseContext.cs @@ -16,9 +16,12 @@ using Tgstation.Server.Host.Models; namespace Tgstation.Server.Host.Database { /// - #pragma warning disable CA1506 // TODO: Decomplexify +#pragma warning disable CA1506 // TODO: Decomplexify abstract class DatabaseContext : DbContext, IDatabaseContext where TParentContext : DbContext { + /// + public DatabaseType DatabaseType => DatabaseConfiguration.DatabaseType; + /// /// The s in the . /// @@ -104,11 +107,6 @@ namespace Tgstation.Server.Host.Database /// protected DatabaseConfiguration DatabaseConfiguration { get; } - /// - /// Gets a value indicationg whether the MY_ class of migrations should be used instead of the MS_ class - /// - protected abstract DatabaseType DatabaseType { get; } - /// IDatabaseCollection IDatabaseContext.Users => usersCollection; @@ -293,6 +291,8 @@ namespace Tgstation.Server.Host.Database /// public virtual async Task Initialize(CancellationToken cancellationToken) { + ValidateDatabaseType(); + if (DatabaseConfiguration.DropDatabase) { Logger.LogCritical("DropDatabase configuration option set! Dropping any existing database..."); @@ -406,5 +406,10 @@ namespace Tgstation.Server.Host.Database Logger.LogCritical("Failed to migrate! Exception: {0}", e); } } + + /// + /// Ensure the is correct for the . + /// + protected abstract void ValidateDatabaseType(); } } diff --git a/src/Tgstation.Server.Host/Database/IDatabaseContext.cs b/src/Tgstation.Server.Host/Database/IDatabaseContext.cs index e0f0ad2e9f..4b890df722 100644 --- a/src/Tgstation.Server.Host/Database/IDatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/IDatabaseContext.cs @@ -2,6 +2,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using Tgstation.Server.Host.Configuration; using Tgstation.Server.Host.Models; namespace Tgstation.Server.Host.Database @@ -11,6 +12,11 @@ namespace Tgstation.Server.Host.Database /// public interface IDatabaseContext { + /// + /// The . + /// + DatabaseType DatabaseType { get; } + /// /// The s in the /// diff --git a/src/Tgstation.Server.Host/Database/MySqlDatabaseContext.cs b/src/Tgstation.Server.Host/Database/MySqlDatabaseContext.cs index b8f7f227fe..f97ba641f1 100644 --- a/src/Tgstation.Server.Host/Database/MySqlDatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/MySqlDatabaseContext.cs @@ -13,9 +13,6 @@ namespace Tgstation.Server.Host.Database /// sealed class MySqlDatabaseContext : DatabaseContext { - /// - protected override DatabaseType DatabaseType => DatabaseType.MySql; - /// /// Construct a /// @@ -47,5 +44,12 @@ namespace Tgstation.Server.Host.Database else options.UseMySql(DatabaseConfiguration.ConnectionString); } + + /// + protected override void ValidateDatabaseType() + { + if (DatabaseType != DatabaseType.MariaDB && DatabaseType != DatabaseType.MySql) + throw new InvalidOperationException("Invalid DatabaseType for MySqlDatabaseContext!"); + } } } diff --git a/src/Tgstation.Server.Host/Database/SqlServerDatabaseContext.cs b/src/Tgstation.Server.Host/Database/SqlServerDatabaseContext.cs index 5a01e4a742..eb79e0ae6f 100644 --- a/src/Tgstation.Server.Host/Database/SqlServerDatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/SqlServerDatabaseContext.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; +using System; using Tgstation.Server.Host.Configuration; namespace Tgstation.Server.Host.Database @@ -10,9 +11,6 @@ namespace Tgstation.Server.Host.Database /// sealed class SqlServerDatabaseContext : DatabaseContext { - /// - protected override DatabaseType DatabaseType => DatabaseType.SqlServer; - /// /// Construct a /// @@ -29,5 +27,12 @@ namespace Tgstation.Server.Host.Database base.OnConfiguring(options); options.UseSqlServer(DatabaseConfiguration.ConnectionString); } + + /// + protected override void ValidateDatabaseType() + { + if (DatabaseType != DatabaseType.Sqlite) + throw new InvalidOperationException("Invalid DatabaseType for SqlServerDatabaseContext!"); + } } } diff --git a/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs b/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs index 02e03d5aa2..1cb8839ef0 100644 --- a/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs +++ b/src/Tgstation.Server.Host/Database/SqliteDatabaseContext.cs @@ -13,9 +13,6 @@ namespace Tgstation.Server.Host.Database /// sealed class SqliteDatabaseContext : DatabaseContext { - /// - protected override DatabaseType DatabaseType => DatabaseType.Sqlite; - /// /// Construct a /// @@ -35,5 +32,12 @@ namespace Tgstation.Server.Host.Database base.OnConfiguring(options); options.UseSqlite(DatabaseConfiguration.ConnectionString); } + + /// + protected override void ValidateDatabaseType() + { + if (DatabaseType != DatabaseType.Sqlite) + throw new InvalidOperationException("Invalid DatabaseType for SqliteDatabaseContext!"); + } } }