# Pre-Migration Feature Audit - IdentitySwitcherView.vue

## Component Information
- **Component Name**: IdentitySwitcherView.vue
- **Location**: `src/views/IdentitySwitcherView.vue`
- **Total Lines**: 196 lines
- **Audit Date**: 2025-01-08
- **Auditor**: Matthew Raymer

## 📊 Migration Scope Analysis

### Database Operations Audit
- [x] **Total Database Operations**: 3 operations
- [x] **Legacy databaseUtil imports**: 1 import
- [x] **PlatformServiceFactory calls**: 1 call
- [x] **Raw SQL queries**: 1 query (DELETE)

### Notification Operations Audit
- [x] **Total Notification Calls**: 3 calls
- [x] **Direct $notify calls**: 3 calls
- [x] **Legacy notification patterns**: 3 patterns

### Template Complexity Audit
- [x] **Complex template expressions**: 2 expressions
- [x] **Repeated CSS classes**: 2 repetitions
- [x] **Configuration objects**: 2 objects

## 🔍 Feature-by-Feature Audit

### 1. Database Features

#### Feature: Load Active Account Settings
- **Location**: Lines 119-121
- **Type**: Settings retrieval
- **Current Implementation**: 
  ```typescript
  const settings = await databaseUtil.retrieveSettingsForActiveAccount();
  this.activeDid = settings.activeDid || "";
  this.apiServer = settings.apiServer || "";
  ```
- **Migration Target**: `this.$accountSettings()`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Update Active DID Setting
- **Location**: Lines 140-141
- **Type**: Settings update
- **Current Implementation**: 
  ```typescript
  await databaseUtil.updateDefaultSettings({ activeDid: did });
  this.$router.push({ name: "account" });
  ```
- **Migration Target**: `this.$saveSettings()`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Delete Account
- **Location**: Lines 149-152
- **Type**: DELETE query
- **Current Implementation**: 
  ```typescript
  const platformService = PlatformServiceFactory.getInstance();
  await platformService.dbExec(`DELETE FROM accounts WHERE id = ?`, [id]);
  ```
- **Migration Target**: `this.$exec()` or specialized account deletion method
- **Verification**: [ ] Functionality preserved after migration

### 2. Notification Features

#### Feature: Error Loading Accounts
- **Location**: Lines 130-137
- **Type**: Danger notification
- **Current Implementation**:
  ```typescript
  this.$notify({
    group: "alert",
    type: "danger",
    title: "Error Loading Accounts",
    text: "Clear your cache and start over (after data backup).",
  }, 5000);
  ```
- **Migration Target**: `this.notify.error(CONSTANT.message, TIMEOUTS.LONG)`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Delete Confirmation Modal
- **Location**: Lines 143-157
- **Type**: Confirmation modal with callback
- **Current Implementation**:
  ```typescript
  this.$notify({
    group: "modal",
    type: "confirm",
    title: "Delete Identity?",
    text: "Are you sure you want to erase this identity?...",
    onYes: async () => { /* delete logic */ }
  }, -1);
  ```
- **Migration Target**: `this.notify.confirm()` or keep as direct `$notify` (complex modal)
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Cannot Delete Warning
- **Location**: Lines 160-169
- **Type**: Warning notification
- **Current Implementation**:
  ```typescript
  this.$notify({
    group: "alert", 
    type: "warning",
    title: "Cannot Delete",
    text: "You cannot delete the active identity. Set to another identity or 'no identity' first.",
  }, 3000);
  ```
- **Migration Target**: `this.notify.warning(CONSTANT.message, TIMEOUTS.SHORT)`
- **Verification**: [ ] Functionality preserved after migration

### 3. Template Features

#### Feature: Repeated Button Styling - Primary
- **Location**: Lines 75-81
- **Type**: Primary button CSS classes
- **Current Implementation**:
  ```vue
  class="block text-center text-lg font-bold uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-3 rounded-md mb-2"
  ```
- **Migration Target**: Extract to computed property `primaryButtonClasses`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Repeated Button Styling - Secondary
- **Location**: Lines 82-87
- **Type**: Secondary button CSS classes
- **Current Implementation**:
  ```vue
  class="block w-full text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-8"
  ```
- **Migration Target**: Extract to computed property `secondaryButtonClasses`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Identity List Item Classes
- **Location**: Lines 42-44
- **Type**: Repeated list item styling
- **Current Implementation**:
  ```vue
  class="flex flex-grow items-center bg-slate-100 rounded-md px-4 py-3 mb-2 truncate cursor-pointer"
  ```
- **Migration Target**: Extract to computed property `identityListItemClasses`
- **Verification**: [ ] Functionality preserved after migration

#### Feature: Account Display Logic
- **Location**: Lines 126-127
- **Type**: Complex data processing
- **Current Implementation**:
  ```typescript
  this.otherIdentities.push({
    id: (acct.id ?? 0).toString(),
    did: acct.did,
  });
  ```
- **Migration Target**: Extract to helper method `formatAccountForDisplay()`
- **Verification**: [ ] Functionality preserved after migration

## 🎯 Migration Checklist Totals

