Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -229,4 +229,20 @@ public ResponseEntity<PlayerComparisonDto> comparePlayers(

return ResponseEntity.ok(playerApiService.comparePlayerStats(playerIds, seasonList, careerMode));
}

@GetMapping("/{id}/batting-splits")
@Operation(summary = "Get player batting splits", description = "Returns batting splits for a player (home/away, vs LHP/RHP, etc.)")
public ResponseEntity<List<BattingSplitDto>> getPlayerBattingSplits(
@PathVariable Long id,
@RequestParam(required = false) Integer season) {
return ResponseEntity.ok(playerApiService.getPlayerBattingSplits(id, season));
}

@GetMapping("/{id}/pitching-splits")
@Operation(summary = "Get player pitching splits", description = "Returns pitching splits for a player (home/away, vs LHB/RHB, etc.)")
public ResponseEntity<List<PitchingSplitDto>> getPlayerPitchingSplits(
@PathVariable Long id,
@RequestParam(required = false) Integer season) {
return ResponseEntity.ok(playerApiService.getPlayerPitchingSplits(id, season));
}
}
84 changes: 84 additions & 0 deletions backend/src/main/java/com/mlbstats/api/dto/BattingSplitDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.mlbstats.api.dto;

import com.mlbstats.domain.stats.PlayerBattingSplit;
import com.mlbstats.domain.stats.SplitType;

import java.math.BigDecimal;

