using Microsoft.Data.SqlClient; namespace Infrastructure.Sql; /// /// Helper for building SQL Server connection strings from environment variables. /// public static class SqlConnectionStringHelper { /// /// Builds a SQL Server connection string from environment variables. /// /// Throws if DB_SERVER, DB_NAME, DB_USER, or DB_PASSWORD is unset. /// If null, falls back to the DB_NAME environment variable. public static string BuildConnectionString(string? databaseName = null) { string server = Required("DB_SERVER"); string dbName = databaseName ?? Required("DB_NAME"); string user = Required("DB_USER"); string password = Required("DB_PASSWORD"); SqlConnectionStringBuilder builder = new() { DataSource = server, InitialCatalog = dbName, UserID = user, Password = password, TrustServerCertificate = ResolveTrustServerCertificate(), Encrypt = true, }; return builder.ConnectionString; } /// /// Builds a connection string to the master database using environment variables. /// public static string BuildMasterConnectionString() { return BuildConnectionString("master"); } /// /// Resolves the DB_TRUST_SERVER_CERTIFICATE environment variable, defaulting to /// true when it is unset or not a valid boolean. /// private static bool ResolveTrustServerCertificate() { return !bool.TryParse( Environment.GetEnvironmentVariable("DB_TRUST_SERVER_CERTIFICATE"), out bool trustServerCertificate ) || trustServerCertificate; } private static string Required(string variableName) => Environment.GetEnvironmentVariable(variableName) ?? throw new InvalidOperationException( $"The {variableName} environment variable is not set." ); }