golfgame/server/stores
Aaron D. Lee f27020f21b Fix V2 race conditions, auth gaps, serialization bugs, and async stats
Phase 1 - Critical Fixes:
- Add game_lock (asyncio.Lock) to Room class for serializing mutations
- Wrap all game action handlers in lock to prevent race conditions
- Split Card.to_dict into to_dict (full data) and to_client_dict (hidden)
- Fix CardState.from_dict to handle missing rank/suit gracefully
- Fix GameOptions reconstruction in recovery_service (dict -> object)
- Extend state cache TTL from 4h to 24h, add touch_game method

Phase 2 - Security:
- Add optional WebSocket authentication via token query param
- Use authenticated user ID/name when available
- Add auth support to spectator WebSocket endpoint

Phase 3 - Performance:
- Make stats processing async (fire-and-forget) to avoid blocking
  game completion notifications

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:27:30 -05:00
..
__init__.py Huge v2 uplift, now deployable with real user management and tooling! 2026-01-27 11:32:15 -05:00
event_store.py Huge v2 uplift, now deployable with real user management and tooling! 2026-01-27 11:32:15 -05:00
pubsub.py Huge v2 uplift, now deployable with real user management and tooling! 2026-01-27 11:32:15 -05:00
state_cache.py Fix V2 race conditions, auth gaps, serialization bugs, and async stats 2026-01-27 16:27:30 -05:00
user_store.py Huge v2 uplift, now deployable with real user management and tooling! 2026-01-27 11:32:15 -05:00