Guía de Seguridad de Eliminaciones CASCADE

Comprender las operaciones de eliminación CASCADE y su impacto en los datos relacionados

CRÍTICO: Las operaciones DELETE en esta API son permanentes e inmediatas. Los datos relacionados se eliminan automáticamente (CASCADE) o se desvinculan (SET NULL) según las relaciones de la base de datos. Estas operaciones no se pueden deshacer.

¿Qué son las Eliminaciones CASCADE?

Las eliminaciones CASCADE son operaciones de base de datos que eliminan o modifican automáticamente los registros relacionados cuando se elimina un registro padre. Esto garantiza la integridad de los datos al prevenir registros huérfanos.

Puntos Clave:

  • ✅ Previene datos huérfanos
  • ⚠️ No se puede deshacer
  • 📊 Las respuestas incluyen warnings mostrando lo que fue afectado
  • 🚨 Algunas operaciones (Cuentas, Grupos de Etiquetas, Estrategias) eliminan grandes cantidades de datos

Cómo Funcionan las Eliminaciones CASCADE

Cuando eliminas un recurso a través de la API:

  1. La base de datos valida la operación de eliminación
  2. Las reglas CASCADE automáticamente eliminan registros relacionados
  3. Las reglas SET NULL automáticamente desvinculan referencias en otros registros
  4. La respuesta de la API incluye advertencias sobre lo que fue afectado

Ejemplo de Respuesta DELETE

{
  "success": true,
  "message": "Trade deleted successfully",
  "warnings": [
    "3 execution(s) deleted",
    "1 trade write-up(s) deleted",
    "2 tag association(s) deleted"
  ]
}

Impacto por Recurso

🚨 Operaciones de ALTO RIESGO

Estas eliminaciones afectan grandes cantidades de datos y deben realizarse con extrema precaución.

Eliminar una Cuenta

ELIMINARÁ (CASCADE):

  • Todos los trades asociados con la cuenta
  • Todas las ejecuciones de esos trades
  • Todos los pagos de la cuenta
  • Todos los documentos de la cuenta
  • Todas las asociaciones de etiquetas

Cascade Delete Warning

Eliminar una cuenta eliminará permanentemente todo el historial de trading, ejecuciones, pagos y documentos asociados con esa cuenta. Esta operación afecta potencialmente cientos o miles de registros.

Antes de eliminar una cuenta:

  1. Exportar todos los datos de trading
  2. Descargar todos los documentos
  3. Verificar que tienes respaldos
  4. Considerar archivar en lugar de eliminar

Eliminar un Grupo de Etiquetas

ELIMINARÁ (CASCADE):

  • Todas las etiquetas dentro del grupo
  • Todas las asociaciones de etiquetas en todos los recursos (trades, write-ups, planes, estrategias, etc.)

Cascade Delete Warning

Eliminar un grupo de etiquetas eliminará todas las etiquetas en ese grupo y removerá esas etiquetas de todos los trades, write-ups, estrategias, playbooks, report cards, chart books, trade plans y cuentas donde fueron aplicadas.


⚠️ Operaciones de RIESGO MEDIO

Estas operaciones afectan cantidades moderadas de datos y recursos relacionados.

Eliminar un Trade

ELIMINARÁ (CASCADE):

  • Todas las ejecuciones del trade
  • Trade write-up asociado (si existe)
  • Todas las asociaciones de etiquetas

ESTABLECERÁ NULL:

  • Ninguno (las ejecuciones pertenecen completamente al trade)

Eliminar una Estrategia

ELIMINARÁ (CASCADE):

  • Todas las reglas de estrategia
  • Todas las asociaciones playbook-estrategia
  • Todas las asociaciones chart book-estrategia
  • Todas las asociaciones write-up-estrategia
  • Todas las asociaciones de etiquetas

ESTABLECERÁ NULL:

  • Referencias de trade groups a esta estrategia
  • Referencias de ejecuciones a esta estrategia
  • Referencias de chart books a esta estrategia

