diff --git a/backend/src/api_football_data/football_data_org.py b/backend/src/api_football_data/football_data_org.py index e0f8270..6634bfc 100644 --- a/backend/src/api_football_data/football_data_org.py +++ b/backend/src/api_football_data/football_data_org.py @@ -251,6 +251,8 @@ async def update_ranking(db: AsyncSession, tournament: Tournament, force_refresh if not force_refresh and hash_file.is_file() and hash_file.read_text().strip() == data_hash: logger.info(f"No ranking changes detected for tournament {tournament.id} — skipping update.") return + + groups_recalculate_points = [] for fd_standing in fd_standings: group_name = transform_name(fd_standing["group"]) @@ -288,9 +290,13 @@ async def update_ranking(db: AsyncSession, tournament: Tournament, force_refresh matched_group.winner_team_id = winning_team_id logger.info(f"Set winner of group '{group_name}' for tournament '{tournament.name}' ({tournament.id}) to team ID {winning_team_id}.") + groups_recalculate_points.append(matched_group.id) await db.commit() + for group_id in groups_recalculate_points: + await predictions_scoring.recalculate_group_points(db, group_id) + hash_file.write_text(data_hash) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a688b08..1445f75 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "dependencies": { "@reduxjs/toolkit": "^2.12.0", - "@sentry/react": "^10.56.0", + "@sentry/react": "^10.57.0", "lucide-react": "^1.17.0", "react": "^19.2.7", "react-dom": "^19.2.7", @@ -19,11 +19,11 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/postcss": "^4.3.1", - "@types/react": "^19.2.16", + "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.4.20", - "eslint": "^10.4.1", + "eslint": "^10.5.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.3", "globals": "^17.6.0", @@ -885,88 +885,88 @@ "license": "MIT" }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.56.0.tgz", - "integrity": "sha512-I8tZWAFg8SZpD8BFUpglEtSTzhZjacmcThB5/Mlq/iFiiT8mBPG4ZWDWssSfmIBKvZywJZJ83uDA0+uiJU73Tw==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.57.0.tgz", + "integrity": "sha512-tXObp954rMTSYKlbftjVXHtNl4t/6ssks3jkqyzmKb+PDPWzabGQO7sWwqVuTjT8Kx/8A3FmriS1bGmqxiJy3A==", "license": "MIT", "dependencies": { - "@sentry/core": "10.56.0" + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.56.0.tgz", - "integrity": "sha512-fkRR9JroESTIlErkht3OrH4DXKd/DbPozr2KLdX7boMo31hPu4cL9fuqzwOrwyDPRq9B4j+qEgIWB8JrTbgvmg==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.57.0.tgz", + "integrity": "sha512-ZcF4QhkqGX3iiQSXB2N0N3Awp+j5iqnDRu6PA/qyLFrWqH5ZiiAAgu59OLD9E6XAdg6iFtLYw19MAMZVK8qNOQ==", "license": "MIT", "dependencies": { - "@sentry/core": "10.56.0" + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.56.0.tgz", - "integrity": "sha512-DjF09hpy3TF7Km/kOZc73YJmBqcbPCxuZ5rtRs+KtVHu3Vq48xeW83qKUcFEZv20ur9UD99OAJ/gaEt//1Qbwg==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.57.0.tgz", + "integrity": "sha512-Wmnx/6ABynVH1iwuoNUqJNyjIUqsqoGML7qsyivBRKb5Wo2YQtPOQlQYfxfZSvWzGpcoSVdInkRjDssUQxQEQg==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.56.0", - "@sentry/core": "10.56.0" + "@sentry-internal/browser-utils": "10.57.0", + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.56.0.tgz", - "integrity": "sha512-SDg2K0CAZT/TnhrixQGwXoi6ZsWUB+DQy3UUk0bSQm6c/5k5zFBpGOiughQN+DYsDilKREfPKmUEEnqvUjm1HQ==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.57.0.tgz", + "integrity": "sha512-zsfa4JcfV0AEc9YhNxNabd5lSZL2Av84saAyexGAqcHs+67m9Gd0cGStOzMb/nCl7UAtmdP0aI+G7a3rcxxN/A==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.56.0", - "@sentry/core": "10.56.0" + "@sentry-internal/replay": "10.57.0", + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/browser": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.56.0.tgz", - "integrity": "sha512-80X3NmsGB6tLmfzXYdjzWWdVAdL5CRukGKLcRWIcNhgGjtskOmnzaGb93egEZGI5bUTbtONJ0oyscQ3Z9yoAtQ==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.57.0.tgz", + "integrity": "sha512-s36AQy/CKXTfyY9Z+qUhzNomntZXgfs0rbaK7q9ffnFkqcPwzE8qQtVs58y3Suut56u+AhwSztgQtERcuZ5VIA==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.56.0", - "@sentry-internal/feedback": "10.56.0", - "@sentry-internal/replay": "10.56.0", - "@sentry-internal/replay-canvas": "10.56.0", - "@sentry/core": "10.56.0" + "@sentry-internal/browser-utils": "10.57.0", + "@sentry-internal/feedback": "10.57.0", + "@sentry-internal/replay": "10.57.0", + "@sentry-internal/replay-canvas": "10.57.0", + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/core": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.56.0.tgz", - "integrity": "sha512-L+u1dIz5SANrmST5jhIwETtt4apILgKrylv12X4hKJU0PvZl+NorjeV/ty3MwzpKQPg6b6q6qMOSLc1rLpy3iQ==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.57.0.tgz", + "integrity": "sha512-kntItTA2kiT0YpL7encXaF6mkdZMB+y48lwj8w1wkfBpfJAC7sifdgrzLQZqmsqVNE3crg9VfufaAGA+78uFMg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/react": { - "version": "10.56.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.56.0.tgz", - "integrity": "sha512-HfPLyvnrydfyjRXw9Q0GMzj7w2YtEwuC9z5RrPUfarA2qpA0/J8cfGLzyFX2v0jBmA/kkj6J1uBUoSVhCTxFHg==", + "version": "10.57.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.57.0.tgz", + "integrity": "sha512-6QThwQ4XWQ2rwKZEVQ9P9WKl7JlowC7S5LpAvmMdrwlfJBpLDFOsM7tycnIvbXTXf0ZOOuLFPa4L4YYbdyNGmA==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.56.0", - "@sentry/core": "10.56.0" + "@sentry/browser": "10.57.0", + "@sentry/core": "10.57.0" }, "engines": { "node": ">=18" @@ -1291,9 +1291,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.16.tgz", - "integrity": "sha512-esJiCAnl0kfpNdE69f3So4WJUXy95dLZydX0KwK46riIHDzHM7O9Vtf9xCHW0PXIqvgqNrswl522kA/5yx+F4w==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1875,11 +1875,14 @@ } }, "node_modules/eslint": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", - "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", + "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", diff --git a/frontend/package.json b/frontend/package.json index a49ab92..fab422a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@reduxjs/toolkit": "^2.12.0", - "@sentry/react": "^10.56.0", + "@sentry/react": "^10.57.0", "lucide-react": "^1.17.0", "react": "^19.2.7", "react-dom": "^19.2.7", @@ -21,11 +21,11 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@tailwindcss/postcss": "^4.3.1", - "@types/react": "^19.2.16", + "@types/react": "^19.2.17", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "autoprefixer": "^10.4.20", - "eslint": "^10.4.1", + "eslint": "^10.5.0", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.3", "globals": "^17.6.0",