workspace/projects/gamilit/apps/database/scripts/verify-users.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

131 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# Script: verify-users.sh
# Descripción: Verifica que usuarios y perfiles estén correctamente cargados
# Fecha: 2025-11-09
# Autor: Claude Code (AI Assistant)
# ============================================================================
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DB_DIR="$(dirname "$SCRIPT_DIR")"
cd "$DB_DIR"
# Cargar credenciales
if [ ! -f "database-credentials-dev.txt" ]; then
echo "❌ Error: database-credentials-dev.txt no encontrado"
exit 1
fi
DB_PASSWORD=$(grep "^Password:" database-credentials-dev.txt | awk '{print $2}')
export PGPASSWORD="$DB_PASSWORD"
PSQL="psql -h localhost -p 5432 -U gamilit_user -d gamilit_platform"
echo "════════════════════════════════════════════════════════════════"
echo " VERIFICACIÓN DE USUARIOS Y PERFILES"
echo "════════════════════════════════════════════════════════════════"
echo ""
echo "📊 USUARIOS EN auth.users:"
echo ""
$PSQL -c "
SELECT
email,
role,
email_confirmed_at IS NOT NULL as confirmed,
TO_CHAR(created_at, 'YYYY-MM-DD') as created
FROM auth.users
WHERE email LIKE '%@glit.edu.mx'
OR email LIKE '%@demo.glit.edu.mx'
OR email LIKE '%@gamilit.com'
ORDER BY role, email;
"
echo ""
echo "════════════════════════════════════════════════════════════════"
echo "📝 PERFILES EN auth_management.profiles:"
echo ""
$PSQL -c "
SELECT
email,
role,
full_name,
status,
email_verified
FROM auth_management.profiles
WHERE email LIKE '%@glit.edu.mx'
OR email LIKE '%@demo.glit.edu.mx'
OR email LIKE '%@gamilit.com'
ORDER BY role, email;
"
echo ""
echo "════════════════════════════════════════════════════════════════"
echo "🔗 VINCULACIÓN users <-> profiles:"
echo ""
$PSQL -c "
SELECT
u.email,
CASE
WHEN p.user_id IS NOT NULL THEN '✅ Vinculado'
ELSE '❌ Sin Profile'
END as vinculacion,
u.role as user_role,
p.role as profile_role
FROM auth.users u
LEFT JOIN auth_management.profiles p ON u.id = p.user_id
WHERE u.email LIKE '%@glit.edu.mx'
OR u.email LIKE '%@demo.glit.edu.mx'
OR u.email LIKE '%@gamilit.com'
ORDER BY u.role, u.email;
"
echo ""
echo "════════════════════════════════════════════════════════════════"
echo "📈 RESUMEN:"
echo ""
# Contar totales
TOTAL_USERS=$($PSQL -t -c "
SELECT COUNT(*) FROM auth.users
WHERE email LIKE '%@glit.edu.mx'
OR email LIKE '%@demo.glit.edu.mx'
OR email LIKE '%@gamilit.com';
" | tr -d ' ')
TOTAL_PROFILES=$($PSQL -t -c "
SELECT COUNT(*) FROM auth_management.profiles
WHERE email LIKE '%@glit.edu.mx'
OR email LIKE '%@demo.glit.edu.mx'
OR email LIKE '%@gamilit.com';
" | tr -d ' ')
LINKED=$($PSQL -t -c "
SELECT COUNT(*)
FROM auth.users u
INNER JOIN auth_management.profiles p ON u.id = p.user_id
WHERE u.email LIKE '%@glit.edu.mx'
OR u.email LIKE '%@demo.glit.edu.mx'
OR u.email LIKE '%@gamilit.com';
" | tr -d ' ')
UNLINKED=$((TOTAL_USERS - LINKED))
echo " Total usuarios: $TOTAL_USERS"
echo " Total profiles: $TOTAL_PROFILES"
echo " Vinculados: $LINKED"
echo " Sin vincular: $UNLINKED"
echo ""
if [ "$TOTAL_USERS" -eq "$TOTAL_PROFILES" ] && [ "$UNLINKED" -eq 0 ]; then
echo "✅ Estado: CORRECTO - Todos los usuarios tienen perfil"
else
echo "⚠️ Estado: REVISAR - Hay usuarios sin perfil o desvinculados"
fi
echo ""
echo "════════════════════════════════════════════════════════════════"
echo ""