trading-platform-database/ddl/schemas/education/install.sh

133 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
# =====================================================
# INSTALL SCRIPT - Schema Education
# =====================================================
# Proyecto: OrbiQuant IA (Trading Platform)
# Módulo: OQI-002 - Education
# Especificación: ET-EDU-001-database.md
# =====================================================
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Configuration
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_NAME="${DB_NAME:-orbiquant}"
DB_USER="${DB_USER:-postgres}"
SCHEMA_NAME="education"
echo -e "${GREEN}=================================================${NC}"
echo -e "${GREEN} OrbiQuant IA - Education Schema Installation${NC}"
echo -e "${GREEN}=================================================${NC}"
echo ""
# Check if psql is available
if ! command -v psql &> /dev/null; then
echo -e "${RED}Error: psql command not found${NC}"
echo "Please install PostgreSQL client"
exit 1
fi
# Get script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "Configuration:"
echo " Database: $DB_NAME"
echo " Host: $DB_HOST:$DB_PORT"
echo " User: $DB_USER"
echo " Schema: $SCHEMA_NAME"
echo ""
# Function to execute SQL file
execute_sql() {
local file=$1
local description=$2
echo -e "${YELLOW}${NC} $description"
if [ ! -f "$file" ]; then
echo -e "${RED} ✗ File not found: $file${NC}"
return 1
fi
if PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f "$file" > /dev/null 2>&1; then
echo -e "${GREEN} ✓ Success${NC}"
return 0
else
echo -e "${RED} ✗ Failed${NC}"
return 1
fi
}
# Create schema if not exists
echo -e "${YELLOW}${NC} Creating schema: $SCHEMA_NAME"
PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "CREATE SCHEMA IF NOT EXISTS $SCHEMA_NAME;" > /dev/null 2>&1
echo -e "${GREEN} ✓ Schema created/verified${NC}"
echo ""
# 1. Install ENUMs
echo -e "${GREEN}[1/3] Installing ENUMs...${NC}"
execute_sql "$SCRIPT_DIR/00-enums.sql" "Creating ENUM types"
echo ""
# 2. Install Tables
echo -e "${GREEN}[2/3] Installing Tables...${NC}"
execute_sql "$SCRIPT_DIR/tables/01-categories.sql" "Creating table: categories"
execute_sql "$SCRIPT_DIR/tables/02-courses.sql" "Creating table: courses"
execute_sql "$SCRIPT_DIR/tables/03-modules.sql" "Creating table: modules"
execute_sql "$SCRIPT_DIR/tables/04-lessons.sql" "Creating table: lessons"
execute_sql "$SCRIPT_DIR/tables/05-enrollments.sql" "Creating table: enrollments"
execute_sql "$SCRIPT_DIR/tables/06-progress.sql" "Creating table: progress"
execute_sql "$SCRIPT_DIR/tables/07-quizzes.sql" "Creating table: quizzes"
execute_sql "$SCRIPT_DIR/tables/08-quiz_questions.sql" "Creating table: quiz_questions"
execute_sql "$SCRIPT_DIR/tables/09-quiz_attempts.sql" "Creating table: quiz_attempts"
execute_sql "$SCRIPT_DIR/tables/10-certificates.sql" "Creating table: certificates"
execute_sql "$SCRIPT_DIR/tables/11-user_achievements.sql" "Creating table: user_achievements"
execute_sql "$SCRIPT_DIR/tables/12-user_gamification_profile.sql" "Creating table: user_gamification_profile"
execute_sql "$SCRIPT_DIR/tables/13-user_activity_log.sql" "Creating table: user_activity_log"
execute_sql "$SCRIPT_DIR/tables/14-course_reviews.sql" "Creating table: course_reviews"
echo ""
# 3. Install Functions and Triggers
echo -e "${GREEN}[3/3] Installing Functions and Triggers...${NC}"
execute_sql "$SCRIPT_DIR/functions/01-update_updated_at.sql" "Creating trigger: update_updated_at"
execute_sql "$SCRIPT_DIR/functions/02-update_enrollment_progress.sql" "Creating function: update_enrollment_progress"
execute_sql "$SCRIPT_DIR/functions/03-auto_complete_enrollment.sql" "Creating function: auto_complete_enrollment"
execute_sql "$SCRIPT_DIR/functions/04-generate_certificate.sql" "Creating function: generate_certificate_number"
execute_sql "$SCRIPT_DIR/functions/05-update_course_stats.sql" "Creating function: update_course_stats"
execute_sql "$SCRIPT_DIR/functions/06-update_enrollment_count.sql" "Creating function: update_enrollment_count"
execute_sql "$SCRIPT_DIR/functions/07-update_gamification_profile.sql" "Creating functions: gamification"
execute_sql "$SCRIPT_DIR/functions/08-views.sql" "Creating views"
echo ""
# Verify installation
echo -e "${YELLOW}${NC} Verifying installation..."
TABLE_COUNT=$(PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '$SCHEMA_NAME' AND table_type = 'BASE TABLE';" 2>/dev/null | xargs)
if [ "$TABLE_COUNT" -eq "14" ]; then
echo -e "${GREEN} ✓ All 14 tables created successfully${NC}"
else
echo -e "${RED} ✗ Expected 14 tables, found $TABLE_COUNT${NC}"
fi
echo ""
echo -e "${GREEN}=================================================${NC}"
echo -e "${GREEN} Installation Complete!${NC}"
echo -e "${GREEN}=================================================${NC}"
echo ""
echo "Schema '$SCHEMA_NAME' has been installed successfully."
echo ""
echo "Next steps:"
echo " 1. Review the README.md for usage examples"
echo " 2. Run seed data scripts if needed"
echo " 3. Configure Row Level Security (RLS) policies"
echo ""