#!/bin/bash # rioCata - Script de ayuda para gestión de la base de datos set -e COMPOSE="docker-compose" DB_USER="riocata_user" DB_NAME="riocata" # Colores GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color function show_help() { echo "rioCata - Sistema de Catación de Café" echo "" echo "Uso: ./riocata.sh [comando]" echo "" echo "Comandos disponibles:" echo " start - Iniciar servicios" echo " stop - Detener servicios" echo " restart - Reiniciar servicios" echo " reset - Reiniciar servicios y borrar datos (¡CUIDADO!)" echo " psql - Conectarse a PostgreSQL con psql" echo " test - Ejecutar tests de validación" echo " queries - Ejecutar queries de ejemplo" echo " logs - Ver logs de PostgreSQL" echo " status - Ver estado de servicios" echo " backup - Crear backup de la base de datos" echo " restore FILE - Restaurar backup desde archivo" echo " help - Mostrar esta ayuda" echo "" } function start_services() { echo -e "${GREEN}Iniciando servicios...${NC}" $COMPOSE up -d echo -e "${GREEN}Esperando que PostgreSQL esté listo...${NC}" sleep 3 $COMPOSE ps } function stop_services() { echo -e "${YELLOW}Deteniendo servicios...${NC}" $COMPOSE down } function restart_services() { echo -e "${YELLOW}Reiniciando servicios...${NC}" $COMPOSE restart sleep 3 $COMPOSE ps } function reset_all() { echo -e "${RED}¡ADVERTENCIA! Esto borrará TODOS los datos.${NC}" read -p "¿Estás seguro? (escribe 'SI' para confirmar): " confirm if [ "$confirm" = "SI" ]; then echo -e "${RED}Eliminando servicios y datos...${NC}" $COMPOSE down -v echo -e "${GREEN}Reiniciando servicios...${NC}" $COMPOSE up -d sleep 5 echo -e "${GREEN}Base de datos reinicializada con datos de prueba.${NC}" else echo -e "${YELLOW}Operación cancelada.${NC}" fi } function connect_psql() { echo -e "${GREEN}Conectando a PostgreSQL...${NC}" echo -e "${YELLOW}Tip: usa \\q para salir${NC}" $COMPOSE exec postgres psql -U $DB_USER -d $DB_NAME } function run_tests() { echo -e "${GREEN}Ejecutando tests de validación...${NC}" $COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < postgres/tests/test_all.sql } function run_queries() { echo -e "${GREEN}Ejecutando queries de ejemplo...${NC}" $COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < postgres/tests/example_queries.sql } function show_logs() { echo -e "${GREEN}Mostrando logs de PostgreSQL...${NC}" $COMPOSE logs -f postgres } function show_status() { echo -e "${GREEN}Estado de servicios:${NC}" $COMPOSE ps } function create_backup() { BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql" echo -e "${GREEN}Creando backup en $BACKUP_FILE...${NC}" $COMPOSE exec -T postgres pg_dump -U $DB_USER $DB_NAME > $BACKUP_FILE echo -e "${GREEN}Backup creado exitosamente: $BACKUP_FILE${NC}" } function restore_backup() { if [ -z "$1" ]; then echo -e "${RED}Error: Debes especificar el archivo de backup${NC}" echo "Uso: ./riocata.sh restore " exit 1 fi if [ ! -f "$1" ]; then echo -e "${RED}Error: El archivo $1 no existe${NC}" exit 1 fi echo -e "${YELLOW}Restaurando backup desde $1...${NC}" $COMPOSE exec -T postgres psql -U $DB_USER -d $DB_NAME < "$1" echo -e "${GREEN}Backup restaurado exitosamente${NC}" } # Main case "${1:-help}" in start) start_services ;; stop) stop_services ;; restart) restart_services ;; reset) reset_all ;; psql) connect_psql ;; test) run_tests ;; queries) run_queries ;; logs) show_logs ;; status) show_status ;; backup) create_backup ;; restore) restore_backup "$2" ;; help|--help|-h) show_help ;; *) echo -e "${RED}Comando desconocido: $1${NC}" echo "" show_help exit 1 ;; esac