forked from jsnbuchanan/crowd-funder-for-time-pwa
Apply full database migration (databaseUtil → PlatformServiceMixin), replace raw SQL with service methods, migrate 3 notifications to helper methods. Preserve 1 complex modal for advanced routing features while extracting all literal strings to NOTIFY_CAMERA_SHARE_METHOD constant. Add computed properties (offerTabClasses, projectTabClasses) to streamline template logic and comprehensive JSDoc documentation for all methods. Update migration templates to mandate literal extraction from complex modals. ProjectsView.vue now appropriately incomplete: helper methods for simple notifications, raw $notify preserved only where advanced features required.
7.6 KiB
7.6 KiB
Complete Migration Checklist - MANDATORY STEPS
Overview
This checklist ensures NO migration steps are forgotten. Every component migration MUST complete ALL sections.
⚠️ CRITICAL: Triple Migration Pattern
🔑 The Complete Pattern (ALL 3 REQUIRED)
- Database Migration: Replace legacy
databaseUtilcalls withPlatformServiceMixinmethods - SQL Abstraction: Replace raw SQL queries with service methods
- Notification Migration: Replace
$notify()calls with helper methods + constants
❌ INCOMPLETE: Any migration missing one of these steps ✅ COMPLETE: All three patterns implemented
Pre-Migration Assessment
Date Time Context
- Always use system date command to establish accurate time context
- Use time log to track project progress
- Use historical time durations to improve estimates
[ ] 1. Identify Legacy Patterns
- Count
databaseUtilimports and calls - Count raw SQL queries (
SELECT,INSERT,UPDATE,DELETE) - Count
$notify()calls - Count
logConsoleAndDb()calls - Document total issues found
[ ] 2. Verify PlatformServiceMixin Setup
- Component already imports
PlatformServiceMixin - Component already has
mixins: [PlatformServiceMixin] - If missing, add mixin first
Phase 1: Database Migration
[ ] 3. Replace Database Utility Calls
- Remove
import * as databaseUtil from "../db/databaseUtil" - Replace
databaseUtil.retrieveSettingsForActiveAccount()→this.$accountSettings() - Replace
databaseUtil.mapQueryResultToValues()→this.$mapQueryResultToValues() - Replace other
databaseUtil.*calls with mixin equivalents
[ ] 4. Replace Logging Calls
- Remove
import { logConsoleAndDb } from "../db/index" - Replace
logConsoleAndDb()→this.$logAndConsole()
Phase 2: SQL Abstraction Migration
[ ] 5. Replace Raw Contact Operations
SELECT * FROM contacts WHERE did = ?→this.$getContact(did)DELETE FROM contacts WHERE did = ?→this.$deleteContact(did)UPDATE contacts SET x = ? WHERE did = ?→this.$updateContact(did, changes)INSERT INTO contacts→this.$insertContact(contact)
[ ] 6. Replace Other Raw SQL
SELECT * FROM settings→this.$accountSettings()UPDATE settings→this.$saveSettings(changes)- Generic queries → appropriate service methods
- NO RAW SQL ALLOWED: All database operations through service layer
Phase 3: Notification Migration
[ ] 7. Add Notification Infrastructure
- Add import:
import { createNotifyHelpers, TIMEOUTS } from "@/utils/notify" - Add property:
notify!: ReturnType<typeof createNotifyHelpers>; - Add initialization:
created() { this.notify = createNotifyHelpers(this.$notify); }
[ ] 8. Add Notification Constants (if needed)
- Review notification messages for reusable patterns
- Add constants to
src/constants/notifications.ts - Import constants:
import { NOTIFY_X, NOTIFY_Y } from "@/constants/notifications"
[ ] 9. Replace Notification Calls
- Warning:
this.$notify({type: "warning"})→this.notify.warning(CONSTANT.message, TIMEOUTS.LONG) - Error:
this.$notify({type: "danger"})→this.notify.error(CONSTANT.message, TIMEOUTS.LONG) - Success:
this.$notify({type: "success"})→this.notify.success(CONSTANT.message, TIMEOUTS.STANDARD) - Toast:
this.$notify({type: "toast"})→this.notify.toast(title, message, TIMEOUTS.SHORT) - Confirm:
this.$notify({type: "confirm"})→this.notify.confirm(message, onYes) - Standard patterns: Use
this.notify.confirmationSubmitted(),this.notify.sent(), etc.
[ ] 10. Constants vs Literal Strings
- Use constants for static, reusable messages
- Use literal strings for dynamic messages with variables
- Extract literals from complex modals - Even raw
$notifycalls should use constants for text - Document decision for each notification call
[ ] 11. Template Logic Streamlining
- Review template for repeated expressions or complex logic
- Move repeated function calls to computed properties
- Simplify complex conditional logic with computed properties
- Extract configuration objects to computed properties
- Document computed properties with JSDoc comments
- Use descriptive names for computed properties
Validation Phase
[ ] 12. Run Validation Script
- Execute:
scripts/validate-migration.sh - MUST show: "Technically Compliant" (not "Mixed Pattern")
- Zero legacy patterns detected
[ ] 13. Run Linting
- Execute:
npm run lint-fix - Zero errors introduced
- TypeScript compiles without errors
[ ] 14. Manual Code Review
- NO
databaseUtilimports or calls - NO raw SQL queries (
SELECT,INSERT,UPDATE,DELETE) - NO
$notify()calls with object syntax - NO
logConsoleAndDb()calls - ALL database operations through service methods
- ALL notifications through helper methods
Documentation Phase
[ ] 15. Update Migration Documentation
- Create
docs/migration-testing/[COMPONENT]_MIGRATION.md - Document all changes made
- Include before/after examples
- Note validation results
- Provide a guide to finding the components in the user interface
[ ] 16. Update Testing Tracker
- Update
docs/migration-testing/HUMAN_TESTING_TRACKER.md - Mark component as "Ready for Testing"
- Include notes about migration completed
Human Testing Phase
[ ] 17. Test All Functionality
- Core functionality works correctly
- Database operations function properly
- Notifications display correctly with proper timing
- Error scenarios handled gracefully
- Cross-platform compatibility (web/mobile)
[ ] 18. Confirm Testing Complete
- User confirms component works correctly
- Update testing tracker with results
- Mark as "Human Tested" in validation script
Final Validation
[ ] 19. Comprehensive Check
- Component shows as "Technically Compliant" in validation
- All manual testing passed
- Zero legacy patterns remain
- Documentation complete
- Ready for production
Wait for human confirmationb before proceeding to next file unless directly overidden.
🚨 FAILURE CONDITIONS
❌ INCOMPLETE MIGRATION if ANY of these remain:
databaseUtilimports or calls- Raw SQL queries (
SELECT,INSERT,UPDATE,DELETE) $notify()calls with object syntaxlogConsoleAndDb()calls- Missing notification helpers setup
- Validation script shows "Mixed Pattern"
🎯 SUCCESS CRITERIA
✅ COMPLETE MIGRATION requires ALL:
- Zero legacy patterns detected
- All database operations through service layer
- All notifications through helper methods
- Validation script shows "Technically Compliant"
- Manual testing passed
- Documentation complete
Templates and References
- Migration Template:
docs/migration-templates/component-migration.md - Notification Constants:
src/constants/notifications.ts - PlatformServiceMixin:
src/utils/PlatformServiceMixin.ts - Notification Helpers:
src/utils/notify.ts - Validation Script:
scripts/validate-migration.sh
⚠️ WARNING: This checklist exists because steps were previously forgotten. DO NOT skip any items. The triple migration pattern (Database + SQL + Notifications) is MANDATORY for all component migrations.
Author: Matthew Raymer
Date: 2024-07-07
Purpose: Prevent migration oversight by cementing ALL requirements