Cash Backend · Optimización de base de datos
Suite de pruebas de calidad ejecutada el 15-16 de julio de 2026 sobre el ambiente de QA. Cubre casos borde de la API, integridad de la base de datos, el flujo de usuario nuevo, la sincronización con Zoho CRM y pruebas reales con el frontend del juego. Todas las pruebas se superaron; las dos incidencias detectadas fueron corregidas y validadas.
Verificación criptográfica (SHA-256): se confirmó que ningún dato de partida se pierde ni se altera al separar el estado vigente del historial. Cada marcador liviano coincide exactamente, en hash y tamaño, con su payload completo almacenado.
Impacto de la optimización: cada guardado en el historial pasó de ~402,742 bytes a un marcador de 230 bytes — una reducción de ~1,750x, conservando el estado jugable completo en la tabla de estado vigente.
POST /saveLa API valida y rechaza toda entrada inválida antes de escribir en la base de datos, y procesa correctamente cargas grandes, caracteres especiales y guardados rápidos o simultáneos.
| Prueba | Esperado | Resultado | Estado |
|---|---|---|---|
| Cuerpo JSON malformado | Rechazo (400) | 400 · "must be valid JSON" | Aprobado |
game_save no es objeto (array / texto / nulo) | Rechazo (400) | 400 · los 3 casos | Aprobado |
| Reenvío de un marcador como si fuera guardado | Rechazo (400) | 400 · "legacy save marker" | Aprobado |
| Payload sin señal de partida jugable | Rechazo (400) | 400 | Aprobado |
| Payload grande válido (~5 MB) | Aceptado (201) | 201 creado | Aprobado |
| Payload sobre el límite (~8.3 MB) | Rechazo | 413 (límite de plataforma) | Aprobado |
| Caracteres especiales / unicode (tildes, emoji, comillas) | Ida y vuelta idéntica | 201 + lectura idéntica | Aprobado |
| 10 guardados rápidos secuenciales | 1 estado vigente = el último | 10× 201 · último correcto | Aprobado |
| 5 guardados concurrentes (en paralelo) | Sin duplicados ni errores | 5× 201 · 1 sola fila vigente | Aprobado |
GET /save| Prueba | Esperado | Resultado | Estado |
|---|---|---|---|
| Lectura del payload completo desde el estado vigente | 200 con payload y metadatos | 200 · ~402 KB | Aprobado |
| Restauración del guardado original tras las pruebas | Estado original recuperado | 201 + lectura original | Aprobado |
| Prueba | Esperado | Resultado | Estado |
|---|---|---|---|
GET /save sin credenciales | Denegado (401) | 401 | Aprobado |
POST /save sin credenciales | Denegado (401) | 401 | Aprobado |
| Credencial inválida / corrupta | Denegado (403) | 403 | Aprobado |
Se validó el primer guardado de una cuenta nueva —la creación del estado vigente desde cero— con una cuenta desechable que se eliminó por completo al finalizar.
| Prueba | Esperado | Resultado | Estado |
|---|---|---|---|
| Registro de usuario nuevo | 201 + usuario | 201 | Aprobado |
| Usuario sin guardados: lectura | 200 sin error | 200 · vacío | Aprobado |
| Primer guardado (creación del estado vigente) | 201 + estado creado | 201 · 1 marcador + 1 fila nueva | Aprobado |
| Lectura del primer guardado | Payload completo | 200 correcto | Aprobado |
| Eliminación y limpieza total (DB + autenticación) | 0 rastros | Cuenta eliminada por completo | Aprobado |
Verificaciones de solo lectura sobre toda la base de QA.
| Verificación | Resultado | Estado |
|---|---|---|
| Un solo estado vigente por usuario, sin duplicados | 221 filas / 221 usuarios / 0 duplicados | Aprobado |
| Ningún marcador dentro de la tabla de estado vigente | 0 | Aprobado |
| Todas las referencias internas resuelven | 0 rotas | Aprobado |
| Forma y tamaño de los marcadores del historial | máx. 231 bytes · 0 malformados | Aprobado |
| Verificación criptográfica (hash + tamaño) | Coincidencia exacta · 0 discrepancias | Aprobado |
| Backfill intacto (usuarios sin escrituras nuevas) | Idéntico a su origen (100%) | Aprobado |
| Prueba | Resultado | Estado |
|---|---|---|
| Ciclo automático programado (sin intervención manual) | 18 registros · procesados: 18 · pendientes: 0 | Aprobado |
| El marcador liviano no afecta a Zoho | No se envía game_save | Aprobado |
| Solo se sincronizan registros recientes (histórico excluido) | 1,063 filas antiguas excluidas por diseño | Aprobado |
Las pruebas exhaustivas detectaron dos incidencias preexistentes (no introducidas por la optimización). Ambas fueron corregidas, desplegadas y validadas en QA.
| Incidencia | Corrección | Validación | Estado |
|---|---|---|---|
| El borrado de un usuario con guardados fallaba | Se incluyen las tablas de guardado en el borrado | Borrado con guardados → 200 · limpieza total | Corregido |
| El registro podía dejar una cuenta de autenticación huérfana | Validación previa y limpieza ante fallo | Sin huérfanos · validación 400 clara | Corregido |
Dos cuentas reales continuaron sus partidas contra QA -con historiales de 3,517 y 27 guardados- iy ambas produjeron la separación correcta entre marcador liviano y estado vigente completo. La lectura se sirvió desde la tabla de estado vigente, sin cambios visibles para el jugador y sin alterar el contrato de la API.
Las pruebas se ejecutaron contra el ambiente de QA a través de la API pública, con datos de prueba reales y verificación directa en la base de datos. Los resultados crudos (salidas del sistema) se conservan como respaldo técnico junto a este resumen. Los guardados de prueba se limpiaron al finalizar y el guardado original de la cuenta de pruebas fue restaurado.