using Infrastructure.Configuration; using Microsoft.Data.SqlClient; using Microsoft.Extensions.Configuration; namespace Database.Connection; /// /// Default implementation that creates SQL Server connections, /// resolving the connection string from environment variables or application configuration. /// public class DefaultSqlConnectionFactory(IConfiguration configuration) : ISqlConnectionFactory { /// /// The resolved SQL Server connection string, preferring (in order): the DB_CONNECTION_STRING /// configuration value, and a connection string built from individual DB_* configuration values. /// /// Thrown when no connection string can be resolved from any source. public string ConnectionString { get { string? fullConnectionString = configuration[ConfigurationKeys.DbConnectionString]; if (!string.IsNullOrEmpty(fullConnectionString)) return fullConnectionString; // Try to build from individual configuration values (preferred method for Docker) if ( SqlConnectionStringHelper.TryGetStandardDbConnectionString( configuration, out var connectionString ) ) return connectionString; throw new InvalidOperationException( "Database connection string not configured. Set DB_CONNECTION_STRING or DB_SERVER, DB_NAME, DB_USER, DB_PASSWORD env vars." ); } } /// public SqlConnection CreateConnection() { return new SqlConnection(ConnectionString); } }