This commit captures work from multiple sessions building the statistics system and frontend component library. Backend - Phase 3.5: Statistics System - Box score statistics with materialized views - Play stat calculator for real-time updates - Stat view refresher service - Alembic migration for materialized views - Test coverage: 41 new tests (all passing) Frontend - Phase F1: Foundation - Composables: useGameState, useGameActions, useWebSocket - Type definitions and interfaces - Store setup with Pinia Frontend - Phase F2: Game Display - ScoreBoard, GameBoard, CurrentSituation, PlayByPlay components - Demo page at /demo Frontend - Phase F3: Decision Inputs - DefensiveSetup, OffensiveApproach, StolenBaseInputs components - DecisionPanel orchestration - Demo page at /demo-decisions - Test coverage: 213 tests passing Frontend - Phase F4: Dice & Manual Outcome - DiceRoller component - ManualOutcomeEntry with validation - PlayResult display - GameplayPanel orchestration - Demo page at /demo-gameplay - Test coverage: 119 tests passing Frontend - Phase F5: Substitutions - PinchHitterSelector, DefensiveReplacementSelector, PitchingChangeSelector - SubstitutionPanel with tab navigation - Demo page at /demo-substitutions - Test coverage: 114 tests passing Documentation: - PHASE_3_5_HANDOFF.md - Statistics system handoff - PHASE_F2_COMPLETE.md - Game display completion - Frontend phase planning docs - NEXT_SESSION.md updated for Phase F6 Configuration: - Package updates (Nuxt 4 fixes) - Tailwind config enhancements - Game store updates Test Status: - Backend: 731/731 passing (100%) - Frontend: 446/446 passing (100%) - Total: 1,177 tests passing Next Phase: F6 - Integration (wire all components into game page) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
30 lines
903 B
Python
30 lines
903 B
Python
"""
|
|
Services - External API clients and caching services.
|
|
|
|
Provides access to external APIs and caching layers for the game engine.
|
|
|
|
Author: Claude
|
|
Date: 2025-11-03
|
|
"""
|
|
|
|
from app.services.pd_api_client import PdApiClient, pd_api_client
|
|
from app.services.position_rating_service import PositionRatingService, position_rating_service
|
|
from app.services.redis_client import RedisClient, redis_client
|
|
from app.services.play_stat_calculator import PlayStatCalculator
|
|
from app.services.box_score_service import BoxScoreService, box_score_service
|
|
from app.services.stat_view_refresher import StatViewRefresher, stat_view_refresher
|
|
|
|
__all__ = [
|
|
"PdApiClient",
|
|
"pd_api_client",
|
|
"PositionRatingService",
|
|
"position_rating_service",
|
|
"RedisClient",
|
|
"redis_client",
|
|
"PlayStatCalculator",
|
|
"BoxScoreService",
|
|
"box_score_service",
|
|
"StatViewRefresher",
|
|
"stat_view_refresher",
|
|
]
|