[Spring Boot 게시판] 21일차

김정현·2022년 10월 25일
0

SPRINGBOOT게시판

목록 보기
20/36

1. 게시물리스트, 수정페이지에 추천 수 노출, 상세페이지 쿼리문 변경(JOIN)

상세페이지 쿼리문 변경(JOIN)

   	 SELECT A.*, 
            M.nickname AS extra__writer,
            IFNULL(SUM(RP.point),0) AS extra__sumReactionPoint,
            IFNULL(SUM(IF(RP.point > 0, RP.point, 0)),0) AS extra__goodReactionPoint,
            IFNULL(SUM(IF(RP.point < 0, RP.point, 0)),0) AS extra__badReactionPoint
            FROM article AS A
            LEFT JOIN `member` AS M
            ON A.memberId = M.id
            LEFT JOIN reactionPoint AS RP
            ON RP.relTypeCode = 'article'
            AND A.id = RP.relId
            WHERE A.id = #{id}
            GROUP BY A.id
  • 서브쿼리 대신 조인을 이용해 3개의 테이블을 합침

2. 게시물 마다 로그인된 회원이 좋아요/싫어요를 할 수있는지 체크

1. 게시물에 좋아요/싫어요 선택했는지 찾는 쿼리문

	<select id="getSumReactionPointByMemberId" resultType="int">
		SELECT IFNULL(SUM(`point`),0) FROM reactionPoint
		WHERE relTypeCode = 'article'
		AND relId = #{id}
		AND memberId =#{actorId}
	</select>
  • 회원번호(memberId)와 게시물번호(relId)를 통해 데이터를 조회
  • 해당 쿼리문의 결과가 0 이라면 좋아요/싫어요를 선택하지 않음
  • 좋아요/싫어요를 선택했다면 reactionPoint테이블에 좋아요(1), 싫어요(-1)의 기록이 남겨져 있다.
  • 이때 각 게시물 마다 좋아요/싫어요 선택은 한번만 할수있기 때문에 선택을 했다면, reactionPoint테이블에 데이터가 하나남겨져 있다.
  • SUM()함수를 쓰지않고 point 컬럼만 조회시 데이터가 없다면 로우가 나타나지 않는다.
  • 집계함수를 쓰면 값이 없어도 0을 리턴

2. 게시물에 좋아요/싫어요 선택했는지 여부 model객체에 추가

	@RequestMapping("/usr/article/detail")
	public String showDetail(Model model, int id) {			
		Article article = articleService.getForPrintArticle(rq.getLoginedMemberId(), id);
		boolean actorCanMakeReaction = articleService.actorCanMakeReaction(rq.getLoginedMemberId(),id);
		model.addAttribute("actorCanMakeReaction",actorCanMakeReaction);
				~~~ 생략 ~~~
	}
  • jsp파일에서 선택여부를 바탕으로 좋아요/싫어요 버튼 노출하기 위해

3. TODO : 좋아요 싫어요 구현

1-1 좋아요/ 싫어요 노출 관련작업 O

1-2 좋아요/ 싫어요를 표현 할수 있는 버튼 작업 O

1-3 사용자가 1-2를 할 수있는지 체크 O

1-4 위 사항을 취소 할수있는 작업

좋아요 싫어요 구현시 고민해야할것

무조건 노출

1,2,3 회원

1,2,3 글

1번 회원이 1번글에 좋아요

좋아요를 누르면 하이라이팅

--> 1번 회원이 로그인한 경우

하이라이팅이 된 버튼을 다시 눌렀을 경우?

-->취소

0개의 댓글