# Research: Migration Process and UI Redesign ## Decision: Fuzzy Matching Algorithm - **Choice**: `RapidFuzz` library with `fuzz.token_sort_ratio`. - **Rationale**: `RapidFuzz` is significantly faster than `FuzzyWuzzy` and provides robust string similarity metrics. `token_sort_ratio` is ideal for database names because it ignores word order and is less sensitive to prefixes like "Dev-" or "Prod-". - **Alternatives considered**: - `Levenshtein`: Too sensitive to string length and prefixes. - `Jaro-Winkler`: Good for short strings but less effective for multi-word names with different orders. ## Decision: Asset Interception Strategy - **Choice**: ZIP-based transformation during migration. - **Rationale**: Superset's native export/import format is a ZIP archive containing YAML definitions. Intercepting this archive allows for precise modification of database references (UUIDs) before they reach the target environment. - **Implementation**: 1. Export dashboard/dataset from source (ZIP). 2. Extract ZIP to a temporary directory. 3. Iterate through `datasets/*.yaml` files. 4. Replace `database_uuid` values based on the mapping table. 5. Re-package the ZIP. 6. Import to target. ## Decision: Database Mapping Persistence - **Choice**: SQLite with SQLAlchemy/SQLModel. - **Rationale**: SQLite is lightweight, requires no separate server, and is perfect for storing local configuration and mappings. It aligns with the project's existing stack. - **Schema**: - `Environment`: `id`, `name`, `url`, `credentials_id`. - `DatabaseMapping`: `id`, `source_env_id`, `target_env_id`, `source_db_uuid`, `target_db_uuid`, `source_db_name`, `target_db_name`. ## Decision: Superset API Integration - **Choice**: Extend existing `SupersetClient`. - **Rationale**: `SupersetClient` already handles authentication, network requests, and basic CRUD for dashboards/datasets. Adding environment-specific fetching and database listing is a natural extension. - **New Endpoints to use**: - `GET /api/v1/database/`: List all databases. - `GET /api/v1/database/{id}`: Get detailed database config.