## Scripts de Base de Datos (12 archivos) - init-database.sh: Inicializacion completa con usuario y BD - init-database-v3.sh: Version con dotenv-vault - reset-database.sh: Reset BD manteniendo usuario - recreate-database.sh: Recreacion completa - cleanup-duplicados.sh, fix-duplicate-triggers.sh - verify-users.sh, verify-missions-status.sh - load-users-and-profiles.sh, DB-127-validar-gaps.sh ## Scripts de Produccion (5 archivos) - build-production.sh: Compilar backend y frontend - deploy-production.sh: Desplegar con PM2 - pre-deploy-check.sh: Validaciones pre-deploy - repair-missing-data.sh: Reparar datos faltantes - migrate-missing-objects.sh: Migrar objetos SQL ## Documentacion (7 archivos) - GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md - GUIA-ACTUALIZACION-PRODUCCION.md - GUIA-VALIDACION-PRODUCCION.md - GUIA-DEPLOYMENT-AGENTE-PRODUCCION.md - GUIA-SSL-NGINX-PRODUCCION.md - GUIA-SSL-AUTOFIRMADO.md - DIRECTIVA-DEPLOYMENT.md ## Actualizaciones DDL/Seeds - 99-post-ddl-permissions.sql: Permisos actualizados - LOAD-SEEDS-gamification_system.sh: Seeds completos ## Nuevos archivos - PROMPT-AGENTE-PRODUCCION.md: Prompt para agente productivo - FLUJO-CARGA-LIMPIA.md: Documentacion de carga limpia Resuelve: Problema de carga de BD entre dev y produccion Cumple: DIRECTIVA-POLITICA-CARGA-LIMPIA.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
135 lines
4.1 KiB
Bash
Executable File
135 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# =====================================================
|
|
# Script: verify-missions-status.sh
|
|
# Description: Verifica el estado de las misiones en la base de datos
|
|
# Author: Database-Agent
|
|
# Created: 2025-11-24
|
|
# =====================================================
|
|
|
|
set -e
|
|
|
|
# Colores para output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE}VERIFICACIÓN DE MISIONES - GAMILIT${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo ""
|
|
|
|
# Leer credenciales
|
|
DB_USER="gamilit_user"
|
|
DB_NAME="gamilit_platform"
|
|
DB_HOST="localhost"
|
|
|
|
# Verificar si existe el archivo de credenciales
|
|
if [ -f "database-credentials-dev.txt" ]; then
|
|
DB_PASSWORD=$(grep "Password:" database-credentials-dev.txt | awk '{print $2}')
|
|
else
|
|
echo -e "${YELLOW}⚠️ No se encontró archivo de credenciales${NC}"
|
|
echo "Por favor ingresa la contraseña de la base de datos:"
|
|
read -s DB_PASSWORD
|
|
fi
|
|
|
|
export PGPASSWORD="$DB_PASSWORD"
|
|
|
|
echo -e "${GREEN}1. RESUMEN GENERAL${NC}"
|
|
echo "-------------------------------------------"
|
|
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -c "
|
|
SELECT
|
|
COUNT(*) as total_missions,
|
|
COUNT(DISTINCT user_id) as unique_users,
|
|
SUM(CASE WHEN mission_type = 'daily' THEN 1 ELSE 0 END) as daily_missions,
|
|
SUM(CASE WHEN mission_type = 'weekly' THEN 1 ELSE 0 END) as weekly_missions
|
|
FROM gamification_system.missions;
|
|
"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}2. USUARIOS CON Y SIN MISIONES${NC}"
|
|
echo "-------------------------------------------"
|
|
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -c "
|
|
SELECT
|
|
CASE
|
|
WHEN email LIKE '%@gamilit.com' THEN 'Test Users'
|
|
ELSE 'Production Users'
|
|
END as user_type,
|
|
COUNT(*) as total_users,
|
|
SUM(CASE WHEN has_missions THEN 1 ELSE 0 END) as with_missions,
|
|
SUM(CASE WHEN NOT has_missions THEN 1 ELSE 0 END) as without_missions
|
|
FROM (
|
|
SELECT
|
|
p.email,
|
|
EXISTS (SELECT 1 FROM gamification_system.missions m WHERE m.user_id = p.id) as has_missions
|
|
FROM auth_management.profiles p
|
|
) subq
|
|
GROUP BY user_type
|
|
ORDER BY user_type;
|
|
"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}3. DISTRIBUCIÓN DE MISIONES POR USUARIO${NC}"
|
|
echo "-------------------------------------------"
|
|
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -c "
|
|
SELECT
|
|
p.email,
|
|
p.role,
|
|
COUNT(m.id) as total_missions,
|
|
SUM(CASE WHEN m.mission_type = 'daily' THEN 1 ELSE 0 END) as daily,
|
|
SUM(CASE WHEN m.mission_type = 'weekly' THEN 1 ELSE 0 END) as weekly,
|
|
CASE
|
|
WHEN COUNT(m.id) = 0 THEN '❌ Sin misiones'
|
|
WHEN COUNT(m.id) = 8 THEN '✅ OK (8)'
|
|
WHEN COUNT(m.id) > 8 THEN '⚠️ Duplicadas (' || COUNT(m.id) || ')'
|
|
ELSE '⚠️ Incompletas (' || COUNT(m.id) || ')'
|
|
END as status
|
|
FROM auth_management.profiles p
|
|
LEFT JOIN gamification_system.missions m ON p.id = m.user_id
|
|
GROUP BY p.email, p.role
|
|
ORDER BY
|
|
CASE WHEN p.email LIKE '%@gamilit.com' THEN 0 ELSE 1 END,
|
|
p.email;
|
|
"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}4. MISIONES POR TEMPLATE${NC}"
|
|
echo "-------------------------------------------"
|
|
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -c "
|
|
SELECT
|
|
template_id,
|
|
mission_type,
|
|
COUNT(DISTINCT user_id) as users_with_mission,
|
|
COUNT(*) as total_instances,
|
|
CASE
|
|
WHEN COUNT(*) = COUNT(DISTINCT user_id) THEN '✅ No duplicadas'
|
|
ELSE '⚠️ ' || (COUNT(*) - COUNT(DISTINCT user_id)) || ' duplicadas'
|
|
END as status
|
|
FROM gamification_system.missions
|
|
GROUP BY template_id, mission_type
|
|
ORDER BY mission_type, template_id;
|
|
"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}5. USUARIOS SIN MISIONES (si existen)${NC}"
|
|
echo "-------------------------------------------"
|
|
psql -U "$DB_USER" -d "$DB_NAME" -h "$DB_HOST" -c "
|
|
SELECT
|
|
p.email,
|
|
p.role,
|
|
p.created_at::date as created_date
|
|
FROM auth_management.profiles p
|
|
WHERE NOT EXISTS (
|
|
SELECT 1 FROM gamification_system.missions m WHERE m.user_id = p.id
|
|
)
|
|
ORDER BY p.created_at;
|
|
"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}========================================${NC}"
|
|
echo -e "${BLUE}VERIFICACIÓN COMPLETADA${NC}"
|
|
echo -e "${BLUE}========================================${NC}"
|
|
|
|
# Limpiar variable de entorno
|
|
unset PGPASSWORD
|