Skip to content

[BD-845] Externalize configuration to YAML files#19

Merged
Ranganathan-code-ops merged 1 commit intomainfrom
feature/orch-001/BD-845-env-externalization
Feb 13, 2026
Merged

[BD-845] Externalize configuration to YAML files#19
Ranganathan-code-ops merged 1 commit intomainfrom
feature/orch-001/BD-845-env-externalization

Conversation

@Ranganathan-code-ops
Copy link
Copy Markdown
Collaborator

@Ranganathan-code-ops Ranganathan-code-ops commented Feb 11, 2026

Summary

  • Externalize ALL configuration, secrets, and environment-specific values from hardcoded sources to external YAML files
  • Implement custom ASP.NET Core YAML configuration provider with __: key mapping
  • Add startup configuration validation for required settings (database, SMTP, alerts)
  • Remove hardcoded encryption key from PasswordEncryptor (now requires config)
  • Remove hardcoded holidays from BusinessHoursCalculator (now from config)
  • Add docker-compose.yml for local development with SQL Server

Changes

New Files (17)

  • Core/Configuration/: DatabaseSettings.cs, BusinessHoursSettings.cs, HealthCheckSettings.cs, SwaggerSettings.cs
  • Core/Interfaces/: IYamlConfigLoader.cs, IConfigurationValidator.cs
  • Infrastructure/Configuration/: YamlConfigLoader.cs, YamlConfigurationSource.cs, ConfigurationValidator.cs
  • Config: OrderMonitor_ENV.yml, OrderMonitor_ENV.development.yml, OrderMonitor_ENV.secrets.yml.template
  • Docker: docker-compose.yml
  • Tests: YamlConfigLoaderTests.cs, ConfigurationValidatorTests.cs, PasswordEncryptorTests.cs, BusinessHoursSettingsTests.cs, YamlConfigurationSourceTests.cs, ConfigurationIntegrationTests.cs

Modified Files (10)

  • Program.cs - YAML config source integration, startup validation
  • DependencyInjection.cs - Deferred DB factory, config model registration
  • PasswordEncryptor.cs - Removed hardcoded key, added Configure() method
  • BusinessHoursCalculator.cs - IOptions constructor, removed hardcoded holidays
  • appsettings.json - Cleaned of all secrets and env-specific values
  • CustomWebApplicationFactory.cs - Test config and no-op validator

Deleted Files (1)

  • appsettings.Development.json - Contained encrypted passwords

Configuration Override Precedence

appsettings.jsonOrderMonitor_ENV.ymlOrderMonitor_ENV.{env}.yml → Environment Variables

Test Plan

  • All 176 unit tests passing (64 new)
  • All 38 integration tests passing (3 new)
  • YamlConfigLoader: file loading, key mapping, error handling (10 tests)
  • ConfigurationValidator: required fields, providers, fallbacks (11 tests)
  • PasswordEncryptor: configure, encrypt/decrypt, no hardcoded key (16 tests)
  • BusinessHoursSettings: holiday parsing, edge cases (8 tests)
  • YamlConfigurationSource: ASP.NET Core integration, overrides (7 tests)
  • Configuration integration: app startup, health check (3 tests)
  • Build succeeds with 0 warnings

🤖 Generated with Claude Code

Migrate all hardcoded configuration, secrets, and environment-specific
values to external YAML files with ASP.NET Core IConfiguration integration.

- Add custom YAML configuration provider (YamlConfigurationSource/Provider)
- Add YamlConfigLoader for flat key-value YAML parsing with __ → : mapping
- Add ConfigurationValidator for startup validation of required settings
- Add config models: DatabaseSettings, BusinessHoursSettings, HealthCheckSettings, SwaggerSettings
- Remove hardcoded encryption key from PasswordEncryptor (now from config)
- Remove hardcoded holidays from BusinessHoursCalculator (now from config)
- Clean appsettings.json of all secrets and environment-specific values
- Delete appsettings.Development.json (contained encrypted passwords)
- Add OrderMonitor_ENV.yml master config template
- Add OrderMonitor_ENV.development.yml for local development
- Add OrderMonitor_ENV.secrets.yml.template for credentials reference
- Add docker-compose.yml for local dev with SQL Server
- Defer DB connection factory resolution for test compatibility
- Update integration test factory with config and no-op validator
- Add 64 new tests (176 unit + 38 integration = 214 total, all passing)

Closes BD-845, BD-849, BD-850, BD-851, BD-852, BD-853, BD-854, BD-855, BD-856, BD-857, BD-858

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Ranganathan-code-ops Ranganathan-code-ops force-pushed the feature/orch-001/BD-845-env-externalization branch from f92be42 to dcf428c Compare February 12, 2026 17:26
@Ranganathan-code-ops Ranganathan-code-ops changed the title [BD-845] Externalize all configuration via environment variables [BD-845] Externalize configuration to YAML files Feb 12, 2026
@Ranganathan-code-ops Ranganathan-code-ops merged commit 071212b into main Feb 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants