forked from trent_larson/crowd-funder-for-time-pwa
- Removed all vestigial Dexie/USE_DEXIE_DB references from code and docs - Centralized DB logic in PlatformServiceMixin; resolved logger/databaseUtil circular dependency - Modularized SQL helpers (`$generateInsertStatement`, `$generateUpdateStatement`) and added unit tests - Created/updated migration tracking docs and helper script for cross-machine progress - Confirmed all lint/type checks and tests pass; ready for systematic file migration
267 lines
7.2 KiB
Bash
Executable File
267 lines
7.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Migration Helper Script for TimeSafari PlatformServiceMixin Migration
|
||
# This script helps track and automate the migration from databaseUtil to PlatformServiceMixin
|
||
|
||
set -e
|
||
|
||
echo "🔄 TimeSafari Migration Helper"
|
||
echo "================================"
|
||
|
||
# Colors for output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Function to print colored output
|
||
print_status() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
print_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
# Check if we're in the right directory
|
||
if [ ! -f "package.json" ]; then
|
||
print_error "Please run this script from the project root directory"
|
||
exit 1
|
||
fi
|
||
|
||
# Function to count remaining databaseUtil imports
|
||
count_remaining_imports() {
|
||
local count=$(find src -name "*.vue" -o -name "*.ts" | xargs grep -l "import.*databaseUtil" | wc -l)
|
||
echo $count
|
||
}
|
||
|
||
# Function to show files with databaseUtil imports
|
||
show_remaining_files() {
|
||
echo "📋 Files still importing databaseUtil:"
|
||
echo "----------------------------------------"
|
||
find src -name "*.vue" -o -name "*.ts" | xargs grep -l "import.*databaseUtil" | sort
|
||
echo ""
|
||
}
|
||
|
||
# Function to show migration progress
|
||
show_progress() {
|
||
local total_files=52 # Total files that need migration
|
||
local remaining=$(count_remaining_imports)
|
||
local migrated=$((total_files - remaining))
|
||
local percentage=$((migrated * 100 / total_files))
|
||
|
||
echo "📊 Migration Progress"
|
||
echo "===================="
|
||
echo "Total files to migrate: $total_files"
|
||
echo "Files migrated: $migrated"
|
||
echo "Files remaining: $remaining"
|
||
echo "Progress: $percentage%"
|
||
echo ""
|
||
|
||
# Progress bar
|
||
local filled=$((percentage / 2))
|
||
local empty=$((50 - filled))
|
||
printf "["
|
||
for ((i=0; i<filled; i++)); do printf "█"; done
|
||
for ((i=0; i<empty; i++)); do printf "░"; done
|
||
printf "] $percentage%%\n\n"
|
||
}
|
||
|
||
# Function to show common replacement patterns
|
||
show_replacement_patterns() {
|
||
echo "🔄 Common Replacement Patterns"
|
||
echo "=============================="
|
||
echo "generateInsertStatement → this.\$generateInsertStatement"
|
||
echo "generateUpdateStatement → this.\$generateUpdateStatement"
|
||
echo "parseJsonField → this._parseJsonField"
|
||
echo "mapColumnsToValues → this._mapColumnsToValues"
|
||
echo "logToDb → this.\$log"
|
||
echo "logConsoleAndDb → this.\$logAndConsole"
|
||
echo "memoryLogs → this.\$memoryLogs"
|
||
echo ""
|
||
}
|
||
|
||
# Function to show migration template
|
||
show_migration_template() {
|
||
echo "📝 Migration Template for Vue Components"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "1. Add PlatformServiceMixin import:"
|
||
echo " import { PlatformServiceMixin } from '@/utils/PlatformServiceMixin';"
|
||
echo ""
|
||
echo "2. Add mixin to component:"
|
||
echo " export default class ComponentName extends Vue {"
|
||
echo " mixins = [PlatformServiceMixin];"
|
||
echo " // ... rest of component"
|
||
echo " }"
|
||
echo ""
|
||
echo "3. Replace databaseUtil imports:"
|
||
echo " // Remove: import { ... } from '@/db/databaseUtil';"
|
||
echo " // Use mixin methods instead"
|
||
echo ""
|
||
echo "4. Update method calls:"
|
||
echo " // Before: generateInsertStatement(contact, 'contacts')"
|
||
echo " // After: this.\$generateInsertStatement(contact, 'contacts')"
|
||
echo ""
|
||
}
|
||
|
||
# Function to validate migration
|
||
validate_migration() {
|
||
echo "🔍 Validating Migration"
|
||
echo "======================"
|
||
|
||
# Check for remaining databaseUtil imports
|
||
local remaining=$(count_remaining_imports)
|
||
if [ $remaining -eq 0 ]; then
|
||
print_status "No databaseUtil imports found!"
|
||
else
|
||
print_warning "Found $remaining files still importing databaseUtil"
|
||
show_remaining_files
|
||
fi
|
||
|
||
# Run linting
|
||
echo "Running linting..."
|
||
if npm run lint > /dev/null 2>&1; then
|
||
print_status "Linting passed"
|
||
else
|
||
print_error "Linting failed - check output above"
|
||
fi
|
||
|
||
# Run type checking
|
||
echo "Running type checking..."
|
||
if npx tsc --noEmit > /dev/null 2>&1; then
|
||
print_status "TypeScript compilation passed"
|
||
else
|
||
print_error "TypeScript compilation failed - check output above"
|
||
fi
|
||
|
||
echo ""
|
||
}
|
||
|
||
# Function to show next steps
|
||
show_next_steps() {
|
||
echo "🎯 Next Steps"
|
||
echo "============="
|
||
echo ""
|
||
|
||
local remaining=$(count_remaining_imports)
|
||
|
||
if [ $remaining -eq 0 ]; then
|
||
print_status "Migration complete! All files have been migrated."
|
||
echo ""
|
||
echo "Next actions:"
|
||
echo "1. Run full test suite"
|
||
echo "2. Test on all platforms (Web, Mobile, Desktop)"
|
||
echo "3. Update documentation"
|
||
echo "4. Remove databaseUtil file (if no longer needed)"
|
||
else
|
||
echo "Priority order for remaining $remaining files:"
|
||
echo "1. Views (user-facing components)"
|
||
echo "2. Components (reusable UI components)"
|
||
echo "3. Services (business logic)"
|
||
echo "4. Utils (utility functions)"
|
||
echo ""
|
||
echo "Use the migration template above for each file."
|
||
fi
|
||
|
||
echo ""
|
||
}
|
||
|
||
# Main menu
|
||
show_menu() {
|
||
echo "Choose an option:"
|
||
echo "1. Show migration progress"
|
||
echo "2. Show remaining files"
|
||
echo "3. Show replacement patterns"
|
||
echo "4. Show migration template"
|
||
echo "5. Validate migration"
|
||
echo "6. Show next steps"
|
||
echo "7. Run all checks"
|
||
echo "8. Exit"
|
||
echo ""
|
||
read -p "Enter your choice (1-8): " choice
|
||
|
||
case $choice in
|
||
1)
|
||
show_progress
|
||
;;
|
||
2)
|
||
show_remaining_files
|
||
;;
|
||
3)
|
||
show_replacement_patterns
|
||
;;
|
||
4)
|
||
show_migration_template
|
||
;;
|
||
5)
|
||
validate_migration
|
||
;;
|
||
6)
|
||
show_next_steps
|
||
;;
|
||
7)
|
||
show_progress
|
||
show_remaining_files
|
||
show_replacement_patterns
|
||
validate_migration
|
||
show_next_steps
|
||
;;
|
||
8)
|
||
print_info "Goodbye!"
|
||
exit 0
|
||
;;
|
||
*)
|
||
print_error "Invalid choice. Please try again."
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# Check if arguments were provided
|
||
if [ $# -eq 0 ]; then
|
||
# No arguments, show menu
|
||
show_menu
|
||
else
|
||
# Arguments provided, run specific function
|
||
case $1 in
|
||
"progress")
|
||
show_progress
|
||
;;
|
||
"files")
|
||
show_remaining_files
|
||
;;
|
||
"patterns")
|
||
show_replacement_patterns
|
||
;;
|
||
"template")
|
||
show_migration_template
|
||
;;
|
||
"validate")
|
||
validate_migration
|
||
;;
|
||
"next")
|
||
show_next_steps
|
||
;;
|
||
"all")
|
||
show_progress
|
||
show_remaining_files
|
||
show_replacement_patterns
|
||
validate_migration
|
||
show_next_steps
|
||
;;
|
||
*)
|
||
print_error "Unknown argument: $1"
|
||
echo "Usage: $0 [progress|files|patterns|template|validate|next|all]"
|
||
exit 1
|
||
;;
|
||
esac
|
||
fi |