trading-platform-database-v2/ddl/schemas/education/verify.sh
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

146 lines
5.1 KiB
Bash
Executable File

#!/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