Fix stats player profile weekly monthly 500

This commit is contained in:
devRaGonSa
2026-06-11 14:44:06 +02:00
parent beecc90fa7
commit 2b5f9c56e3
3 changed files with 188 additions and 21 deletions

View File

@@ -0,0 +1,78 @@
# TASK-255 - Fix stats player profile weekly/monthly 500
## Summary
This task fixes the public player-profile weekly/monthly endpoints after a production audit reported:
- `stats-player-profile-weekly` -> `500`
- `stats-player-profile-monthly` -> `500`
The fix prioritizes endpoint availability and fast response over optional KPM enrichment.
## Affected Endpoint
Route:
- `/api/stats/players/{player_id}?timeframe=weekly`
- `/api/stats/players/{player_id}?timeframe=monthly`
Handler chain:
- `backend/app/routes.py`
- `build_stats_player_profile_payload(...)`
- `get_rcon_materialized_player_stats(...)`
- `_get_player_period_stats_read_model(...)`
## Root Cause
The player-period read model path already handled missing read-model rows defensively.
However, after the base read-model rows were loaded, the code opened a second read scope to compute optional active-time/KPM data:
- `player_active_seconds`
- `player_active_minutes`
- `kpm`
- `kpm_status`
- `active_time_source`
- `active_time_coverage`
That second lookup lived outside the original `try/except`.
If production schema or compatibility differences caused the active-time query to fail, the exception propagated and the whole profile endpoint returned `500` even though the base weekly/monthly profile data was already available.
## Fix
- keep weekly/monthly profile reads read-model-first
- keep runtime-heavy fallback disabled
- wrap the optional active-time read-model enrichment in a defensive fallback
- if active-time enrichment fails:
- return `kpm = null`
- return `kpm_status = missing_active_time`
- return `player_active_seconds = null`
- return `player_active_minutes = null`
- keep external links and platform identity
- still return `200`
This preserves public endpoint speed and avoids breaking the UI when KPM coverage is unavailable.
## Validation
Executed:
- `python -m compileall backend/app`
- `cd backend; python -m unittest tests.test_current_match_payload`
- `cd backend; python -m unittest tests.test_historical_snapshot_refresh`
- `cd backend; python -m unittest tests.test_stats_player_profile_payload`
Expected post-fix audit command:
```powershell
python .\scripts\audit_public_requests.py --base-url https://comunidadhll.devzamode.es --timeout 30 --output tmp\task255_full_audit_after.json
```
## Notes
- No TeamKills change.
- No scheduler change.
- No RCON/server configuration change.
- No asset change.