Fix regresión ON CONFLICT + endpoint de diagnóstico de puntos J8 - #4
Merged
Merged
Conversation
El ON CONFLICT (usuario_id, partido_id, jornada_numero) agregado en el commit anterior asume que existe un UNIQUE constraint con esas 3 columnas en libertadores_puntos_clasificacion. Esa tabla se crea con CREATE TABLE IF NOT EXISTS, así que si ya existía en producción (muy probable, la usa también el cálculo de J6) esa sentencia no hace nada y el UNIQUE declarado ahí puede no existir realmente. Si no existe, Postgres rechaza el ON CONFLICT con error, lo que aborta el resto del cálculo de puntos y deja la clasificación de la jornada en 0 en vez del valor correcto — esto probablemente explica que el acumulado haya bajado de más de la cuenta tras el fix anterior. Se quita el ON CONFLICT y se deja que el DELETE previo (que no depende de ningún constraint) sea la única fuente de idempotencia, igual que ya hacían J6 y J10 en este mismo archivo. Se agrega también GET /api/libertadores/debug/puntos/:usuarioId/:jornadaNumero (temporal, solo lectura) para poder inspeccionar en vivo la diferencia entre lo que suma la tabla de 'Partidos' y lo que suma el ranking de jornada/acumulado, sin necesitar acceso directo a la base de datos.
✅ Deploy Preview for pollafutbol canceled.
|
There was a problem hiding this comment.
Pull request overview
Este PR corrige una regresión en el recálculo de puntos de Libertadores eliminando el ON CONFLICT que podía fallar en producción por ausencia real del UNIQUE en una tabla ya existente, y agrega un endpoint temporal de diagnóstico para inspeccionar puntos/pronósticos de un usuario por jornada.
Changes:
- Se elimina
ON CONFLICT (usuario_id, partido_id, jornada_numero)en elINSERTdelibertadores_puntos_clasificacion, confiando en elDELETEprevio para idempotencia. - Se agrega
GET /api/libertadores/debug/puntos/:usuarioId/:jornadaNumeropara depurar en vivo pronósticos (incluyendo huérfanos) y puntos de clasificación de una jornada.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| server/routes/libertadores.js | Agrega endpoint temporal de diagnóstico de puntos por usuario/jornada. |
| server/routes/calcularPuntosLibertadores.js | Quita ON CONFLICT para evitar abortos del cálculo cuando falta el UNIQUE en producción. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+233
to
+236
| router.get('/debug/puntos/:usuarioId/:jornadaNumero', async (req, res) => { | ||
| try { | ||
| const { usuarioId, jornadaNumero } = req.params; | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Contexto
Seguimiento del PR #3. Tras desplegarlo y recalcular puntos, el acumulado de Libertadores cambió (178→172) pero el Ranking de Jornada 8 siguió mostrando 2 pts en vez de 1, y el acumulado quedó en 172 en vez de los 173 esperados.
Bug encontrado: regresión introducida en el PR anterior
El
ON CONFLICT (usuario_id, partido_id, jornada_numero)que agregué en el PR #3 asume que existe unUNIQUEconstraint con esas 3 columnas enlibertadores_puntos_clasificacion. Esa tabla se crea conCREATE TABLE IF NOT EXISTS— si ya existía en producción (muy probable, la usa también el cálculo de Jornada 6, que es anterior a la lógica de octavos), esa sentencia no hace nada y elUNIQUEdeclarado ahí puede no existir realmente en la base viva.Si no existe, Postgres rechaza el
ON CONFLICTcon un error, lo que aborta el resto del cálculo de puntos y deja la clasificación de esa jornada en 0 en vez del valor correcto. Esto probablemente explica por qué el acumulado bajó de 178 a 172 (el bonus de clasificación se fue a 0 en vez de quedar en el valor correcto de 2) en lugar de subir a 173 como debía.Cambios
ON CONFLICTy se deja que elDELETEprevio (que no depende de ningún constraint) sea la única fuente de idempotencia — igual que ya hacían las jornadas 6 y 10 en este mismo archivo.GET /api/libertadores/debug/puntos/:usuarioId/:jornadaNumero, para poder ver en vivo el detalle crudo delibertadores_pronosticos(incluyendo si elpartido_idreferenciado sigue existiendo) ylibertadores_puntos_clasificacionde un usuario en una jornada, y así confirmar con datos reales — sin acceso directo a la base — por qué el Ranking de Jornada 8 sigue mostrando un punto de más. Es de solo lectura y no expone datos sensibles; se puede quitar una vez cerrado el diagnóstico.Próximo paso
Tras este deploy: volver a presionar "Calcular Puntos" para la Jornada 8, y si el número sigue sin cuadrar, consultar
/api/libertadores/debug/puntos/<id_de_daniel>/8para ver el detalle exacto.🤖 Generated with Claude Code
Generated by Claude Code