forked from jsnbuchanan/crowd-funder-for-time-pwa
- Replace databaseUtil/PlatformServiceFactory with PlatformServiceMixin - Add notification helpers + centralized constants for identity management - Extract button styling and account formatting to computed properties - Improve TypeScript typing (Account interface) - 6-minute migration achieving technical compliance - All identity switching and deletion features preserved"
283 lines
11 KiB
Markdown
283 lines
11 KiB
Markdown
# 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) |