Skip to content

Fix regresión ON CONFLICT + endpoint de diagnóstico de puntos J8 - #4

Merged
danguz80 merged 1 commit into
mainfrom
claude/libertadores-penalties-admin-s9py1b
Aug 21, 2026
Merged

Fix regresión ON CONFLICT + endpoint de diagnóstico de puntos J8#4
danguz80 merged 1 commit into
mainfrom
claude/libertadores-penalties-admin-s9py1b

Conversation

@danguz80

Copy link
Copy Markdown
Owner

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 un UNIQUE constraint con esas 3 columnas en libertadores_puntos_clasificacion. Esa tabla se crea con CREATE 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 el UNIQUE declarado ahí puede no existir realmente en la base viva.

Si no existe, Postgres rechaza el ON CONFLICT con 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

  • 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 las jornadas 6 y 10 en este mismo archivo.
  • Se agrega un endpoint temporal de solo lectura, GET /api/libertadores/debug/puntos/:usuarioId/:jornadaNumero, para poder ver en vivo el detalle crudo de libertadores_pronosticos (incluyendo si el partido_id referenciado sigue existiendo) y libertadores_puntos_clasificacion de 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>/8 para ver el detalle exacto.


🤖 Generated with Claude Code


Generated by Claude Code

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.
Copilot AI lite review requested due to automatic review settings August 21, 2026 02:17
@danguz80
danguz80 merged commit 767b26e into main Aug 21, 2026
@netlify

netlify Bot commented Aug 21, 2026

Copy link
Copy Markdown

Deploy Preview for pollafutbol canceled.

Name Link
🔨 Latest commit d99f401
🔍 Latest deploy log https://app.netlify.com/projects/pollafutbol/deploys/6a87b5356747f800084b158a

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 el INSERT de libertadores_puntos_clasificacion, confiando en el DELETE previo para idempotencia.
  • Se agrega GET /api/libertadores/debug/puntos/:usuarioId/:jornadaNumero para 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;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants