diff --git a/src/main/java/com/back/catchmate/domain/board/converter/BoardConverter.java b/src/main/java/com/back/catchmate/domain/board/converter/BoardConverter.java index d5e107b..2b6a8ae 100644 --- a/src/main/java/com/back/catchmate/domain/board/converter/BoardConverter.java +++ b/src/main/java/com/back/catchmate/domain/board/converter/BoardConverter.java @@ -1,13 +1,14 @@ package com.back.catchmate.domain.board.converter; import com.back.catchmate.domain.board.dto.BoardRequest.CreateOrUpdateBoardRequest; +import com.back.catchmate.domain.board.dto.BoardResponse.BoardDeleteInfo; import com.back.catchmate.domain.board.dto.BoardResponse.BoardInfo; -import com.back.catchmate.domain.board.dto.BoardResponse.TempBoardInfo; -import com.back.catchmate.domain.board.dto.BoardResponse.PagedBoardInfo; import com.back.catchmate.domain.board.dto.BoardResponse.LiftUpStatusInfo; -import com.back.catchmate.domain.board.dto.BoardResponse.BoardDeleteInfo; +import com.back.catchmate.domain.board.dto.BoardResponse.PagedBoardInfo; +import com.back.catchmate.domain.board.dto.BoardResponse.TempBoardInfo; import com.back.catchmate.domain.board.entity.Board; import com.back.catchmate.domain.board.entity.BookMark; +import com.back.catchmate.domain.board.repository.BoardRepository; import com.back.catchmate.domain.club.entity.Club; import com.back.catchmate.domain.game.converter.GameConverter; import com.back.catchmate.domain.game.dto.GameResponse.GameInfo; @@ -15,6 +16,8 @@ import com.back.catchmate.domain.user.converter.UserConverter; import com.back.catchmate.domain.user.dto.UserResponse.UserInfo; import com.back.catchmate.domain.user.entity.User; +import com.back.catchmate.global.error.ErrorCode; +import com.back.catchmate.global.error.exception.BaseException; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -26,6 +29,7 @@ @Component @RequiredArgsConstructor public class BoardConverter { + private final BoardRepository boardRepository; private final GameConverter gameConverter; private final UserConverter userConverter; @@ -59,6 +63,30 @@ public PagedBoardInfo toPagedBoardInfoFromBoardList(Page boardList) { .build(); } + public BoardInfo toBoardInfo(Long boardId) { + Board board = boardRepository.findById(boardId) + .orElseThrow(() -> new BaseException(ErrorCode.BOARD_NOT_FOUND)); + + // GameInfo 및 UserInfo 변환 + GameInfo gameInfo = gameConverter.toGameInfo(board.getGame()); + UserInfo userInfo = userConverter.toUserInfo(board.getUser()); + + // BoardInfo 객체 생성 + return BoardInfo.builder() + .boardId(board.getId()) + .title(board.getTitle()) + .content(board.getContent()) + .maxPerson(board.getMaxPerson()) + .cheerClubId(board.getClub().getId()) + .preferredGender(board.getPreferredGender()) + .preferredAgeRange(board.getPreferredAgeRange()) + .liftUpDate(board.getLiftUpDate()) + .gameInfo(gameInfo) + .userInfo(userInfo) + .build(); + } + + public BoardInfo toBoardInfo(Board board, Game game) { GameInfo gameInfo = gameConverter.toGameInfo(game); UserInfo userInfo = userConverter.toUserInfo(board.getUser()); diff --git a/src/main/java/com/back/catchmate/domain/board/dto/BoardResponse.java b/src/main/java/com/back/catchmate/domain/board/dto/BoardResponse.java index d903895..392deea 100644 --- a/src/main/java/com/back/catchmate/domain/board/dto/BoardResponse.java +++ b/src/main/java/com/back/catchmate/domain/board/dto/BoardResponse.java @@ -1,5 +1,6 @@ package com.back.catchmate.domain.board.dto; +import com.back.catchmate.domain.enroll.dto.EnrollResponse; import com.back.catchmate.domain.game.dto.GameResponse.GameInfo; import com.back.catchmate.domain.user.dto.UserResponse.UserInfo; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/back/catchmate/domain/enroll/converter/EnrollConverter.java b/src/main/java/com/back/catchmate/domain/enroll/converter/EnrollConverter.java index d2e1331..e72e457 100644 --- a/src/main/java/com/back/catchmate/domain/enroll/converter/EnrollConverter.java +++ b/src/main/java/com/back/catchmate/domain/enroll/converter/EnrollConverter.java @@ -22,6 +22,7 @@ import org.springframework.data.domain.Page; import org.springframework.stereotype.Component; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -86,26 +87,32 @@ public EnrollRequestInfo toEnrollRequestInfo(Enroll enroll, UserInfo userInfo, B } public PagedEnrollReceiveInfo toPagedEnrollReceiveInfo(Page enrollList) { - // Board 기준으로 그룹화 (Map>) - Map> groupedByBoard = enrollList.stream() + // boardId 기준으로 그룹화 (Map>) + Map> groupedByBoardId = enrollList.stream() .collect(Collectors.groupingBy( - enroll -> boardConverter.toBoardInfo(enroll.getBoard(), enroll.getBoard().getGame()), // Key: BoardInfo - Collectors.mapping(enroll -> { - UserInfo userInfo = userConverter.toUserInfo(enroll.getUser()); - return toEnrollInfo(enroll, userInfo); - }, Collectors.toList()) // Value: EnrollReceiveInfo 리스트 + enroll -> enroll.getBoard().getId(), // Key: boardId + Collectors.mapping(this::toEnrollInfo, Collectors.toList()) // Value: EnrollInfo 리스트 )); - // BoardInfo + 해당 Board에 대한 신청 리스트를 포함하는 구조로 변환 - List enrollReceiveInfoList = groupedByBoard.entrySet().stream() - .map(entry -> EnrollResponse.EnrollReceiveInfo.builder() - .boardInfo(entry.getKey()) // BoardInfo 설정 - .enrollReceiveInfoList(entry.getValue()) // Board에 대한 신청 리스트 설정 - .build()) + // 각 boardId에 대한 EnrollReceiveInfo 생성 + List enrollInfoList = groupedByBoardId.entrySet().stream() + .map(entry -> { + List sortedEnrollInfoList = entry.getValue().stream() + .sorted(Comparator.comparing(EnrollResponse.EnrollInfo::getRequestDate).reversed()) + .limit(10) // 최근 10개만 포함 + .collect(Collectors.toList()); + + // boardId와 그에 해당하는 EnrollReceiveInfo 목록을 생성 + return EnrollReceiveInfo.builder() + .boardInfo(boardConverter.toBoardInfo(entry.getKey())) // boardId에 해당하는 BoardInfo 객체 생성 + .enrollReceiveInfoList(sortedEnrollInfoList) + .build(); + }) .toList(); + // PagedEnrollReceiveInfo 반환 return PagedEnrollReceiveInfo.builder() - .enrollInfoList(enrollReceiveInfoList) // Board 단위로 그룹화된 신청 리스트 + .enrollInfoList(enrollInfoList) // boardId 단위로 그룹화된 신청 리스트 .totalPages(enrollList.getTotalPages()) .totalElements(enrollList.getTotalElements()) .isFirst(enrollList.isFirst()) @@ -113,14 +120,14 @@ public PagedEnrollReceiveInfo toPagedEnrollReceiveInfo(Page enrollList) .build(); } - public EnrollResponse.EnrollInfo toEnrollInfo(Enroll enroll, UserInfo userInfo) { + public EnrollResponse.EnrollInfo toEnrollInfo(Enroll enroll) { return EnrollResponse.EnrollInfo.builder() .enrollId(enroll.getId()) .acceptStatus(enroll.getAcceptStatus()) .description(enroll.getDescription()) .requestDate(enroll.getCreatedAt()) .isNew(enroll.isNew()) - .userInfo(userInfo) + .userInfo(userConverter.toUserInfo(enroll.getUser())) .build(); }