### Database Migration Requirements
- [x] **Replace databaseUtil imports**: 1 import → PlatformServiceMixin
- [x] **Replace PlatformServiceFactory calls**: 1 call → mixin methods
- [x] **Replace raw SQL queries**: 1 query → service methods
- [x] **Update error handling**: 0 patterns → mixin error handling

### Notification Migration Requirements
- [x] **Add notification helpers**: Import createNotifyHelpers
- [x] **Replace direct $notify calls**: 2 simple calls → helper methods
- [x] **Add notification constants**: 2 constants → src/constants/notifications.ts
- [x] **Update notification patterns**: 1 complex modal may remain direct $notify

### Template Streamlining Requirements
- [x] **Extract repeated classes**: 3 repetitions → computed properties
- [x] **Extract complex expressions**: 1 expression → helper method
- [x] **Extract configuration objects**: 0 objects → Not needed
- [x] **Simplify template logic**: 3 patterns → methods/computed

## 📋 Post-Migration Verification Checklist

### ✅ Database Functionality Verification
- [ ] Settings loading works correctly
- [ ] Active DID switching functions properly
- [ ] Account deletion works and updates list
- [ ] Error handling functions for database failures

### ✅ Notification Functionality Verification
- [ ] Error notifications display correctly for account loading failures
- [ ] Delete confirmation modal works with proper callback
- [ ] Warning notifications show for invalid delete attempts
- [ ] All notification timing works as expected

### ✅ Template Functionality Verification
- [ ] Identity list renders correctly with consistent styling
- [ ] Button styling is consistent and responsive
- [ ] Identity switching (click handlers) work properly
- [ ] Active identity highlighting functions correctly
- [ ] Trash can icons and actions work properly
- [ ] Router navigation to start page works

### ✅ Integration Verification
- [ ] Component loads identity data properly on mount
- [ ] Identity switching updates global state correctly
- [ ] Router navigation back to account page works
- [ ] Data corruption warning displays when appropriate

## 🚀 Migration Readiness Assessment

### Pre-Migration Requirements
- [x] **Feature audit completed**: All features documented with line numbers
- [x] **Migration targets identified**: Each feature has clear migration path
- [x] **Test scenarios planned**: Verification steps documented
- [ ] **Backup created**: Original component backed up

### Complexity Assessment
- [ ] **Simple** (15-20 min): Few database operations, minimal notifications
- [x] **Medium** (20-30 min): Multiple database operations, several notifications
- [ ] **Complex** (45-60 min): Extensive database usage, many notifications, complex templates

### Dependencies Assessment
- [x] **No blocking dependencies**: Component can be migrated independently
- [x] **Parent dependencies identified**: Used from account settings flow
- [x] **Child dependencies identified**: Navigates to account and start routes

## 📝 Notes and Special Considerations

### Special Migration Considerations
1. **Account Metadata Loading**: Uses `retrieveAllAccountsMetadata()` utility function
2. **Settings Integration**: Manages global activeDid setting
3. **Delete Confirmation**: Complex modal with callback function
4. **Router Integration**: Multiple navigation targets (account, start)
5. **Data Corruption Handling**: Special UI state for corrupted identity data

### Risk Assessment
- **Medium Risk**: Multiple database operations and notification patterns
- **Main Risk**: Identity switching logic must work correctly after migration
- **Mitigation**: Thorough testing of identity switch and delete functionality

### Testing Strategy
1. **Manual Testing**: Test identity switching, deletion, and navigation
2. **Database Testing**: Verify settings updates and account deletion
3. **Notification Testing**: Test all three notification scenarios
4. **Edge Cases**: Test with zero identities, single identity, corrupted data

## 🔧 Specific Migration Steps

### Database Migration Steps
1. Add PlatformServiceMixin to component
2. Replace `databaseUtil.retrieveSettingsForActiveAccount()` with `this.$accountSettings()`
3. Replace `databaseUtil.updateDefaultSettings()` with `this.$saveSettings()`
4. Replace `PlatformServiceFactory.getInstance().dbExec()` with `this.$exec()`
5. Remove legacy database imports

### Notification Migration Steps
1. Add notification helpers and constants imports
2. Replace error notification with `this.notify.error()`
3. Replace warning notification with `this.notify.warning()`
4. Keep complex delete confirmation as direct `$notify()` (has callback)
5. Add constants to `src/constants/notifications.ts`

### Template Streamlining Steps
1. Extract primary button classes to computed property
2. Extract secondary button classes to computed property
3. Extract identity list item classes to computed property
4. Extract account formatting logic to helper method
5. Add JSDoc comments for all computed properties

### Verification Steps
1. Test identity list loading and display
2. Test identity switching (active DID changes)
3. Test account deletion with confirmation
4. Test navigation between account/start pages
5. Test error scenarios (loading failures)

---

**Estimated Migration Time**: 20-30 minutes
**Complexity Level**: Medium
**Ready for Migration**: ✅ Yes
**Template Version**: 1.0
**Created**: 2025-01-08
**Author**: Matthew Raymer
**Status**: ✅ **MIGRATION COMPLETE** (Completed 2025-01-08 in 6 minutes) 