@ApiOperation({ summary: '리뷰 조회' })
@Render('detailContent')
@Get()
async getCReivew(
@Param('webContentsId', ParseIntPipe) webContentsId: number,
@Query('page', ParseIntPipe) page?: number,
@Query('order') order?: string,
@Query('option') option?: string,
) {
const result = await this.reviewService.getCReviews(
webContentsId,
page,
order,
option,
);
const { content, reviewList, totalPages } = result;
return { content, reviewList, totalPages, page, order, option };
}
문제가 생긴 곳은 리뷰조회 api인데, query로 page, order option 을 받아 페이지네이션을 하는 파트다.
Querystring이 전부 들어오지 않을때에는 option = p, page = 1로 기본 페이지를 주고싶었는데 테스트를 해보니 세개의 query중 하나라도 줘야지 작동했다. 그때는 별 문제 아니겠지 하고 넘겼는데 프론트 페이지를 작성하다보니 문제가 생겼다. 기본 페이지를 줘야하는데 query가 제공되지않으면 리뷰조회가 안되는 똑같은 오류가 생겨 다시 코드를 파헤쳐 봤다.
테스트를 진행하면서 오류를 알아봤는데, 셋 중 하나라도 있으면 작동되는게 아니라 page query가 필요했다.
그리고 서비스 코드를 다시 보다가 문제가 뭔지 알게 되었다.
const reviewList = await this.platformReviewsRepository.find({
where: { webContentId },
order: { likeCount: 'desc' },
take: 10,
skip: (page - 1) * 10,
});
이렇게 page를 반드시 사용하게 되는 코드가 있었다. 이러면 page에 nullable로 표시해둬도 당연히 안되지..!
@ApiOperation({ summary: '리뷰 조회' })
@Render('detailContent')
@Get()
async getCReivew(
@Param('webContentsId', ParseIntPipe) webContentsId: number,
@Query('page', new DefaultValuePipe(1), ParseIntPipe) page?: number,
@Query('order') order?: string,
@Query('option') option?: string,
) {
const result = await this.reviewService.getCReviews(
webContentsId,
page,
order,
option,
);
const { content, reviewList, totalPages } = result;
return { content, reviewList, totalPages, page, order, option };
}
new DefaultValuePipe()를 사용해 해결했다.
page에 값이 들어오지 않는다면 page = 1의 값을 넣어주게 된다.
'TIL' 카테고리의 다른 글
redis cloud 이용해 조회수 기능 구현하기 (0) | 2024.04.30 |
---|---|
GCP Compute Engine 이용해 서버 배포하기 (0) | 2024.04.16 |
힙 정렬 (0) | 2024.04.12 |
이모지 문자 mySql에 저장하기 (0) | 2024.04.12 |
TIL #34) Nest로 S3 이용하기 (0) | 2024.03.25 |