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.
		
		
		
		
		
			
		
			
				
					
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							6.5 KiB
						
					
					
				DiscoverView.vue Migration Documentation
Migration Start: 2025-07-08 12:11 UTC
Component: DiscoverView.vue
Priority: High (Critical User Journey)
Location: src/views/DiscoverView.vue
Pre-Migration Analysis
🔍 Current State Assessment
Database Operations
- Legacy Pattern: Uses 
databaseUtil.retrieveSettingsForActiveAccount()(line 396) - Legacy Pattern: Uses 
databaseUtil.mapQueryResultToValues()(line 405) - Direct PlatformService: Uses 
PlatformServiceFactory.getInstance()(line 403) - Raw SQL: Uses 
"SELECT * FROM contacts"(line 404) 
Notification Usage
- Direct $notify Calls: 3 instances found (lines 515, 607, 758)
 - Notification Types: danger, warning, success
 - Messages: Error handling, search results, loading status
 
Template Complexity
- Conditional Rendering: Multiple v-if/v-else conditions for tabs
 - Dynamic Content: Complex search results and map integration
 - User Interactions: Search functionality, map interactions, infinite scroll
 
📊 Migration Complexity Assessment
- Database Migration: Medium (2 database operations)
 - SQL Abstraction: Low (1 raw SQL query)
 - Notification Migration: Medium (3 notifications)
 - Template Streamlining: High (complex conditionals and interactions)
 
🎯 Migration Goals
- Replace 
databaseUtilcalls with PlatformServiceMixin methods - Abstract raw SQL with service methods
 - Extract all notification messages to constants
 - Replace 
$notify()calls with helper methods - Streamline template with computed properties
 
Migration Plan
Phase 1: Database Migration
// Replace databaseUtil.retrieveSettingsForActiveAccount()
const settings = await this.$accountSettings();
// Replace PlatformServiceFactory.getInstance() + raw SQL
const allContacts = await this.$getAllContacts();
// Replace databaseUtil.mapQueryResultToValues()
// This will be handled by the service method above
Phase 2: Notification Migration
// Extract to constants
NOTIFY_DISCOVER_SEARCH_ERROR
NOTIFY_DISCOVER_LOCAL_SEARCH_ERROR
NOTIFY_DISCOVER_MAP_SEARCH_ERROR
// Replace direct $notify calls with helper methods
this.notify.error(NOTIFY_DISCOVER_SEARCH_ERROR.message, TIMEOUTS.LONG);
Phase 3: Template Streamlining
// Extract complex conditional classes to computed properties
computedProjectsTabStyleClassNames()
computedPeopleTabStyleClassNames()
computedLocalTabStyleClassNames()
computedMappedTabStyleClassNames()
computedRemoteTabStyleClassNames()
Migration Implementation
Step 1: Add PlatformServiceMixin
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
@Component({
  components: {
    // ... existing components
  },
  mixins: [PlatformServiceMixin],
})
Step 2: Add Notification Infrastructure
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import {
  NOTIFY_DISCOVER_SEARCH_ERROR,
  NOTIFY_DISCOVER_LOCAL_SEARCH_ERROR,
  NOTIFY_DISCOVER_MAP_SEARCH_ERROR,
} from "@/constants/notifications";
// Add property
notify!: ReturnType<typeof createNotifyHelpers>;
// Initialize in created()
created() {
  this.notify = createNotifyHelpers(this.$notify);
}
Step 3: Replace Database Operations
// In mounted() method
const settings = await this.$accountSettings();
this.allContacts = await this.$getAllContacts();
Step 4: Replace Notification Calls
// Replace error notifications
this.notify.error(NOTIFY_DISCOVER_SEARCH_ERROR.message, TIMEOUTS.LONG);
this.notify.error(NOTIFY_DISCOVER_LOCAL_SEARCH_ERROR.message, TIMEOUTS.LONG);
this.notify.error(NOTIFY_DISCOVER_MAP_SEARCH_ERROR.message, TIMEOUTS.LONG);
Expected Outcomes
Technical Improvements
- ✅ All database operations use PlatformServiceMixin
 - ✅ No raw SQL queries in component
 - ✅ All notifications use helper methods and constants
 - ✅ Template logic streamlined with computed properties
 - ✅ Consistent error handling patterns
 
Functional Preservation
- ✅ Search functionality (local, mapped, anywhere) preserved
 - ✅ Map integration and tile loading preserved
 - ✅ Infinite scroll functionality preserved
 - ✅ Tab switching and state management preserved
 - ✅ Error handling and user feedback preserved
 
Performance Improvements
- ✅ Reduced database query complexity
 - ✅ Standardized notification patterns
 - ✅ Optimized template rendering
 - ✅ Better error handling efficiency
 
Testing Requirements
Functional Testing
- Search functionality works for all tabs (Projects, People)
 - Local search with location selection works
 - Mapped search with map integration works
 - Anywhere search with infinite scroll works
 - Error handling displays appropriate notifications
 - Tab switching preserves state correctly
 
Cross-Platform Testing
- Web browser functionality
 - Mobile app functionality (Capacitor)
 - Desktop app functionality (Electron)
 - PWA functionality
 
Error Scenario Testing
- Network connectivity issues
 - Invalid search parameters
 - Empty search results
 - Map loading failures
 - Database connection issues
 
Security Audit Checklist
SQL Injection Prevention
- No raw SQL queries in component
 - All database operations use parameterized queries
 - Input validation for search terms
 - Proper error handling without information disclosure
 
Data Privacy
- User search terms properly sanitized
 - Location data handled securely
 - Contact information access controlled
 - No sensitive data in error messages
 
Input Validation
- Search terms validated and sanitized
 - Map coordinates validated
 - URL parameters properly handled
 - File uploads (if any) validated
 
Migration Timeline
Estimated Duration: 25-35 minutes
- Phase 1 (Database): 8-10 minutes
 - Phase 2 (SQL): 3-5 minutes
 - Phase 3 (Notifications): 8-10 minutes
 - Phase 4 (Template): 6-10 minutes
 
Risk Assessment
- Functionality Risk: Low (search is well-contained)
 - Data Risk: Low (read-only operations)
 - User Impact: Low (feature is secondary to main workflow)
 
Dependencies
- PlatformServiceMixin availability
 - Notification constants in place
 - Map component integration preserved
 - Search API endpoints accessible
 
Author: Matthew Raymer
Date: 2025-07-08
Purpose: Document DiscoverView.vue migration to Enhanced Triple Migration Pattern