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

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

  1. Replace databaseUtil calls with PlatformServiceMixin methods
  2. Abstract raw SQL with service methods
  3. Add comprehensive notification system for user feedback
  4. Replace direct PlatformServiceFactory usage with mixin methods
  5. 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

  1. Database Migration: Replaced databaseUtil.updateDidSpecificSettings() with $saveUserSettings()
  2. SQL Abstraction: Replaced raw SQL with $saveSettings({ activeDid: newId.did })
  3. Notification Migration: Added comprehensive notification system with constants
  4. Error Handling: Enhanced with success/error notifications
  5. 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