Update database handling code (#247)

This commit is contained in:
2026-08-25 13:42:51 -04:00
committed by GitHub
parent 03ca966708
commit 8a047e8d9f
37 changed files with 386 additions and 405 deletions

View File

@@ -0,0 +1,102 @@
using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Configuration;
namespace Database.Connection;
/// <summary>
/// Helper for building SQL Server connection strings from configuration
/// (backed by the <c>DB_*</c> environment variables).
/// </summary>
public static class SqlConnectionStringHelper
{
private static SqlConnectionStringBuilder MakeConfiguredConnectionBuilder(
IConfiguration configuration
) =>
new()
{
DataSource = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_SERVER"),
UserID = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_USER"),
Password = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_PASSWORD"),
TrustServerCertificate = ResolveTrustServerCertificate(configuration),
Encrypt = true,
};
/// <summary>
/// Builds a SQL Server connection string from configuration.
/// </summary>
/// <remarks>
/// Returns <c>false</c> if DB_SERVER, DB_NAME, DB_USER, or DB_PASSWORD is unset.
/// </remarks>
/// <param name="configuration">The configuration to read the <c>DB_*</c> values from.</param>
/// <param name="connectionString">The resolved connection string, if successful.</param>
public static bool TryGetStandardDbConnectionString(
IConfiguration configuration,
out string connectionString
)
{
connectionString = string.Empty;
try
{
SqlConnectionStringBuilder builder = MakeConfiguredConnectionBuilder(configuration);
builder.InitialCatalog = ConfigurationHelpers.GetKeyOrThrow(configuration, "DB_NAME");
connectionString = builder.ConnectionString;
return true;
}
catch
{
return false;
}
}
public static bool TryGetMasterConnectionString(
IConfiguration configuration,
out string connectionString
)
{
connectionString = string.Empty;
try
{
var builder = MakeConfiguredConnectionBuilder(configuration);
builder.InitialCatalog = "master";
connectionString = builder.ConnectionString;
return true;
}
catch
{
return false;
}
}
public static bool TryGetDatabaseNameFromConnectionString(
string connectionString,
out string databaseName
)
{
databaseName = string.Empty;
try
{
var builder = new SqlConnectionStringBuilder(connectionString);
databaseName = builder.InitialCatalog;
return true;
}
catch
{
return false;
}
}
/// <summary>
/// Resolves the <c>DB_TRUST_SERVER_CERTIFICATE</c> configuration value, defaulting to
/// <c>true</c> when it is unset or not a valid boolean.
/// </summary>
private static bool ResolveTrustServerCertificate(IConfiguration configuration)
{
return !bool.TryParse(
configuration["DB_TRUST_SERVER_CERTIFICATE"],
out bool trustServerCertificate
) || trustServerCertificate;
}
}