Skip to content

Commit

Permalink
all match endpoints now also return the teams, teammembers and moves (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
Thiies authored Nov 18, 2024
1 parent bf18b96 commit 857b204
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import org.springframework.web.bind.annotation.RestController;

import pro.beerpong.api.model.dto.ErrorCodes;
import pro.beerpong.api.model.dto.GroupCreateDto;
import pro.beerpong.api.model.dto.MatchDto;
import pro.beerpong.api.model.dto.ResponseEnvelope;
import pro.beerpong.api.model.dto.RuleCreateDto;
import pro.beerpong.api.model.dto.RuleDto;
Expand Down
14 changes: 0 additions & 14 deletions api/src/main/java/pro/beerpong/api/mapping/MatchMapper.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package pro.beerpong.api.mapping;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import pro.beerpong.api.model.dao.MatchMove;
import pro.beerpong.api.model.dto.MatchMoveDtoComplete;

@Mapper(componentModel = "spring")
public interface MatchMoveMapper {
@Mapping(source = "teamMember.id", target = "teamMemberId")
@Mapping(source = "move.id", target = "moveId")
MatchMoveDtoComplete matchMoveToMatchMoveDtoComplete(MatchMove matchMove);
}
4 changes: 4 additions & 0 deletions api/src/main/java/pro/beerpong/api/model/dto/MatchDto.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package pro.beerpong.api.model.dto;

import java.time.ZonedDateTime;
import java.util.List;

import lombok.Data;
import pro.beerpong.api.model.dao.Season;
Expand All @@ -10,4 +11,7 @@ public class MatchDto {
private String id;
private ZonedDateTime date;
private Season season;
private List<TeamDto> teams;
private List<TeamMemberDto> teamMembers;
private List<MatchMoveDtoComplete> matchMoves;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package pro.beerpong.api.model.dto;

import lombok.Data;

@Data
public class MatchMoveDtoComplete {
private String id; // ID der Spielbewegung
private int value; // Anzahl der Bewegungen
private String teamMemberId; // ID des Teammitglieds
private String moveId; // ID der Regelbewegung
}
18 changes: 14 additions & 4 deletions api/src/main/java/pro/beerpong/api/service/MatchMoveService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pro.beerpong.api.mapping.MatchMoveMapper;
import pro.beerpong.api.model.dao.Match;
import pro.beerpong.api.model.dao.MatchMove;
import pro.beerpong.api.model.dao.RuleMove;
import pro.beerpong.api.model.dao.TeamMember;
import pro.beerpong.api.model.dto.MatchMoveDto;
import pro.beerpong.api.model.dto.MatchMoveDtoComplete;
import pro.beerpong.api.model.dto.TeamDto;
import pro.beerpong.api.model.dto.TeamMemberDto;
import pro.beerpong.api.repository.MatchMoveRepository;
import pro.beerpong.api.repository.RuleMoveRepository;
import pro.beerpong.api.repository.TeamMemberRepository;

import java.util.List;
import java.util.Objects;
Expand All @@ -17,15 +21,15 @@
public class MatchMoveService {

private final MatchMoveRepository matchMoveRepository;
private final TeamMemberRepository teamMemberRepository;
private final MatchMoveMapper matchMoveMapper;
private final RuleMoveRepository ruleMoveRepository;

@Autowired
public MatchMoveService(MatchMoveRepository matchMoveRepository,
TeamMemberRepository teamMemberRepository,
MatchMoveMapper matchMoveMapper,
RuleMoveRepository ruleMoveRepository) {
this.matchMoveRepository = matchMoveRepository;
this.teamMemberRepository = teamMemberRepository;
this.matchMoveMapper = matchMoveMapper;
this.ruleMoveRepository = ruleMoveRepository;
}

Expand All @@ -44,4 +48,10 @@ public void createMatchMoves(TeamMember teamMember, List<MatchMoveDto> moves) {
matchMoveRepository.save(matchMove);
}
}

public List<MatchMoveDtoComplete> buildMatchMoveDtos(List<TeamMemberDto> teamMembers) {
return teamMembers.stream()
.flatMap(teamMemberDto -> matchMoveRepository.findAllByTeamMemberId(teamMemberDto.getId()).stream().map(matchMoveMapper::matchMoveToMatchMoveDtoComplete))
.toList();
}
}
61 changes: 45 additions & 16 deletions api/src/main/java/pro/beerpong/api/service/MatchService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import jakarta.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pro.beerpong.api.mapping.MatchMapper;
import pro.beerpong.api.model.dao.*;
import pro.beerpong.api.model.dto.MatchCreateDto;
import pro.beerpong.api.model.dto.MatchDto;
Expand All @@ -15,49 +14,45 @@

import java.time.ZonedDateTime;
import java.util.List;
import java.util.Optional;

@Service
public class MatchService {
private final SubscriptionHandler subscriptionHandler;

private final MatchRepository matchRepository;
private final SeasonRepository seasonRepository;
private final TeamMemberService teamMemberService;
private final PlayerRepository playerRepository;
private final GroupRepository groupRepository; // new field
private final MatchMoveService matchMoveService; // new field
private final TeamRepository teamRepository;
private final TeamMemberRepository teamMemberRepository;
private final MatchMoveRepository matchMoveRepository;
private final RuleMoveRepository ruleMoveRepository;

private final TeamService teamService;
private final MatchMapper matchMapper;

@Autowired
public MatchService(SubscriptionHandler subscriptionHandler,
MatchRepository matchRepository,
SeasonRepository seasonRepository,
TeamMemberService teamMemberService,
PlayerRepository playerRepository,
GroupRepository groupRepository,
MatchMoveService matchMoveService,
TeamRepository teamRepository,
TeamMemberRepository teamMemberRepository,
MatchMoveRepository matchMoveRepository,
RuleMoveRepository ruleMoveRepository,
TeamService teamService,
MatchMapper matchMapper) {
TeamService teamService) {
this.subscriptionHandler = subscriptionHandler;

this.matchRepository = matchRepository;
this.seasonRepository = seasonRepository;
this.teamMemberService = teamMemberService;
this.playerRepository = playerRepository;
this.groupRepository = groupRepository;
this.matchMoveService = matchMoveService;
this.teamRepository = teamRepository;
this.matchMoveRepository = matchMoveRepository;
this.teamMemberRepository = teamMemberRepository;
this.ruleMoveRepository = ruleMoveRepository;

this.teamService = teamService;
this.matchMapper = matchMapper;
}

private boolean validateCreateDto(String groupId, String seasonId, MatchCreateDto dto) {
Expand Down Expand Up @@ -93,7 +88,7 @@ public MatchDto createNewMatch(@NotNull Group group, @NotNull Season season, Mat

teamService.createTeamsForMatch(match, matchCreateDto.getTeams());

var dto = matchMapper.matchToMatchDto(match);
var dto = matchToMatchDto(match);

if (dto.getSeason().getGroupId().equals(group.getId())) {
subscriptionHandler.callEvent(new SocketEvent<>(SocketEventData.MATCH_CREATE, group.getId(), dto));
Expand Down Expand Up @@ -136,10 +131,12 @@ public MatchDto updateMatch(Group group, Match match, MatchCreateDto matchCreate
// Step 8: Delete all teams
teamRepository.deleteAll(teams);

MatchDto updatedDto = matchMapper.matchToMatchDto(match);
MatchDto updatedDto = matchToEmptyMatchDto(match);

teamService.createTeamsForMatch(match, matchCreateDto.getTeams());

loadMatchInfo(match, updatedDto);

subscriptionHandler.callEvent(new SocketEvent<>(SocketEventData.MATCH_UPDATE, group.getId(), updatedDto));

return updatedDto;
Expand All @@ -149,17 +146,49 @@ public MatchDto updateMatch(Group group, Match match, MatchCreateDto matchCreate
public List<MatchDto> getAllMatches(String seasonId) {
return matchRepository.findBySeasonId(seasonId)
.stream()
.map(matchMapper::matchToMatchDto)
.map(this::matchToMatchDto)
.toList();
}

public MatchDto getMatchById(String id) {
return matchRepository.findById(id)
.map(matchMapper::matchToMatchDto)
.map(this::matchToMatchDto)
.orElse(null);
}

public Match getRawMatchById(String id) {
return matchRepository.findById(id).orElse(null);
}

private MatchDto matchToEmptyMatchDto(Match match) {
var dto = new MatchDto();

dto.setId(match.getId());
dto.setDate(match.getDate());
dto.setSeason(match.getSeason());

return dto;
}

private MatchDto matchToMatchDto(Match match) {
var dto = new MatchDto();

dto.setId(match.getId());
dto.setDate(match.getDate());
dto.setSeason(match.getSeason());

loadMatchInfo(match, dto);

return dto;
}

private void loadMatchInfo(Match match, MatchDto dto) {
var teams = teamService.buildTeamDtos(match);
dto.setTeams(teams);

var teamMembers = teamMemberService.buildTeamMemberDtos(teams);
dto.setTeamMembers(teamMembers);

dto.setMatchMoves(matchMoveService.buildMatchMoveDtos(teamMembers));
}
}
25 changes: 18 additions & 7 deletions api/src/main/java/pro/beerpong/api/service/TeamMemberService.java
Original file line number Diff line number Diff line change
@@ -1,44 +1,55 @@
package pro.beerpong.api.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pro.beerpong.api.mapping.TeamMemberMapper;
import pro.beerpong.api.model.dao.Match;
import pro.beerpong.api.model.dao.Team;
import pro.beerpong.api.model.dao.TeamMember;
import pro.beerpong.api.model.dto.TeamDto;
import pro.beerpong.api.model.dto.TeamMemberCreateDto;
import pro.beerpong.api.model.dto.TeamMemberDto;
import pro.beerpong.api.repository.PlayerRepository;
import pro.beerpong.api.repository.TeamMemberRepository;

import java.util.List;

@Service
public class TeamMemberService {

private final TeamMemberRepository teamMemberRepository;
private final PlayerRepository playerRepository;
private final MatchMoveService matchMoveService;
private final TeamMemberMapper teamMemberMapper;

@Autowired
public TeamMemberService(TeamMemberRepository teamMemberRepository, PlayerRepository playerRepository, MatchMoveService matchMoveService) {
public TeamMemberService(TeamMemberRepository teamMemberRepository, PlayerRepository playerRepository, MatchMoveService matchMoveService, TeamMemberMapper teamMemberMapper) {
this.teamMemberRepository = teamMemberRepository;
this.playerRepository = playerRepository;
this.matchMoveService = matchMoveService;
this.teamMemberMapper = teamMemberMapper;
}

public void createTeamMembersForTeam(Team team, List<TeamMemberCreateDto> teamMembers) {
teamMembers.forEach(teamMemberCreateDto -> {
TeamMember teamMember = new TeamMember();
teamMember.setTeam(team);

playerRepository.findById(teamMemberCreateDto.getPlayerId()).ifPresent(player -> {
teamMember.setPlayer(player);
TeamMember savedTeamMember = teamMemberRepository.save(teamMember);
// Erstelle die MatchMoves für dieses Teammitglied

// Erstelle die MatchMoves für dieses Teammitglied
if (teamMemberCreateDto.getMoves() != null) {
matchMoveService.createMatchMoves(savedTeamMember, teamMemberCreateDto.getMoves());
}
});
});
}

public List<TeamMemberDto> buildTeamMemberDtos(List<TeamDto> teams) {
return teams.stream()
.flatMap(teamDto -> teamMemberRepository.findAllByTeamId(teamDto.getId()).stream().map(teamMemberMapper::teamMemberToTeamMemberDto))
.toList();
}
}
12 changes: 10 additions & 2 deletions api/src/main/java/pro/beerpong/api/service/TeamService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pro.beerpong.api.mapping.TeamMapper;
import pro.beerpong.api.model.dao.Team;
import pro.beerpong.api.model.dao.Match;
import pro.beerpong.api.model.dto.ErrorCodes;
Expand All @@ -14,14 +15,15 @@

@Service
public class TeamService {

private final TeamRepository teamRepository;
private final TeamMemberService teamMemberService;
private final TeamMapper teamMapper;

@Autowired
public TeamService(TeamRepository teamRepository, TeamMemberService teamMemberService) {
public TeamService(TeamRepository teamRepository, TeamMemberService teamMemberService, TeamMapper teamMapper) {
this.teamRepository = teamRepository;
this.teamMemberService = teamMemberService;
this.teamMapper = teamMapper;
}

public void createTeamsForMatch(Match match, List<TeamCreateDto> teams) {
Expand All @@ -34,4 +36,10 @@ public void createTeamsForMatch(Match match, List<TeamCreateDto> teams) {
teamMemberService.createTeamMembersForTeam(savedTeam, teamCreateDto.getTeamMembers());
});
}

public List<TeamDto> buildTeamDtos(Match match) {
return teamRepository.findAllByMatchId(match.getId()).stream()
.map(this.teamMapper::teamToTeamDto)
.toList();
}
}

0 comments on commit 857b204

Please sign in to comment.