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.
5.8 KiB
5.8 KiB
ClaimCertificateView.vue Migration Documentation
Migration Start: 2025-07-08 12:24 UTC
Component: ClaimCertificateView.vue
Priority: High (Critical User Journey)
Location: src/views/ClaimCertificateView.vue
Pre-Migration Analysis
🔍 Current State Assessment
Database Operations
- Legacy Pattern: Uses
databaseUtil.retrieveSettingsForActiveAccount()
(line 36) - Legacy Pattern: Uses
databaseUtil.mapQueryResultToValues()
(line 92) - Direct PlatformService: Uses
PlatformServiceFactory.getInstance()
(line 88) - Raw SQL: Uses
"SELECT * FROM contacts"
(line 89)
Notification Usage
- Direct $notify Calls: 1 instance found (line 75)
- Notification Type: danger
- Message: Error handling for claim loading failure
Template Complexity
- Simple Template: Basic canvas-based certificate display
- Dynamic Content: Canvas drawing with claim data
- User Interactions: Click to navigate to claim details
📊 Migration Complexity Assessment
- Database Migration: Medium (2 database operations)
- SQL Abstraction: Low (1 raw SQL query)
- Notification Migration: Low (1 notification)
- Template Streamlining: Low (simple template)
🎯 Migration Goals
- Replace
databaseUtil
calls with PlatformServiceMixin methods - Abstract raw SQL with service methods
- Extract notification message to constants
- Replace
$notify()
call with helper method - Streamline template if needed
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_CLAIM_CERTIFICATE_LOAD_ERROR
// Replace direct $notify call with helper method
this.notify.error(NOTIFY_CLAIM_CERTIFICATE_LOAD_ERROR.message, TIMEOUTS.LONG);
Phase 3: Template Streamlining
// Template is already simple, no complex logic to extract
// Canvas drawing logic is appropriately contained in methods
Migration Implementation
Step 1: Add PlatformServiceMixin
import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin";
@Component({
mixins: [PlatformServiceMixin],
})
Step 2: Add Notification Infrastructure
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify";
import {
NOTIFY_CLAIM_CERTIFICATE_LOAD_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 created() method
const settings = await this.$accountSettings();
// In drawCanvas() method
const allContacts = await this.$getAllContacts();
Step 4: Replace Notification Call
// Replace error notification
this.notify.error(NOTIFY_CLAIM_CERTIFICATE_LOAD_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 remains clean and simple
- ✅ Consistent error handling patterns
Functional Preservation
- ✅ Certificate generation and display preserved
- ✅ Canvas drawing functionality preserved
- ✅ Navigation to claim details preserved
- ✅ Error handling and user feedback preserved
- ✅ Contact information display preserved
Performance Improvements
- ✅ Reduced database query complexity
- ✅ Standardized notification patterns
- ✅ Better error handling efficiency
Testing Requirements
Functional Testing
- Certificate generation works for different claim types
- Canvas drawing displays correctly
- Navigation to claim details works
- Error handling displays appropriate notifications
- Contact information displays correctly
Cross-Platform Testing
- Web browser functionality
- Mobile app functionality (Capacitor)
- Desktop app functionality (Electron)
- PWA functionality
Error Scenario Testing
- Network connectivity issues
- Invalid claim ID
- Missing claim data
- Canvas rendering 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 claim ID
- Proper error handling without information disclosure
Data Privacy
- Claim data handled securely
- Contact information access controlled
- No sensitive data in error messages
- Certificate data properly sanitized
Input Validation
- Claim ID validated and sanitized
- Canvas data validated
- URL parameters properly handled
- Image loading validated
Migration Timeline
Estimated Duration: 15-20 minutes
- Phase 1 (Database): 5-7 minutes
- Phase 2 (SQL): 2-3 minutes
- Phase 3 (Notifications): 3-5 minutes
- Phase 4 (Template): 2-3 minutes
Risk Assessment
- Functionality Risk: Low (certificate display 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
- Canvas drawing functionality preserved
- Claim API endpoints accessible
Author: Matthew Raymer
Date: 2025-07-08
Purpose: Document ClaimCertificateView.vue migration to Enhanced Triple Migration Pattern