feat: Mejorar el manejo de errores en el sistema de feature flags con logging detallado y agregar script de depuración
This commit is contained in:
146
README/FEATURE_FLAGS_FIX.md
Normal file
146
README/FEATURE_FLAGS_FIX.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# 🔧 Solución a Errores de Feature Flags
|
||||
|
||||
## ❌ Problema Encontrado
|
||||
|
||||
Los errores mostrados:
|
||||
```
|
||||
[FeatureFlags] Error al setear flag "alianzas_blacklist_31_10_2025":
|
||||
[FeatureFlagsCmd]
|
||||
[FeatureFlags] Error al inicializar:
|
||||
```
|
||||
|
||||
## ✅ Causas Identificadas
|
||||
|
||||
1. **Base de datos vacía**: No había flags iniciales
|
||||
2. **Logger sin detalles**: No mostraba el error completo
|
||||
3. **Posible inicialización incompleta**: Bot intentó usar servicio antes de inicializar
|
||||
|
||||
## 🛠️ Soluciones Aplicadas
|
||||
|
||||
### 1. Mejorado Logging de Errores
|
||||
|
||||
**Archivo**: `src/core/services/FeatureFlagService.ts`
|
||||
- Agregado logging detallado con `message`, `stack`, `code`, `meta`
|
||||
- Ahora muestra errores completos de Prisma
|
||||
|
||||
**Archivo**: `src/core/loaders/featureFlagsLoader.ts`
|
||||
- Logging extendido en múltiples líneas
|
||||
- Muestra cada propiedad del error por separado
|
||||
|
||||
### 2. Creado Script de Debug
|
||||
|
||||
**Archivo**: `scripts/debugFeatureFlags.ts`
|
||||
- Lista todos los flags en DB
|
||||
- Verifica parsing de JSON
|
||||
- Test de creación/eliminación
|
||||
- Muestra detalles completos de cada flag
|
||||
|
||||
### 3. Ejecutado Setup Inicial
|
||||
|
||||
**Comando**: `npx tsx scripts/setupFeatureFlags.ts`
|
||||
|
||||
**Flags creados** (8 ejemplos):
|
||||
- ✅ `new_shop_system` (disabled)
|
||||
- ✅ `inventory_ui_v2` (enabled)
|
||||
- ✅ `improved_combat_algorithm` (rollout 25%)
|
||||
- ✅ `economy_system_v2` (gradual rollout)
|
||||
- ✅ `halloween_2025` (evento temporal)
|
||||
- ✅ `experimental_features` (whitelist)
|
||||
- ✅ `premium_features` (disabled con metadata)
|
||||
- ✅ `trading_system` (maintenance)
|
||||
|
||||
### 4. Verificado Funcionamiento
|
||||
|
||||
**Test realizado**: ✅ Exitoso
|
||||
```bash
|
||||
✅ Servicio inicializado
|
||||
📊 8 flags cargados
|
||||
✅ Todos los flags parseados correctamente
|
||||
```
|
||||
|
||||
## 🚀 Próximos Pasos
|
||||
|
||||
### 1. Reiniciar el Bot
|
||||
```bash
|
||||
# El bot ahora debe inicializar correctamente
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 2. Verificar en Discord
|
||||
```
|
||||
/featureflags list
|
||||
```
|
||||
|
||||
### 3. Crear Nuevos Flags
|
||||
```
|
||||
/featureflags create name:mi_feature status:disabled target:global
|
||||
/featureflags update flag:mi_feature status:enabled
|
||||
```
|
||||
|
||||
### 4. Ver Estadísticas
|
||||
```
|
||||
/featureflags stats flag:inventory_ui_v2
|
||||
```
|
||||
|
||||
## 📝 Comandos Útiles
|
||||
|
||||
### Debug Manual
|
||||
```bash
|
||||
# Ver todos los flags en DB
|
||||
npx tsx scripts/debugFeatureFlags.ts
|
||||
|
||||
# Test del servicio
|
||||
npx tsx -e "
|
||||
import { featureFlagService } from './src/core/services/FeatureFlagService';
|
||||
await featureFlagService.initialize();
|
||||
console.log(featureFlagService.getFlags());
|
||||
"
|
||||
```
|
||||
|
||||
### Resetear Flags
|
||||
```bash
|
||||
# Eliminar todos los flags
|
||||
npx tsx -e "
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
const prisma = new PrismaClient();
|
||||
await prisma.featureFlag.deleteMany({});
|
||||
await prisma.\$disconnect();
|
||||
"
|
||||
|
||||
# Recrear flags de ejemplo
|
||||
npx tsx scripts/setupFeatureFlags.ts
|
||||
```
|
||||
|
||||
## 🔍 Debugging Futuro
|
||||
|
||||
Si vuelven a aparecer errores:
|
||||
|
||||
1. **Ejecutar debug script**:
|
||||
```bash
|
||||
npx tsx scripts/debugFeatureFlags.ts
|
||||
```
|
||||
|
||||
2. **Verificar logs mejorados**: Ahora muestran:
|
||||
- `error.message`
|
||||
- `error.stack`
|
||||
- `error.code` (código de Prisma)
|
||||
- `error.meta` (metadata de Prisma)
|
||||
|
||||
3. **Test de conexión**:
|
||||
```bash
|
||||
npx tsx -e "
|
||||
import { prisma } from './src/core/database/prisma';
|
||||
const count = await prisma.featureFlag.count();
|
||||
console.log('Flags en DB:', count);
|
||||
"
|
||||
```
|
||||
|
||||
## ✅ Estado Actual
|
||||
|
||||
- ✅ Tabla `FeatureFlag` creada y sincronizada
|
||||
- ✅ 8 flags de ejemplo en DB
|
||||
- ✅ Servicio funcionando correctamente
|
||||
- ✅ Logging mejorado
|
||||
- ✅ Script de debug disponible
|
||||
|
||||
**El sistema está listo para usar.** 🎮
|
||||
Reference in New Issue
Block a user