feat(port): add ConfigMigrator interface for config migration
- commit
- 607f4adeef4f57569bf0b04298e87e4a0570564e
- author
- bnema · · 2025-12-27 18:47 UTC
- parent
- 495ecb8
- signature
- GPG Unverified
2B82207D370127A0The key is unknown
1 file · +33 -0
A internal/application/port/config_migrator.go +33 -0
| @@ -0,0 +1,33 @@ | |||
| 1 | + | package port | |
| 2 | + | ||
| 3 | + | // MigrationResult contains the result of a config migration check. | |
| 4 | + | type MigrationResult struct { | |
| 5 | + | // MissingKeys contains the keys that exist in defaults but not in user config. | |
| 6 | + | MissingKeys []string | |
| 7 | + | // ConfigFile is the path to the user's config file. | |
| 8 | + | ConfigFile string | |
| 9 | + | } | |
| 10 | + | ||
| 11 | + | // KeyInfo contains metadata about a config key for display purposes. | |
| 12 | + | type KeyInfo struct { | |
| 13 | + | // Key is the dot-notation key path (e.g., "update.enable_on_startup"). | |
| 14 | + | Key string | |
| 15 | + | // Type is the Go type of the value (e.g., "bool", "int", "string"). | |
| 16 | + | Type string | |
| 17 | + | // DefaultValue is a string representation of the default value. | |
| 18 | + | DefaultValue string | |
| 19 | + | } | |
| 20 | + | ||
| 21 | + | // ConfigMigrator checks for and applies config migrations. | |
| 22 | + | type ConfigMigrator interface { | |
| 23 | + | // CheckMigration checks if user config is missing any default keys. | |
| 24 | + | // Returns nil if no migration is needed (config file doesn't exist or is complete). | |
| 25 | + | CheckMigration() (*MigrationResult, error) | |
| 26 | + | ||
| 27 | + | // Migrate adds missing default keys to the user's config file. | |
| 28 | + | // Returns the list of keys that were added. | |
| 29 | + | Migrate() ([]string, error) | |
| 30 | + | ||
| 31 | + | // GetKeyInfo returns detailed information about a config key. | |
| 32 | + | GetKeyInfo(key string) KeyInfo | |
| 33 | + | } | |
| @@ -0,0 +1,33 @@ | |||||
| 1 | + | package port | |||
| 2 | + | ||||
| 3 | + | // MigrationResult contains the result of a config migration check. | |||
| 4 | + | type MigrationResult struct { | |||
| 5 | + | // MissingKeys contains the keys that exist in defaults but not in user config. | |||
| 6 | + | MissingKeys []string | |||
| 7 | + | // ConfigFile is the path to the user's config file. | |||
| 8 | + | ConfigFile string | |||
| 9 | + | } | |||
| 10 | + | ||||
| 11 | + | // KeyInfo contains metadata about a config key for display purposes. | |||
| 12 | + | type KeyInfo struct { | |||
| 13 | + | // Key is the dot-notation key path (e.g., "update.enable_on_startup"). | |||
| 14 | + | Key string | |||
| 15 | + | // Type is the Go type of the value (e.g., "bool", "int", "string"). | |||
| 16 | + | Type string | |||
| 17 | + | // DefaultValue is a string representation of the default value. | |||
| 18 | + | DefaultValue string | |||
| 19 | + | } | |||
| 20 | + | ||||
| 21 | + | // ConfigMigrator checks for and applies config migrations. | |||
| 22 | + | type ConfigMigrator interface { | |||
| 23 | + | // CheckMigration checks if user config is missing any default keys. | |||
| 24 | + | // Returns nil if no migration is needed (config file doesn't exist or is complete). | |||
| 25 | + | CheckMigration() (*MigrationResult, error) | |||
| 26 | + | ||||
| 27 | + | // Migrate adds missing default keys to the user's config file. | |||
| 28 | + | // Returns the list of keys that were added. | |||
| 29 | + | Migrate() ([]string, error) | |||
| 30 | + | ||||
| 31 | + | // GetKeyInfo returns detailed information about a config key. | |||
| 32 | + | GetKeyInfo(key string) KeyInfo | |||
| 33 | + | } | |||