Skip to content
Merged
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
@@ -1,20 +1,23 @@
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;
import com.back.catchmate.domain.game.entity.Game;
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;
Expand All @@ -26,6 +29,7 @@
@Component
@RequiredArgsConstructor
public class BoardConverter {
private final BoardRepository boardRepository;
private final GameConverter gameConverter;
private final UserConverter userConverter;

Expand Down Expand Up @@ -59,6 +63,30 @@ public PagedBoardInfo toPagedBoardInfoFromBoardList(Page<Board> 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());
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -86,41 +87,47 @@ public EnrollRequestInfo toEnrollRequestInfo(Enroll enroll, UserInfo userInfo, B
}

public PagedEnrollReceiveInfo toPagedEnrollReceiveInfo(Page<Enroll> enrollList) {
// Board 기준으로 그룹화 (Map<BoardInfo, List<EnrollReceiveInfo>>)
Map<BoardInfo, List<EnrollResponse.EnrollInfo>> groupedByBoard = enrollList.stream()
// boardId 기준으로 그룹화 (Map<BoardId, List<EnrollInfo>>)
Map<Long, List<EnrollResponse.EnrollInfo>> 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<EnrollResponse.EnrollReceiveInfo> enrollReceiveInfoList = groupedByBoard.entrySet().stream()
.map(entry -> EnrollResponse.EnrollReceiveInfo.builder()
.boardInfo(entry.getKey()) // BoardInfo 설정
.enrollReceiveInfoList(entry.getValue()) // Board에 대한 신청 리스트 설정
.build())
// 각 boardId에 대한 EnrollReceiveInfo 생성
List<EnrollReceiveInfo> enrollInfoList = groupedByBoardId.entrySet().stream()
.map(entry -> {
List<EnrollResponse.EnrollInfo> 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())
.isLast(enrollList.isLast())
.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();
}

Expand Down