파이널프로젝트 -1(라운지 메인)

Wuchang·2023년 6월 7일
0

BoardRepository 에서 dto 2개 조회하기

board 테이블에 pb, branch, company 를 join 해 2개의 데이터를 가져와야 하는 상황. 스프링데이터jpa 에서는 limit 쿼리를 사용할 수 없어 해당 쿼리로 select 되는 모든 데이터를 가져온다.

이를 해결하기 위해 Pageable 사용했다.

//BoardService.java

        PageRequest pageRequestNew = PageRequest.of(0, 2, Sort.by(Sort.Direction.DESC, "id"));
        boardList.addAll(boardRepository.findTop2ByNew(BoardStatus.ACTIVE, pageRequestNew));
        
//BoardRepository.java
	@Query("SELECT new kr.co.moneybridge.dto.board.BoardResponse$BoardPageDTO(b, p, c) FROM Board b JOIN b.pb p JOIN p.branch bh JOIN bh.company c WHERE b.status = :status ORDER BY b.id DESC")
    List<BoardResponse.BoardPageDTO> findTop2ByNew(@Param("status") BoardStatus status, Pageable pageable);

위와 같은 코드로 2개의 boardPageDTO 객체 2개를 List 로 뽑아올 수 있다.

json 으로 dto 4개 내려주는 controller test

    @DisplayName("최신컨텐츠 2개 + 핫한컨텐츠 2개 가져오기")
    @Test
    void getNewHotBoards() throws Exception {

        //given

        //when
        ResultActions resultActions = mvc.perform(get("/lounge/board"));
        String responseBody = resultActions.andReturn().getResponse().getContentAsString();
        System.out.println("테스트 : " + responseBody);

        //then
        resultActions.andExpect(jsonPath("$.status").value(200));
        resultActions.andExpect(jsonPath("$.msg").value("ok"));
        resultActions.andExpect(jsonPath("$.data[0].title").value("제목2입니다"));
        resultActions.andExpect(jsonPath("$.data[0].pbName").value("이피비"));
        resultActions.andExpect(jsonPath("$.data[1].title").value("컨텐츠 타이들입니다"));
        resultActions.andExpect(jsonPath("$.data[1].pbName").value("이피비"));
    }

json 데이터에서 "data" : {}, {}, {}, {} 형태로 4개의 데이터를 내려주는 경우를 테스트 하는 방법이 떠오르지 않아 구글링 해보니, data[ ] 를 통해 원하는 순서의 데이터를 검증해볼 수 있었다.

profile
우창의 개발일지🐈

0개의 댓글