# Settings Partial Save Feature ## Overview The settings system now implements partial save functionality to prevent unintended overwrites of configuration values. ## How It Works 1. **Field Whitelist**: Only fields exposed in the UI can be modified 2. **Deep Merge**: Updates are merged with existing config, preserving unmodified fields 3. **Backup & Rollback**: Config is backed up before save; failures trigger automatic rollback ## Editable Fields Currently editable via UI: - `erp.url` - ERP system URL - `erp.username` - ERP login username - `erp.password` - ERP login password ## Adding New Editable Fields To add a new field to the UI: 1. Add field to whitelist in `src/main/services/config/config-manager.ts`: ```typescript const UI_EDITABLE_FIELDS: string[] = [ 'erp.url', 'erp.username', 'erp.password', 'database.dbType' // Add new field here ] ``` 2. Add UI input in `src/renderer/src/pages/SettingsPage.tsx` 3. Update `handleSaveSettings` to include the new field ## API ### savePartialSettings(settings: Partial) Saves only the provided fields, preserving all existing configuration. **Returns:** `{ success: boolean, error?: string }` **Validation:** - Checks whitelist before applying changes - Returns error for unauthorized fields ## Error Handling - **Unauthorized field**: Returns error message listing invalid fields - **Save failure**: Automatically restores from backup - **Backup failure**: Logs warning, continues with save ## Backup File Location: `.env.backup` (in project root) Created before every save operation. Used for rollback on failure.