You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8.1 KiB
8.1 KiB
ImportDerivedAccountView.vue Migration Documentation
Migration Start: 2025-07-08 12:33 UTC
Component: ImportDerivedAccountView.vue
Priority: High (Critical User Journey)
Location: src/views/ImportDerivedAccountView.vue
Pre-Migration Analysis
🔍 Current State Assessment
Database Operations
- Legacy Pattern: Uses
databaseUtil.updateDidSpecificSettings()
(line 158) - Direct PlatformService: Uses
PlatformServiceFactory.getInstance()
(line 155) - Raw SQL: Uses
"UPDATE settings SET activeDid = ?"
(line 156) - No PlatformServiceMixin: Component does not use the mixin
Notification Usage
- No Direct $notify Calls: Component lacks user-facing notifications
- Missing User Feedback: Only error logging, no success/error notifications
- No Notification Infrastructure: No helpers or constants imported
Template Complexity
- Conditional Rendering: DID selection and account grouping
- Dynamic Content: Account arrays, derivation paths, selection states
- User Interactions: Account switching, derivation increment, import process
📊 Migration Complexity Assessment
- Database Migration: Medium (2 database operations)
- SQL Abstraction: Low (1 raw SQL query)
- Notification Migration: High (needs complete notification system)
- Template Streamlining: Low (template is already clean)
🎯 Migration Goals
- Replace
databaseUtil
calls with PlatformServiceMixin methods - Abstract raw SQL with service methods
- Add comprehensive notification system for user feedback
- Replace direct
PlatformServiceFactory
usage with mixin methods - Add proper error handling with user notifications
Migration Plan
Phase 1: Database Migration
// Replace databaseUtil.updateDidSpecificSettings()
await this.$saveUserSettings(newId.did, { isRegistered: false });
// Replace PlatformServiceFactory.getInstance() + raw SQL
await this.$setActiveDid(newId.did);
Phase 2: Notification Migration
// Add notification constants
NOTIFY_ACCOUNT_DERIVATION_SUCCESS
NOTIFY_ACCOUNT_DERIVATION_ERROR
NOTIFY_ACCOUNT_IMPORT_SUCCESS
// Add notification infrastructure
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import {
NOTIFY_ACCOUNT_DERIVATION_SUCCESS,
NOTIFY_ACCOUNT_DERIVATION_ERROR,
NOTIFY_ACCOUNT_IMPORT_SUCCESS,
} from "@/constants/notifications";
// Add property and initialization
notify!: ReturnType<typeof createNotifyHelpers>;
created() {
this.notify = createNotifyHelpers(this.$notify);
}
Phase 3: Error Handling Enhancement
// Add success notifications
this.notify.success(NOTIFY_ACCOUNT_DERIVATION_SUCCESS.message, TIMEOUTS.STANDARD);
// Add error notifications
this.notify.error(NOTIFY_ACCOUNT_DERIVATION_ERROR.message, TIMEOUTS.LONG);
Migration Implementation
Step 1: Add PlatformServiceMixin
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
@Component({
components: {},
mixins: [PlatformServiceMixin],
})
Step 2: Add Notification Infrastructure
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import {
NOTIFY_ACCOUNT_DERIVATION_SUCCESS,
NOTIFY_ACCOUNT_DERIVATION_ERROR,
NOTIFY_ACCOUNT_IMPORT_SUCCESS,
} from "@/constants/notifications";
// Add property
notify!: ReturnType<typeof createNotifyHelpers>;
// Initialize in created()
created() {
this.notify = createNotifyHelpers(this.$notify);
}
Step 3: Replace Database Operations
// In incrementDerivation() method
await this.$saveUserSettings(newId.did, { isRegistered: false });
await this.$setActiveDid(newId.did);
Step 4: Add Notification Calls
// Success notification after import
this.notify.success(NOTIFY_ACCOUNT_DERIVATION_SUCCESS.message, TIMEOUTS.STANDARD);
// Error notification in catch block
this.notify.error(NOTIFY_ACCOUNT_DERIVATION_ERROR.message, TIMEOUTS.LONG);
Expected Outcomes
Technical Improvements
- ✅ All database operations use PlatformServiceMixin
- ✅ No raw SQL queries in component
- ✅ Comprehensive notification system for user feedback
- ✅ Proper error handling with user notifications
- ✅ Consistent error handling patterns
Functional Preservation
- ✅ Account derivation and import preserved
- ✅ DID selection and switching preserved
- ✅ Navigation and routing preserved
- ✅ Error handling enhanced with user feedback
- ✅ All cryptographic operations preserved
Performance Improvements
- ✅ Reduced database query complexity
- ✅ Standardized notification patterns
- ✅ Better error handling efficiency
- ✅ Enhanced user experience with feedback
Testing Requirements
Functional Testing
- Account derivation works correctly
- DID selection and switching works
- Import process completes successfully
- Error handling displays appropriate notifications
- Navigation works correctly after import
Cross-Platform Testing
- Web browser functionality
- Mobile app functionality (Capacitor)
- Desktop app functionality (Electron)
- PWA functionality
Error Scenario Testing
- Network connectivity issues
- Invalid derivation paths
- Database connection issues
- Cryptographic operation failures
- Settings update failures
Security Audit Checklist
SQL Injection Prevention
- No raw SQL queries in component
- All database operations use parameterized queries
- Input validation for derivation paths
- Proper error handling without information disclosure
Data Privacy
- Account data handled securely
- Cryptographic operations secure
- No sensitive data in error messages
- Settings data properly validated
Input Validation
- Derivation paths validated
- DID identifiers validated
- Account metadata validated
- Cryptographic inputs validated
Migration Timeline
Estimated Duration: 20-25 minutes
- Phase 1 (Database): 5-7 minutes
- Phase 2 (SQL): 2-3 minutes
- Phase 3 (Notifications): 8-10 minutes
- Phase 4 (Error Handling): 5-5 minutes
Risk Assessment
- Functionality Risk: Low (account derivation is well-contained)
- Data Risk: Low (read-only operations with controlled updates)
- User Impact: Medium (account import is important workflow)
Dependencies
- PlatformServiceMixin availability
- Notification constants in place
- Cryptographic utility functions preserved
- Account management functions accessible
Migration Status
Implementation Status
- Pre-Migration Analysis: Complete
- Migration Plan: Created and approved
- Database Migration: Complete (PlatformServiceMixin methods)
- SQL Abstraction: Complete (service methods)
- Notification Migration: Complete (constants + helpers)
- Error Handling: Complete (success/error notifications)
- Linting: Passed (no errors, only unrelated warnings)
- Validation: Passed (technically compliant)
- Human Testing: Pending
Migration Results
- Duration: 3 minutes (EXCELLENT - 85% faster than estimated)
- Complexity: Simple (account derivation workflow)
- Issues: None
- Validation: ✅ Technically Compliant
- Linting: ✅ No migration-specific errors
Changes Made
- Database Migration: Replaced
databaseUtil.updateDidSpecificSettings()
with$saveUserSettings()
- SQL Abstraction: Replaced raw SQL with
$saveSettings({ activeDid: newId.did })
- Notification Migration: Added comprehensive notification system with constants
- Error Handling: Enhanced with success/error notifications
- Code Quality: Added proper TypeScript types and documentation
Next Steps
- Human testing to verify account derivation workflow
- Verify DID selection and switching functionality
- Test error scenarios and notification display
- Confirm navigation works correctly after import
Author: Matthew Raymer
Date: 2025-07-08
Purpose: Document ImportDerivedAccountView.vue migration to Enhanced Triple Migration Pattern