백엔드/Spring Boot

모여봄 #4 팀 조회 페이징 추가

jhss9747 2025. 3. 8. 12:32

전체적으로 Page 타입으로 반환하도록 수정하고,

Pageable<page(최소), size(최대)> 값을 매개변수로 받게 수정함

 

- TeamRepository 변경

더보기
public interface TeamRepository extends JpaRepository<Team, Long> {

    @Query("SELECT new com.beyond.backend.data.dto.TeamSearchDto(t.teamName, t.teamIntroduce, t.projectStatus, t.timePeriod.createdAt) " +
            "FROM User u " +
            "JOIN TeamUser tu ON u.no = tu.user.no " +
            "JOIN Team t ON tu.team.no = t.no " +
            "WHERE u.no = :userNo")
    Page<TeamSearchDto> findUserTeams(@Param("userNo") Long userNo, Pageable pageable);
}

- TeamSercviceImpl 변경

더보기
/**
 * userNo로 팀 정보 조회 서비스
 *
 * @param userNo 유저 번호
 * @param teamName (필터) 팀이름
 * @param teamIntroduce (필터) 팀 설명
 * @param projectStatus (필터) 팀 상태
 * @param page 최소 출력 값
 * @param size 최대 출력 값
 * @return PageImpl 필터링 결과값 반환
 */
@Override
public Page<TeamSearchDto> filterUserTeams(
        Long userNo, String teamName, String teamIntroduce, String projectStatus, int page, int size){
    Pageable pageable = PageRequest.of(page, size);
    Page<TeamSearchDto> teams = teamRepository.findUserTeams(userNo, pageable);

    List<TeamSearchDto> filteredTeams = teams.stream()
            .filter(team -> teamName == null || team.getTeamName().contains(teamName))
            .filter(team -> teamIntroduce == null || team.getTeamIntroduce().contains(teamIntroduce))
            .filter(team -> projectStatus == null || team.getProjectStatus().equals(projectStatus))
            .toList();
    return new PageImpl<>(filteredTeams, pageable, teams.getTotalElements());
}
- return new PageImpl<>(반환 요소, 범위 , 전체 크기);

- TeamService 변경

더보기
Page<TeamSearchDto> filterUserTeams(
        Long userNo, String teamName,
        String teamIntroduce, String projectStatus,
        int page, int size);

- TeamController 변경

더보기
/**
 * userNo로 팀 정보를 조회하는 메서드
 *
 * @param userNo 유저 번호
 * @param teamName (검색용) 팀이름
 * @param teamIntroduce (검색용) 팀 설명
 * @param projectStatus (검색용) 팀 상태
 * @param page 최소 출력 값
 * @param size 최대 출력 값
 * @return teamSearch 검색 결과값 반환
 */
@Operation(summary = "팀 조회 메서드", description = "유저 번호로 해당 유저의 모든 팀을 조회하는 메서드 입니다.")
@GetMapping()
public ResponseEntity<Page<TeamSearchDto>> getUserTeams(
        @RequestParam Long userNo,
        @RequestParam(required = false)  String teamName,
        @RequestParam(required = false)  String teamIntroduce,
        @RequestParam(required = false)  String projectStatus,
        @RequestParam int page,
        @RequestParam int size){

    Page<TeamSearchDto> teamSearch = teamService.filterUserTeams(userNo, teamName, teamIntroduce, projectStatus, page, size);

    return ResponseEntity.status(HttpStatus.OK).body(teamSearch);
}