Eliminar un Playbook

ELIMINARÁ (CASCADE):

  • Criterios del playbook
  • Asociaciones playbook-estrategia
  • Asociaciones de etiquetas
  • Asociaciones trade plan-playbook
  • Asociaciones trade writeup-playbook

ESTABLECERÁ NULL:

  • Referencias de trade groups al playbook
  • Referencias de chart books al playbook

Eliminar una Etiqueta

ELIMINARÁ (CASCADE):

  • Todas las asociaciones de esta etiqueta (en trades, write-ups, planes, estrategias, etc.)

✅ Operaciones de BAJO RIESGO

Estas operaciones tienen efectos cascade mínimos.

Eliminar un Plan de Trading

ELIMINARÁ (CASCADE):

  • Asociaciones trade plan-playbook
  • Asociaciones de etiquetas

Eliminar un Trade Write-up

ELIMINARÁ (CASCADE):

  • Asociaciones trade writeup-playbook
  • Asociaciones trade writeup-estrategia
  • Asociaciones de etiquetas

Eliminar un Report Card

ELIMINARÁ (CASCADE):

  • Asociaciones de etiquetas

Eliminar un Chart Book

ELIMINARÁ (CASCADE):

  • Asociaciones chart book-estrategia
  • Asociaciones de etiquetas

Eliminar un Pago

ACTUALIZARÁ:

  • Los totales de pagos de la cuenta se recalcularán
  • El balance de la cuenta se ajustará

Eliminar un Documento

ELIMINARÁ:

  • Archivo asociado del almacenamiento

La API te advertirá si el archivo fue removido del almacenamiento. Si la eliminación del archivo falla, el registro de la base de datos aún se elimina.


Tabla Completa de Relaciones CASCADE

RecursoEliminaciones CASCADEAcciones SET NULLRiesgo
Accounttrades, executions, payouts, documents, asociaciones de etiquetas-🚨 ALTO
Tag Grouptags, todas las asociaciones de etiquetas-🚨 ALTO
Tradeexecutions, write-ups, asociaciones de etiquetas-⚠️ Medio
Strategystrategy_rules, enlaces playbook, enlaces chart book, enlaces writeup, asociaciones de etiquetastrade.strategy_id, execution.strategy_id⚠️ Medio
Playbookcriteria, enlaces estrategia, asociaciones de etiquetas, enlaces trade plan, enlaces writeuptrade.playbook_id, chart_book.playbook_id⚠️ Medio
Tagtodas las asociaciones de etiquetas-⚠️ Medio
Trade Planenlaces playbook, asociaciones de etiquetas-✅ Bajo
Trade Write-upenlaces playbook, enlaces estrategia, asociaciones de etiquetas-✅ Bajo
Report Cardasociaciones de etiquetas-✅ Bajo
Chart Bookenlaces estrategia, asociaciones de etiquetas-✅ Bajo
Payout-(recalcula totales de cuenta)✅ Bajo
Documentarchivo de almacenamiento-✅ Bajo

Mejores Prácticas

Antes de Eliminar

  1. Consultar el recurso primero para entender qué está vinculado
  2. Leer las advertencias cascade en la respuesta de la API
  3. Respaldar datos críticos si eliminas recursos de alto riesgo
  4. Probar en desarrollo antes de eliminaciones en producción
  5. Considerar alternativas como archivar en lugar de eliminar

Para Operaciones de Alto Riesgo

# ANTES de eliminar una cuenta, verifica lo que será afectado
curl -X GET "https://api.mypropjournal.com/api/v1/accounts/ACCOUNT_ID?include=performance" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Revisar: conteo de trades, conteo de pagos, conteo de documentos

# Exportar datos si es necesario
curl -X GET "https://api.mypropjournal.com/api/v1/trades?account_id=ACCOUNT_ID&limit=1000" \
  -H "Authorization: Bearer YOUR_API_KEY" > trades_backup.json

