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.
 
 
 
 
 
 

325 lines
12 KiB

#!/bin/bash
# TimeSafari PlatformServiceMixin Migration Validation Script
# Author: Matthew Raymer
#
# This script validates the migration status from legacy patterns to PlatformServiceMixin
# and provides detailed reporting on migration progress.
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}🔍 TimeSafari PlatformServiceMixin Migration Validation${NC}"
echo "=================================================="
# Initialize counters
total_issues=0
legacy_db_imports=0
legacy_log_imports=0
direct_platform_usage=0
mixin_usage=0
# Function to log with timestamp
log_with_timestamp() {
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Function to check for legacy patterns
check_legacy_patterns() {
echo -e "\n${YELLOW}📋 Checking for legacy patterns...${NC}"
# Check for legacy databaseUtil imports
echo -n " Checking databaseUtil imports... "
legacy_db_files=$(find src -name "*.vue" -o -name "*.ts" | xargs grep -l "import.*databaseUtil" 2>/dev/null || true)
legacy_db_imports=$(echo "$legacy_db_files" | grep -c . 2>/dev/null || echo "0")
if [ "$legacy_db_imports" -gt 0 ]; then
echo -e "${RED}Found $legacy_db_imports files${NC}"
echo " Files with legacy databaseUtil imports:"
echo "$legacy_db_files" | sed 's/^/ /'
total_issues=$((total_issues + legacy_db_imports))
else
echo -e "${GREEN}✓ None found${NC}"
fi
# Check for legacy logging imports
echo -n " Checking logConsoleAndDb imports... "
legacy_log_files=$(find src -name "*.vue" -o -name "*.ts" | xargs grep -l "logConsoleAndDb" 2>/dev/null || true)
legacy_log_imports=$(echo "$legacy_log_files" | grep -c . 2>/dev/null || echo "0")
if [ "$legacy_log_imports" -gt 0 ]; then
echo -e "${RED}Found $legacy_log_imports files${NC}"
echo " Files with legacy logging imports:"
echo "$legacy_log_files" | sed 's/^/ /'
total_issues=$((total_issues + legacy_log_imports))
else
echo -e "${GREEN}✓ None found${NC}"
fi
# Check for direct PlatformServiceFactory usage
echo -n " Checking direct PlatformServiceFactory usage... "
direct_platform_files=$(find src -name "*.vue" -o -name "*.ts" | xargs grep -l "PlatformServiceFactory.getInstance" 2>/dev/null || true)
direct_platform_usage=$(echo "$direct_platform_files" | grep -c . 2>/dev/null || echo "0")
if [ "$direct_platform_usage" -gt 0 ]; then
echo -e "${YELLOW}Found $direct_platform_usage files${NC}"
echo " Files with direct PlatformService usage:"
echo "$direct_platform_files" | sed 's/^/ /'
else
echo -e "${GREEN}✓ None found${NC}"
fi
}
# Function to check for positive patterns (mixin usage)
check_positive_patterns() {
echo -e "\n${YELLOW}📈 Checking for modern patterns...${NC}"
# Check for PlatformServiceMixin usage
echo -n " Checking PlatformServiceMixin usage... "
mixin_files=$(find src -name "*.vue" | xargs grep -l "PlatformServiceMixin" 2>/dev/null || true)
mixin_usage=$(echo "$mixin_files" | grep -c . 2>/dev/null || echo "0")
if [ "$mixin_usage" -gt 0 ]; then
echo -e "${GREEN}Found $mixin_usage files${NC}"
echo " Files using PlatformServiceMixin:"
echo "$mixin_files" | sed 's/^/ /'
else
echo -e "${RED}No files found using mixin${NC}"
fi
# Check for mixin method usage
echo -n " Checking mixin method usage... "
mixin_methods_count=$(find src -name "*.vue" | xargs grep -h '\$db\|this\.\$query\|this\.\$getAllContacts\|this\.\$settings\|this\.\$log' 2>/dev/null | wc -l || echo "0")
if [ "$mixin_methods_count" -gt 0 ]; then
echo -e "${GREEN}Found $mixin_methods_count usages${NC}"
else
echo -e "${YELLOW}No mixin method usages found${NC}"
fi
}
# Function to analyze specific migration patterns
analyze_migration_patterns() {
echo -e "\n${YELLOW}🔬 Analyzing migration patterns...${NC}"
# Components that should use mixin but don't
echo -n " Components with database operations but no mixin... "
db_components_no_mixin=$(find src -name "*.vue" -exec bash -c '
if grep -q "dbQuery\|dbExec\|dbGetOneRow" "$1" && ! grep -q "PlatformServiceMixin" "$1"; then
echo "$1"
fi
' _ {} \;)
db_components_no_mixin_count=$(echo "$db_components_no_mixin" | grep -c . 2>/dev/null || echo "0")
if [ "$db_components_no_mixin_count" -gt 0 ]; then
echo -e "${RED}Found $db_components_no_mixin_count components${NC}"
echo " Components needing mixin:"
echo "$db_components_no_mixin" | sed 's/^/ /'
total_issues=$((total_issues + db_components_no_mixin_count))
else
echo -e "${GREEN}✓ All components with DB operations use mixin${NC}"
fi
# Check for mixed patterns in same file (excluding comments)
echo -n " Files with mixed patterns... "
mixed_pattern_files=$(find src -name "*.vue" -exec bash -c '
if grep -q "PlatformServiceMixin" "$1"; then
# Check for legacy patterns in actual code (not comments)
if grep -v "^[[:space:]]*//\|^[[:space:]]*\*\|^[[:space:]]*#" "$1" | grep -q "databaseUtil\|logConsoleAndDb"; then
echo "$1"
fi
fi
' _ {} \;)
mixed_pattern_count=$(echo "$mixed_pattern_files" | grep -c . 2>/dev/null || echo "0")
if [ "$mixed_pattern_count" -gt 0 ]; then
echo -e "${YELLOW}Found $mixed_pattern_count files${NC}"
echo " Files with mixed patterns (partially migrated):"
echo "$mixed_pattern_files" | sed 's/^/ /'
else
echo -e "${GREEN}✓ No mixed patterns found${NC}"
fi
# Check for technically compliant files (mixin + no legacy code)
echo -n " Technically compliant files... "
technically_compliant_files=$(find src -name "*.vue" -exec bash -c '
if grep -q "PlatformServiceMixin" "$1" && ! grep -v "^[[:space:]]*//\|^[[:space:]]*\*\|^[[:space:]]*#" "$1" | grep -q "databaseUtil\|logConsoleAndDb"; then
echo "$1"
fi
' _ {} \;)
technically_compliant_count=$(echo "$technically_compliant_files" | grep -c . 2>/dev/null || echo "0")
if [ "$technically_compliant_count" -gt 0 ]; then
echo -e "${GREEN}Found $technically_compliant_count files${NC}"
echo " Technically compliant files (use mixin, no legacy code):"
echo "$technically_compliant_files" | sed 's/^/ /'
else
echo -e "${YELLOW}No technically compliant files found${NC}"
fi
}
# Function to check human testing status
check_human_testing_status() {
echo -e "\n${YELLOW}🧪 Human Testing Status${NC}"
echo "====================="
# Known human tested files (confirmed by user)
human_tested_files="
src/views/ClaimAddRawView.vue
src/views/LogView.vue
"
# Files requiring human testing (technically compliant but not tested)
echo -n " Files requiring human testing... "
needs_human_testing=$(echo "$technically_compliant_files" | grep -v -F "$human_tested_files" | grep -v "^[[:space:]]*$" || true)
needs_human_testing_count=$(echo "$needs_human_testing" | grep -v "^[[:space:]]*$" | wc -l 2>/dev/null || echo "0")
if [ "$needs_human_testing_count" -gt 0 ]; then
echo -e "${YELLOW}Found $needs_human_testing_count files${NC}"
echo " Files needing human testing validation:"
echo "$needs_human_testing" | sed 's/^/ /'
else
echo -e "${GREEN}✓ All compliant files have been human tested${NC}"
fi
# Files with confirmed human testing
echo -n " Human tested files... "
human_tested_count=$(echo "$human_tested_files" | grep -v "^[[:space:]]*$" | wc -l 2>/dev/null || echo "0")
if [ "$human_tested_count" -gt 0 ]; then
echo -e "${GREEN}Found $human_tested_count files${NC}"
echo " Files with confirmed human testing:"
echo "$human_tested_files" | sed 's/^/ /'
else
echo -e "${YELLOW}No confirmed human testing yet${NC}"
fi
}
# Function to generate migration report
generate_report() {
echo -e "\n${BLUE}📊 Migration Status Report${NC}"
echo "=============================="
total_vue_files=$(find src -name "*.vue" | wc -l)
migration_percentage=$((mixin_usage * 100 / total_vue_files))
echo "Total Vue components: $total_vue_files"
echo "Components using PlatformServiceMixin: $mixin_usage"
echo "Migration percentage: ${migration_percentage}%"
echo ""
echo "Technical Migration Status:"
echo " - Technically compliant files: $technically_compliant_count"
echo " - Mixed pattern files: $mixed_pattern_count"
echo " - Files needing migration: $((total_vue_files - technically_compliant_count - mixed_pattern_count))"
echo ""
echo "Legacy patterns found:"
echo " - databaseUtil imports: $legacy_db_imports"
echo " - logConsoleAndDb imports: $legacy_log_imports"
echo " - Direct PlatformService usage: $direct_platform_usage"
echo ""
echo "Human Testing Status:"
echo " - Human tested files: $human_tested_count"
echo " - Awaiting human testing: $needs_human_testing_count"
echo ""
echo "Total issues requiring attention: $total_issues"
# Generate priority list
if [ "$total_issues" -gt 0 ]; then
echo -e "\n${YELLOW}🎯 Priority Migration List${NC}"
echo "========================="
if [ "$legacy_db_imports" -gt 0 ]; then
echo "1. HIGH PRIORITY: Migrate databaseUtil imports ($legacy_db_imports files)"
fi
if [ "$legacy_log_imports" -gt 0 ]; then
echo "2. HIGH PRIORITY: Migrate logging patterns ($legacy_log_imports files)"
fi
if [ "$mixed_pattern_count" -gt 0 ]; then
echo "3. HIGH PRIORITY: Complete mixed pattern migrations ($mixed_pattern_count files)"
fi
if [ "$needs_human_testing_count" -gt 0 ]; then
echo "4. MEDIUM PRIORITY: Human testing validation ($needs_human_testing_count files)"
fi
if [ "$direct_platform_usage" -gt 0 ]; then
echo "5. LOW PRIORITY: Consider migrating direct PlatformService usage ($direct_platform_usage files)"
fi
fi
}
# Function to suggest next steps
suggest_next_steps() {
echo -e "\n${BLUE}🚀 Suggested Next Steps${NC}"
echo "======================"
if [ "$total_issues" -eq 0 ]; then
echo -e "${GREEN}✅ Migration appears complete!${NC}"
echo "1. Run comprehensive tests to verify functionality"
echo "2. Set up ESLint rules to prevent regression"
echo "3. Update documentation to reflect new patterns"
else
echo "1. Start with high-priority files (databaseUtil and logging)"
echo "2. Use the migration template: docs/migration-templates/component-migration.md"
echo "3. Test each component after migration"
echo "4. Set up ESLint rules to prevent new legacy usage"
echo "5. Re-run this script to track progress"
fi
}
# Function to validate TypeScript compilation
validate_typescript() {
echo -e "\n${YELLOW}🔧 Validating TypeScript compilation...${NC}"
if command -v npx >/dev/null 2>&1; then
echo -n " Running TypeScript check... "
if npx tsc --noEmit --skipLibCheck >/dev/null 2>&1; then
echo -e "${GREEN}✓ TypeScript compilation successful${NC}"
else
echo -e "${RED}✗ TypeScript compilation failed${NC}"
echo " Run 'npx tsc --noEmit' for details"
total_issues=$((total_issues + 1))
fi
else
echo -e "${YELLOW} TypeScript not available, skipping compilation check${NC}"
fi
}
# Main execution
main() {
log_with_timestamp "Starting migration validation..."
check_legacy_patterns
check_positive_patterns
analyze_migration_patterns
check_human_testing_status
validate_typescript
generate_report
suggest_next_steps
echo -e "\n${BLUE}===========================================${NC}"
if [ "$total_issues" -eq 0 ]; then
echo -e "${GREEN}✅ Migration validation passed!${NC}"
log_with_timestamp "Migration validation completed successfully"
exit 0
else
echo -e "${YELLOW}⚠️ Migration validation found $total_issues issues${NC}"
log_with_timestamp "Migration validation completed with issues"
exit 1
fi
}
# Run main function
main "$@"