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
Expand Up @@ -4,6 +4,7 @@
import com.back.catchmate.domain.board.dto.BoardResponse.BoardInfo;
import com.back.catchmate.domain.board.entity.Board;
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
import com.back.catchmate.domain.enroll.dto.EnrollResponse.EnrollReceiveInfo;
Expand All @@ -22,6 +23,7 @@
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Component
Expand Down Expand Up @@ -84,32 +86,41 @@ public EnrollRequestInfo toEnrollRequestInfo(Enroll enroll, UserInfo userInfo, B
}

public PagedEnrollReceiveInfo toPagedEnrollReceiveInfo(Page<Enroll> enrollList) {
List<EnrollReceiveInfo> enrollRequestInfoList = enrollList.stream()
.map(enroll -> {
UserInfo userInfo = userConverter.toUserInfo(enroll.getUser());
BoardInfo boardInfo = boardConverter.toBoardInfo(enroll.getBoard(), enroll.getBoard().getGame());
return toEnrollReceiveInfo(enroll, userInfo, boardInfo);
})
.collect(Collectors.toList());
// Board 기준으로 그룹화 (Map<BoardInfo, List<EnrollReceiveInfo>>)
Map<BoardInfo, List<EnrollResponse.EnrollInfo>> groupedByBoard = 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 리스트
));

// BoardInfo + 해당 Board에 대한 신청 리스트를 포함하는 구조로 변환
List<EnrollResponse.EnrollReceiveInfo> enrollReceiveInfoList = groupedByBoard.entrySet().stream()
.map(entry -> EnrollResponse.EnrollReceiveInfo.builder()
.boardInfo(entry.getKey()) // BoardInfo 설정
.enrollReceiveInfoList(entry.getValue()) // Board에 대한 신청 리스트 설정
.build())
.toList();

return PagedEnrollReceiveInfo.builder()
.enrollInfoList(enrollRequestInfoList)
.enrollInfoList(enrollReceiveInfoList) // Board 단위로 그룹화된 신청 리스트
.totalPages(enrollList.getTotalPages())
.totalElements(enrollList.getTotalElements())
.isFirst(enrollList.isFirst())
.isLast(enrollList.isLast())
.build();
}

public EnrollReceiveInfo toEnrollReceiveInfo(Enroll enroll, UserInfo userInfo, BoardInfo boardInfo) {
return EnrollReceiveInfo.builder()
public EnrollResponse.EnrollInfo toEnrollInfo(Enroll enroll, UserInfo userInfo) {
return EnrollResponse.EnrollInfo.builder()
.enrollId(enroll.getId())
.acceptStatus(enroll.getAcceptStatus())
.description(enroll.getDescription())
.receiveDate(enroll.getCreatedAt())
.requestDate(enroll.getCreatedAt())
.isNew(enroll.isNew())
.userInfo(userInfo)
.boardInfo(boardInfo)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,38 @@ public static class EnrollRequestInfo {
private BoardInfo boardInfo;
}

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class PagedEnrollRequestInfo {
private List<EnrollRequestInfo> enrollInfoList;
private Integer totalPages;
private Long totalElements;
private Boolean isFirst;
private Boolean isLast;
}

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class EnrollReceiveInfo {
private Long enrollId;
private AcceptStatus acceptStatus;
private String description;
private LocalDateTime receiveDate;
private boolean isNew;
private UserInfo userInfo;
private BoardInfo boardInfo;
private List<EnrollInfo> enrollReceiveInfoList;
}

@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public static class PagedEnrollRequestInfo {
private List<EnrollRequestInfo> enrollInfoList;
private Integer totalPages;
private Long totalElements;
private Boolean isFirst;
private Boolean isLast;
@AllArgsConstructor
public static class EnrollInfo {
private Long enrollId;
private AcceptStatus acceptStatus;
private String description;
private LocalDateTime requestDate;
private boolean isNew;
private UserInfo userInfo;
}

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,14 @@ public interface EnrollRepository extends JpaRepository<Enroll, Long> {

Page<Enroll> findByUserIdAndDeletedAtIsNull(Long userId, Pageable pageable);

@Query("SELECT e FROM Enroll e WHERE e.board.user.id = :userId AND e.deletedAt IS NULL AND e.acceptStatus = 'PENDING'")
@Query("""
SELECT e FROM Enroll e
JOIN e.board b
WHERE b.user.id = :userId
AND e.deletedAt IS NULL
AND e.acceptStatus = 'PENDING'
ORDER BY b.id DESC, e.createdAt DESC
""")
Page<Enroll> findEnrollListByBoardWriter(@Param("userId") Long userId, Pageable pageable);

@Query("SELECT e FROM Enroll e WHERE e.board.id = :boardId AND e.deletedAt IS NULL AND e.acceptStatus = 'PENDING'")
Expand Down