# Solo entonces proceder con la eliminación
curl -X DELETE "https://api.mypropjournal.com/api/v1/accounts/ACCOUNT_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Implementando en tu Aplicación

Siempre registra los impactos cascade para fines de auditoría:

async function deleteResource(endpoint, id) {
  try {
    const response = await fetch(
      `https://api.mypropjournal.com/api/v1/${endpoint}/${id}`,
      {
        method: 'DELETE',
        headers: { Authorization: `Bearer ${apiKey}` }
      }
    );
    
    const result = await response.json();
    
    if (result.success) {
      // Registrar impacto cascade
      if (result.warnings && result.warnings.length > 0) {
        console.warn('IMPACTO DELETE CASCADE:', {
          resource: endpoint,
          id,
          warnings: result.warnings,
          timestamp: new Date().toISOString()
        });
        
        // Notificar al usuario
        if (result.warnings.length > 5) {
          alert(`Advertencia: Esta eliminación afectó ${result.warnings.length} elementos relacionados.`);
        }
      }
      
      return result;
    } else {
      throw new Error(result.error?.message || 'Eliminación falló');
    }
  } catch (error) {
    console.error('Eliminación falló:', error);
    throw error;
  }
}

Lista de Verificación de Seguridad

Antes de realizar operaciones DELETE en producción:

  • ✓ He revisado lo que será eliminado
  • ✓ Entiendo que las eliminaciones son permanentes
  • ✓ He respaldado datos críticos (si aplica)
  • ✓ He probado esta operación en desarrollo
  • ✓ He implementado manejo de errores para advertencias
  • ✓ Mi aplicación registra impactos cascade para auditoría

Escenarios Comunes

Escenario 1: Limpiando Datos Antiguos

Objetivo: Remover trades de demostración antiguos sin afectar datos reales

# Paso 1: Consultar trades de demo
curl -X GET "https://api.mypropjournal.com/api/v1/trades?tags=demo&limit=100" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Paso 2: Eliminar cada trade (advertencias mostrarán ejecuciones eliminadas)
curl -X DELETE "https://api.mypropjournal.com/api/v1/trades/TRADE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Escenario 2: Reorganizando Estrategias

Objetivo: Eliminar estrategia antigua y actualizar referencias

# Paso 1: Verificar qué usa esta estrategia
curl -X GET "https://api.mypropjournal.com/api/v1/strategies/STRATEGY_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Paso 2: Actualizar trades para usar nueva estrategia (opcional)
curl -X PUT "https://api.mypropjournal.com/api/v1/trades/TRADE_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"strategy_id": "NEW_STRATEGY_ID"}'

# Paso 3: Eliminar estrategia antigua (SET NULL desvinculará referencias restantes)
curl -X DELETE "https://api.mypropjournal.com/api/v1/strategies/STRATEGY_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

Escenario 3: Archivar en Lugar de Eliminar

Para cuentas, usa el flag de archivo en lugar de eliminar:

# Archivar cuenta (preserva todos los datos)
curl -X PUT "https://api.mypropjournal.com/api/v1/accounts/ACCOUNT_ID" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"archived": true}'

# Listar solo cuentas activas
curl -X GET "https://api.mypropjournal.com/api/v1/accounts?archived=active" \
  -H "Authorization: Bearer YOUR_API_KEY"

Recuperación de Errores

Si Eliminas Datos Accidentalmente

NO HAY deshacer para operaciones DELETE. Los datos se eliminan permanentemente de la base de datos.

La prevención es clave:

  1. Siempre probar eliminaciones en desarrollo primero
  2. Exportar/respaldar antes de eliminaciones masivas
  3. Usar funciones de archivo cuando estén disponibles
  4. Implementar diálogos de confirmación en tu UI
  5. Requerir permisos elevados para eliminaciones de alto riesgo

Documentación Relacionada


¿Preguntas? Si necesitas aclaración sobre el comportamiento CASCADE para un recurso específico, consulta la documentación del endpoint individual o contacta al soporte.