workspace/projects/gamilit/apps/database/scripts/verify-missions-status.sh
rckrdmrd a23f31ce8f feat(db): Sincronizar scripts de BD y documentacion de produccion
## 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>
2025-12-18 15:01:03 -06:00

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