[게시판] 게시글 조회
2023. 1. 25. 15:43ㆍ프로젝트/라이프 챌린지
728x90
SMALL
기본적으로 게시글은 조회되어야 한다.
조회 기능을 만들어보자.
PostController
// 게시글 조회
@GetMapping("/post/read/{post_id}")
public ResponseEntity<ResponseBody> postRead(HttpServletRequest request, @PathVariable Long post_id){
log.info("게시글 조회 - 조회 게시글 : {}", post_id);
return postService.postRead(request, post_id);
}
컨트롤러에 특정 게시글을 조회할 api 를 만들어준다.
- 단순히 조회하면 되기에 GetMapping method 타입으로 만들어준다.
- Service 단에 넘겨줄 인자값은 HttpServletRequest, 조회할 게시글의 post_id
PostService
// 게시글 조회
@Transactional
public ResponseEntity<ResponseBody> postRead(HttpServletRequest request, Long post_id) {
// 유저 검증
Member auth_member = checkAuthentication(request);
// 조회하고자 하는 게시글 조회
if (queryFactory
.selectFrom(post)
.where(post.post_id.eq(post_id))
.fetchOne() == null) {
return new ResponseEntity<>(new ResponseBody(StatusCode.NOT_EXIST_POST_INFO.getStatusCode(), StatusCode.NOT_EXIST_POST_INFO.getStatus(), null), HttpStatus.BAD_REQUEST);
}
// 게시글 정보 불러오기
Post read_post = queryFactory
.selectFrom(post)
.where(post.post_id.eq(post_id))
.fetchOne();
// 게시글 조회 수 업데이트
queryFactory
.update(post)
.set(post.viewcnt, read_post.getViewcnt() + 1)
.where(post.post_id.eq(post_id))
.execute();
entityManager.flush();
entityManager.clear();
// 조회하고자 하는 게시글의 정보들
PostResponseDto postResponseDto = PostResponseDto.builder()
.title(read_post.getTitle()) // 게시글 제목
.content(read_post.getContent()) // 게시글 내용
.nickname(read_post.getMember().getNickname()) // 게시글 작성자
.createdAt(read_post.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy.MM.dd hh:mm"))) // 게시글 생성일자
.viewcnt(read_post.getViewcnt()) // 게시글 조회 수
.likecnt(read_post.getLikecnt()) // 게시글 좋아요 수
.build();
return new ResponseEntity<>(new ResponseBody(StatusCode.OK.getStatusCode(), StatusCode.OK.getStatus(), postResponseDto), HttpStatus.OK);
}
조회할 Service 로직을 만들어준다.
- 조회하고자 하는 유저가 유효한지 검증하는 checkAuthentication 을 통해 Member 객체를 반환받는다.
- 조회하려는 게시글이 존재하는지 확인하는 에러 처리 로직을 만들어준다. (사실 존재하는 게시글을 눌러야지만 조회가 되기 때문에 해당 에러 처리 로직은 빼도 상관없을 것이다.)
- 조회 게시글 Post 객체를 불러온다.
- 조회정보를 반환하기에 앞서, 조회를 하면 해당 게시글에 대한 조회수가 업데이트 되어야 한다. update문을 통해 viewcnt를 +1 하여 업데이트 해준다.
- 업데이트가 완료되었다면 EntityManager.flush() 를 통해 실제 DB에도 적용시켜주고, clear()를 통해 잔여 데이터를 비워준다.
- 조회한 게시글을 Post 그 자체로 반환하면 이슈가 발생하기 때문에 PostResponseDto를 만들어주고 Dto에 조회하고자하는 게시글의 정보들을 담아 반환한다.
포스트맨으로 확인해보자.
정상적으로 게시글 정보들이 출력되는 것을 확인할 수 있다.
또한, viewcnt에 정상적으로 반영되어 출력되는 것도 확인할 수 있다.
728x90
반응형
LIST
'프로젝트 > 라이프 챌린지' 카테고리의 다른 글
[게시판] 게시글 좋아요 / 좋아요 취소 (0) | 2023.01.25 |
---|---|
[게시판] 게시글 전체 목록 조회 (0) | 2023.01.25 |
[게시판] 게시글 삭제 (0) | 2023.01.25 |
[게시판] 게시글 수정 (0) | 2023.01.25 |
[게시판] 게시글 작성 (0) | 2023.01.25 |