fix(database): qualify RD21 saves against pinned MariaDB 12.2.2
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace JobTrackerApi.Data;
|
||||
|
||||
public static class DatabaseConfiguration
|
||||
{
|
||||
public static string GetProvider(IConfiguration configuration) =>
|
||||
(configuration["Database:Provider"] ?? "mariadb").Trim().ToLowerInvariant() switch
|
||||
{
|
||||
"mysql" or "mariadb" => "mariadb",
|
||||
"sqlite" => "sqlite",
|
||||
_ => throw new InvalidOperationException("Database:Provider must be mariadb (or mysql) or explicitly sqlite for transitional preservation."),
|
||||
};
|
||||
|
||||
public static string GetConnectionString(IConfiguration configuration, string sqlitePath)
|
||||
{
|
||||
var provider = GetProvider(configuration);
|
||||
var connection = configuration.GetConnectionString("JobTracker");
|
||||
if (!string.IsNullOrWhiteSpace(connection)) return connection;
|
||||
if (provider == "sqlite") return $"Data Source={sqlitePath}";
|
||||
throw new InvalidOperationException("ConnectionStrings:JobTracker is required for MariaDB. SQLite is only used when Database:Provider is explicitly sqlite.");
|
||||
}
|
||||
|
||||
public static void Configure(DbContextOptionsBuilder options, IConfiguration configuration, string sqlitePath)
|
||||
{
|
||||
var provider = GetProvider(configuration);
|
||||
var connection = GetConnectionString(configuration, sqlitePath);
|
||||
if (provider == "mariadb")
|
||||
{
|
||||
var configuredVersion = configuration["Database:ServerVersion"] ?? "12.2.2";
|
||||
if (!Version.TryParse(configuredVersion, out var version) || version.Major < 1 || version.Build < 0)
|
||||
throw new InvalidOperationException("Database:ServerVersion must be a MariaDB version in major.minor.patch form.");
|
||||
// AutoDetect would open a server connection while options are being registered.
|
||||
options.UseMySql(connection, new MariaDbServerVersion(version), mysql => mysql.MigrationsAssembly("JobTrackerApi"));
|
||||
}
|
||||
else
|
||||
options.UseSqlite(connection, sqlite => sqlite.MigrationsAssembly("JobTrackerApi"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user