← Volver a TableManagerController

🔄 Sincronización de Estados

Endpoint para sincronizar estados de mesas con cabeceras

Descripción General

El endpoint de Sincronización de Estados asegura que el estado de las mesas (MesasEstado) coincida con la situación real de las cabeceras de mesa (MesasCabecera). Este endpoint es fundamental para mantener la integridad de datos y corregir inconsistencias entre las tablas de estado y cabeceras.

🎯 Funcionalidades de Sincronización

  • Sincronización automática: Alinea estados con cabeceras existentes
  • Limpieza de datos: Elimina estados huérfanos sin cabeceras
  • Corrección de inconsistencias: Repara referencias a facturas inexistentes
  • Detección de duplicados: Identifica cabeceras duplicadas por factura
  • Reporte detallado: Proporciona resumen de acciones realizadas
  • Manejo de errores: Gestiona errores durante la sincronización
  • Integridad de datos: Mantiene consistencia entre tablas

Endpoint Disponible

POST /api/TableManager/sync-table-states

Sincroniza todos los estados de mesa (MesasEstado) con las cabeceras actuales (MesasCabecera). Este endpoint asegura que el estado de las mesas coincida con la situación real de las cabeceras de mesa, corrigiendo inconsistencias y limpiando datos huérfanos.
Headers:
  • initialCatalog (string, requerido): Nombre de la base de datos
  • userID (string, opcional): ID de usuario de la base de datos
  • password (string, opcional): Contraseña de la base de datos
200 OK
Sincronización completada exitosamente
{ "success": true, "info": [ "Se sincronizaron 15 estados de mesa", "Se eliminaron 3 estados huérfanos", "Se corrigieron 2 referencias a facturas inexistentes", "Se detectaron 1 cabecera duplicada" ], "errors": [ "Error al procesar mesa 5 del salón 2: Factura 12345 no encontrada" ], "summary": { "totalProcessed": 15, "statesUpdated": 12, "orphanStatesDeleted": 3, "invalidReferencesFixed": 2, "duplicatesFound": 1, "errorsCount": 1 } }
500 Internal Server Error
Error interno durante la sincronización
{ "success": false, "error": "Error de conexión a la base de datos durante la sincronización", "details": "Timeout en la operación de sincronización" }

Lógica de Sincronización

📋 Reglas de Sincronización

  • Si existe cabecera y está facturada: Estado se establece como 'F' (Facturada)
  • Si existe cabecera y NO está facturada: Estado se establece como 'E' (En Servicio)
  • Si existe estado sin cabecera: Se elimina el estado (huérfano)
  • Si cabecera referencia factura inexistente: Se limpian los campos y se reporta
  • Si hay cabeceras duplicadas por factura: Se reporta como error
  • Si hay inconsistencias en datos: Se corrigen automáticamente

🔍 Estados de Mesa

  • D (Disponible): Mesa libre para nuevos clientes
  • E (En Servicio): Mesa con comanda activa
  • F (Facturada): Mesa con factura generada
  • R (Refacturada): Mesa facturada con nuevos pedidos

Casos de Uso

🎯 Escenarios de Aplicación

  • Después de importación de datos: Corregir inconsistencias post-importación
  • Mantenimiento del sistema: Limpiar datos después de mantenimiento
  • Corrección de errores: Reparar inconsistencias detectadas
  • Limpieza periódica: Mantener integridad de datos
  • Auditoría de datos: Verificar consistencia entre tablas
  • Recuperación de errores: Restaurar consistencia después de fallos
  • Migración de datos: Sincronizar después de migraciones

⚠️ Consideraciones de Seguridad

  • Este endpoint modifica múltiples registros en la base de datos
  • Se recomienda ejecutar en horarios de bajo tráfico
  • Realizar backup antes de ejecutar en producción
  • Verificar permisos de administrador para ejecutar
  • Monitorear el impacto en el rendimiento del sistema
  • Implementar logging detallado de las operaciones

📝 Consideraciones Técnicas

  • Operación asíncrona: Puede tomar tiempo en bases de datos grandes
  • Transacciones: Operaciones atómicas para mantener consistencia
  • Rollback automático: En caso de error, se revierten los cambios
  • Reporte detallado: Información completa de acciones realizadas
  • Manejo de errores: Continúa procesando aunque haya errores
  • Optimización: Procesamiento eficiente de grandes volúmenes

Ejemplos de Uso

🔧 Ejemplo con cURL

curl -X POST \ 'http://localhost:1379/api/TableManager/sync-table-states' \ -H 'accept: application/json' \ -H 'initialCatalog: ELSIFON'

🔧 Ejemplo con JavaScript (Fetch API)

fetch('/api/TableManager/sync-table-states', { method: 'POST', headers: { 'Accept': 'application/json', 'initialCatalog': 'ELSIFON' } }) .then(response => response.json()) .then(data => { console.log('Sincronización completada:', data.success); console.log('Acciones realizadas:', data.info); console.log('Errores encontrados:', data.errors); console.log('Resumen:', data.summary); }) .catch(error => console.error('Error:', error));

🔧 Ejemplo con C# (HttpClient)

using var client = new HttpClient(); client.DefaultRequestHeaders.Add("initialCatalog", "ELSIFON"); var response = await client.PostAsync( "http://localhost:1379/api/TableManager/sync-table-states", null); var result = await response.Content.ReadAsStringAsync(); var syncResult = JsonSerializer.Deserialize(result); Console.WriteLine($"Sincronización exitosa: {syncResult.Success}"); Console.WriteLine($"Total procesado: {syncResult.Summary.TotalProcessed}"); Console.WriteLine($"Estados actualizados: {syncResult.Summary.StatesUpdated}"); Console.WriteLine($"Errores: {syncResult.Summary.ErrorsCount}");

Servicio Utilizado

ITableManagerService - Servicio para la sincronización de estados
  • SyncAllTableStatesWithHeaders(): Sincroniza todos los estados con cabeceras

Consideraciones de Rendimiento

⚡ Optimizaciones

  • Procesamiento por lotes: Procesa mesas en grupos para mejor rendimiento
  • Índices optimizados: Uso de índices para consultas eficientes
  • Transacciones controladas: Tamaño de transacciones optimizado
  • Manejo de memoria: Procesamiento streaming para grandes volúmenes
  • Timeout configurable: Límites de tiempo para operaciones largas
  • Logging selectivo: Solo registra operaciones importantes

⚠️ Limitaciones

  • Puede tomar varios minutos en bases de datos grandes
  • Requiere recursos significativos de base de datos
  • Puede afectar el rendimiento de otras operaciones
  • Se recomienda ejecutar en horarios de bajo tráfico
  • Puede requerir reinicio de servicios después de cambios masivos