#!/bin/bash # ===================================================== # VERIFY SCRIPT - Schema Education # ===================================================== # Proyecto: OrbiQuant IA (Trading Platform) # Módulo: OQI-002 - Education # ===================================================== set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration DB_HOST="${DB_HOST:-localhost}" DB_PORT="${DB_PORT:-5432}" DB_NAME="${DB_NAME:-trading_platform}" DB_USER="${DB_USER:-postgres}" SCHEMA_NAME="education" echo -e "${BLUE}=================================================${NC}" echo -e "${BLUE} OrbiQuant IA - Education Schema Verification${NC}" echo -e "${BLUE}=================================================${NC}" echo "" # Check if psql is available if ! command -v psql &> /dev/null; then echo -e "${RED}Error: psql command not found${NC}" exit 1 fi # Function to run query and return result run_query() { local query=$1 PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "$query" 2>/dev/null | xargs } echo "Configuration:" echo " Database: $DB_NAME" echo " Host: $DB_HOST:$DB_PORT" echo " Schema: $SCHEMA_NAME" echo "" # Check if schema exists echo -e "${YELLOW}▶${NC} Checking schema existence..." SCHEMA_EXISTS=$(run_query "SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name = '$SCHEMA_NAME';") if [ "$SCHEMA_EXISTS" -eq "1" ]; then echo -e "${GREEN} ✓ Schema exists${NC}" else echo -e "${RED} ✗ Schema not found${NC}" exit 1 fi # Check ENUMs echo "" echo -e "${YELLOW}▶${NC} Checking ENUMs..." EXPECTED_ENUMS=("difficulty_level" "course_status" "enrollment_status" "lesson_content_type" "question_type" "achievement_type") ENUM_COUNT=0 for enum_name in "${EXPECTED_ENUMS[@]}"; do EXISTS=$(run_query "SELECT COUNT(*) FROM pg_type WHERE typname = '$enum_name' AND typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '$SCHEMA_NAME');") if [ "$EXISTS" -eq "1" ]; then echo -e "${GREEN} ✓ $enum_name${NC}" ((ENUM_COUNT++)) else echo -e "${RED} ✗ $enum_name${NC}" fi done # Check tables echo "" echo -e "${YELLOW}▶${NC} Checking tables..." EXPECTED_TABLES=("categories" "courses" "modules" "lessons" "enrollments" "progress" "quizzes" "quiz_questions" "quiz_attempts" "certificates" "user_achievements" "user_gamification_profile" "user_activity_log" "course_reviews") TABLE_COUNT=0 for table_name in "${EXPECTED_TABLES[@]}"; do EXISTS=$(run_query "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '$SCHEMA_NAME' AND table_name = '$table_name';") if [ "$EXISTS" -eq "1" ]; then ROW_COUNT=$(run_query "SELECT COUNT(*) FROM $SCHEMA_NAME.$table_name;") echo -e "${GREEN} ✓ $table_name${NC} ($ROW_COUNT rows)" ((TABLE_COUNT++)) else echo -e "${RED} ✗ $table_name${NC}" fi done # Check functions echo "" echo -e "${YELLOW}▶${NC} Checking functions..." EXPECTED_FUNCTIONS=("update_updated_at_column" "update_enrollment_progress" "auto_complete_enrollment" "generate_certificate_number" "update_course_rating_stats" "update_enrollment_count" "update_user_xp" "update_user_streak") FUNCTION_COUNT=0 for function_name in "${EXPECTED_FUNCTIONS[@]}"; do EXISTS=$(run_query "SELECT COUNT(*) FROM pg_proc WHERE proname = '$function_name' AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = '$SCHEMA_NAME');") if [ "$EXISTS" -ge "1" ]; then echo -e "${GREEN} ✓ $function_name${NC}" ((FUNCTION_COUNT++)) else echo -e "${RED} ✗ $function_name${NC}" fi done # Check views echo "" echo -e "${YELLOW}▶${NC} Checking views..." EXPECTED_VIEWS=("v_courses_with_stats" "v_user_course_progress" "v_leaderboard_weekly" "v_leaderboard_monthly" "v_leaderboard_alltime" "v_user_statistics" "v_popular_courses") VIEW_COUNT=0 for view_name in "${EXPECTED_VIEWS[@]}"; do EXISTS=$(run_query "SELECT COUNT(*) FROM information_schema.views WHERE table_schema = '$SCHEMA_NAME' AND table_name = '$view_name';") if [ "$EXISTS" -eq "1" ]; then echo -e "${GREEN} ✓ $view_name${NC}" ((VIEW_COUNT++)) else echo -e "${RED} ✗ $view_name${NC}" fi done # Summary echo "" echo -e "${BLUE}=================================================${NC}" echo -e "${BLUE} Verification Summary${NC}" echo -e "${BLUE}=================================================${NC}" echo "" echo "ENUMs: $ENUM_COUNT / ${#EXPECTED_ENUMS[@]}" echo "Tables: $TABLE_COUNT / ${#EXPECTED_TABLES[@]}" echo "Functions: $FUNCTION_COUNT / ${#EXPECTED_FUNCTIONS[@]}" echo "Views: $VIEW_COUNT / ${#EXPECTED_VIEWS[@]}" echo "" TOTAL_EXPECTED=$((${#EXPECTED_ENUMS[@]} + ${#EXPECTED_TABLES[@]} + ${#EXPECTED_FUNCTIONS[@]} + ${#EXPECTED_VIEWS[@]})) TOTAL_FOUND=$((ENUM_COUNT + TABLE_COUNT + FUNCTION_COUNT + VIEW_COUNT)) if [ "$TOTAL_FOUND" -eq "$TOTAL_EXPECTED" ]; then echo -e "${GREEN}✓ All components verified successfully!${NC}" exit 0 else echo -e "${YELLOW}⚠ Some components are missing ($TOTAL_FOUND / $TOTAL_EXPECTED)${NC}" exit 1 fi