public record BattingSplitDto(
Long id,
Long playerId,
Long teamId,
Integer season,
SplitType splitType,
String splitTypeDisplay,
Integer gamesPlayed,
Integer plateAppearances,
Integer atBats,
Integer runs,
Integer hits,
Integer doubles,
Integer triples,
Integer homeRuns,
Integer rbi,
Integer walks,
Integer strikeouts,
Integer stolenBases,
BigDecimal battingAvg,
BigDecimal obp,
BigDecimal slg,
BigDecimal ops
) {
public static BattingSplitDto fromEntity(PlayerBattingSplit split) {
return new BattingSplitDto(
split.getId(),
split.getPlayer() != null ? split.getPlayer().getId() : null,
split.getTeam() != null ? split.getTeam().getId() : null,
split.getSeason(),
split.getSplitType(),
formatSplitType(split.getSplitType()),
split.getGamesPlayed(),
split.getPlateAppearances(),
split.getAtBats(),
split.getRuns(),
split.getHits(),
split.getDoubles(),
split.getTriples(),
split.getHomeRuns(),
split.getRbi(),
split.getWalks(),
split.getStrikeouts(),
split.getStolenBases(),
split.getBattingAvg(),
split.getObp(),
split.getSlg(),
split.getOps()
);
}

private static String formatSplitType(SplitType type) {
return switch (type) {
case HOME -> "Home";
case AWAY -> "Away";
case VS_LHP -> "vs LHP";
case VS_RHP -> "vs RHP";
case VS_LHB -> "vs LHB";
case VS_RHB -> "vs RHB";
case FIRST_HALF -> "First Half";
case SECOND_HALF -> "Second Half";
case MONTH_MAR -> "March";
case MONTH_APR -> "April";
case MONTH_MAY -> "May";
case MONTH_JUN -> "June";
case MONTH_JUL -> "July";
case MONTH_AUG -> "August";
case MONTH_SEP -> "September";
case MONTH_OCT -> "October";
case DAY -> "Day";
case NIGHT -> "Night";
case RUNNERS_ON -> "Runners On";
case RISP -> "RISP";
case BASES_EMPTY -> "Bases Empty";
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.mlbstats.api.dto;

import com.mlbstats.domain.stats.PlayerPitchingSplit;
import com.mlbstats.domain.stats.SplitType;

import java.math.BigDecimal;

public record PitchingSplitDto(
Long id,
Long playerId,
Long teamId,
Integer season,
SplitType splitType,
String splitTypeDisplay,
Integer gamesPlayed,
Integer gamesStarted,
BigDecimal inningsPitched,
Integer wins,
Integer losses,
Integer saves,
Integer holds,
Integer hitsAllowed,
Integer earnedRuns,
Integer walks,
Integer strikeouts,
BigDecimal era,
BigDecimal whip,
BigDecimal kPer9,
BigDecimal bbPer9
) {
public static PitchingSplitDto fromEntity(PlayerPitchingSplit split) {
return new PitchingSplitDto(
split.getId(),
split.getPlayer() != null ? split.getPlayer().getId() : null,
split.getTeam() != null ? split.getTeam().getId() : null,
split.getSeason(),
split.getSplitType(),
formatSplitType(split.getSplitType()),
split.getGamesPlayed(),
split.getGamesStarted(),
split.getInningsPitched(),
split.getWins(),
split.getLosses(),
split.getSaves(),
split.getHolds(),
split.getHitsAllowed(),
split.getEarnedRuns(),
split.getWalks(),
split.getStrikeouts(),
split.getEra(),
split.getWhip(),
split.getKPer9(),
split.getBbPer9()
);
}

private static String formatSplitType(SplitType type) {
return switch (type) {
case HOME -> "Home";
case AWAY -> "Away";
case VS_LHP -> "vs LHP";
case VS_RHP -> "vs RHP";
case VS_LHB -> "vs LHB";
case VS_RHB -> "vs RHB";
case FIRST_HALF -> "First Half";
case SECOND_HALF -> "Second Half";
case MONTH_MAR -> "March";
case MONTH_APR -> "April";
case MONTH_MAY -> "May";
case MONTH_JUN -> "June";
case MONTH_JUL -> "July";
case MONTH_AUG -> "August";
case MONTH_SEP -> "September";
case MONTH_OCT -> "October";
case DAY -> "Day";
case NIGHT -> "Night";
case RUNNERS_ON -> "Runners On";
case RISP -> "RISP";
case BASES_EMPTY -> "Bases Empty";
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
import com.mlbstats.domain.player.PlayerRepository;
import com.mlbstats.domain.player.PlayerSearchCriteria;
import com.mlbstats.domain.player.PlayerSpecification;
import com.mlbstats.domain.stats.PlayerBattingSplit;
import com.mlbstats.domain.stats.PlayerBattingSplitRepository;
import com.mlbstats.domain.stats.PlayerBattingStats;
import com.mlbstats.domain.stats.PlayerBattingStatsRepository;
import com.mlbstats.domain.stats.PlayerGameBattingRepository;
import com.mlbstats.domain.stats.PlayerGamePitchingRepository;
import com.mlbstats.domain.stats.PlayerPitchingSplit;
import com.mlbstats.domain.stats.PlayerPitchingSplitRepository;
import com.mlbstats.domain.stats.PlayerPitchingStats;
import com.mlbstats.domain.stats.PlayerPitchingStatsRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -37,6 +41,8 @@ public class PlayerApiService {
private final PlayerPitchingStatsRepository pitchingStatsRepository;
private final PlayerGameBattingRepository gameBattingRepository;
private final PlayerGamePitchingRepository gamePitchingRepository;
private final PlayerBattingSplitRepository battingSplitRepository;
private final PlayerPitchingSplitRepository pitchingSplitRepository;

public PageDto<PlayerDto> getAllPlayers(Pageable pageable) {
Page<Player> page = playerRepository.findByActiveTrue(pageable);
Expand Down Expand Up @@ -479,4 +485,24 @@ private java.math.BigDecimal getPitchingStatValue(PlayerComparisonDto.Comparison
default -> null;
};
}

// Player Splits

public List<BattingSplitDto> getPlayerBattingSplits(Long playerId, Integer season) {
if (season == null) {
season = DateUtils.getCurrentSeason();
}
return battingSplitRepository.findByPlayerIdAndSeason(playerId, season).stream()
.map(BattingSplitDto::fromEntity)
.toList();
}

public List<PitchingSplitDto> getPlayerPitchingSplits(Long playerId, Integer season) {
if (season == null) {
season = DateUtils.getCurrentSeason();
}
return pitchingSplitRepository.findByPlayerIdAndSeason(playerId, season).stream()
.map(PitchingSplitDto::fromEntity)
.toList();
}
}
Loading
Loading