DDL schemas for Trading Platform: - User management - Authentication - Payments - Education - ML predictions - Trading data Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
146 lines
5.1 KiB
Bash
Executable File
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
|