Skip to content

gWAR API Endpoints and UI #173

@grovecj

Description

@grovecj

Overview

Add API endpoints for gWAR leaderboards and player gWAR breakdown, plus UI integration.

Parent Issue

Part of #94 (WAR and Advanced Stats)

API Endpoints

gWAR Leaderboards

GET /api/players/leaders/gwar/batting?season={year}&limit={n}
GET /api/players/leaders/gwar/pitching?season={year}&limit={n}

gWAR Breakdown (Component Details)

GET /api/players/{id}/gwar-breakdown?season={year}

Response:

{
  "player": { "id": 123, "name": "Shohei Ohtani" },
  "season": 2024,
  "gwar": 8.5,
  "officialWar": 8.3,
  "components": {
    "batting": 65.2,
    "baserunning": 4.1,
    "fielding": 0.0,
    "positional": -10.8,
    "replacement": 26.5
  },
  "methodology": "/docs/gwar"
}

Files to Modify

api/dto/BattingStatsDto.java

Add fields:

  • gwar, gwarBatting, gwarBaserunning, gwarFielding, gwarPositional, gwarReplacement, oaa

api/dto/PitchingStatsDto.java

Add fields:

  • gwar, gwarPitching, gwarReplacement

api/controller/PlayerController.java

Add endpoints for gWAR leaderboards and breakdown.

api/service/PlayerApiService.java

Add service methods with caching.

domain/stats/PlayerBattingStatsRepository.java

Add query:

List<PlayerBattingStats> findTopGwar(Integer season, Pageable pageable);

Files to Create

api/dto/GwarBreakdownDto.java

public record GwarBreakdownDto(
    PlayerDto player,
    Integer season,
    BigDecimal gwar,
    BigDecimal officialWar,
    BigDecimal batting,
    BigDecimal baserunning,
    BigDecimal fielding,
    BigDecimal positional,
    BigDecimal replacement,
    String methodology
) {}

Frontend Integration

Update existing advanced stats UI to show:

  • gWAR alongside official WAR
  • Tooltip explaining gWAR methodology
  • Component breakdown on player profile

Test Cases

  • Leaderboard returns sorted by gWAR
  • Breakdown includes all components
  • Null handling for players without gWAR
  • Caching works correctly

Acceptance Criteria

  • gWAR leaderboard endpoints work
  • Breakdown endpoint shows components
  • DTOs include all gWAR fields
  • Leaderboard queries are performant (indexed)
  • Frontend shows gWAR on player stats

Dependencies

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions