2024-02-14 (45일차) - 게시물 좋아요, 싫어요, 추천 합

·2024년 2월 14일

📅 2024-02-14, 45일차


TODO

  • figma
  • 프로젝트 (좋아요/댓글기능 빼고)
    • 간단하게라도 게시판 디자인 하기

좋아요기능 좋아요 버튼으로만 구현

  • 문제상황:
    -> 좋아요 클릭 시 +1 증가하지만, 누를때마다 증가 됨
    -> 좋아요 클릭 후, detail페이지로 돌아가지 못함
<script>
	function ArticleDetail__doIncreaseLikeCount() {
		
		const localStorageKey = 'article__' + params.id + '__alreadyLike';

		if (localStorage.getItem(localStorageKey)) {
			return;
		}

		localStorage.setItem(localStorageKey, true);

		$.get('../article/doIncreaseLikeCountRd', {
			id : params.id,
			ajaxMode : 'Y'
		}, function(data) {
			$('.article-detail__like-count').empty().html(data.data1);
		}, 'json');
	}

</script>

이건 사용하지 않기로..


좋아요 기능 구현

요구사항:

  • 좋아요, 싫어요, 추천 합이 모두 나오게 구현
  1. 좋아요 테이블 생성 (누가 어디서 좋아요를 눌렀는지를 기반으로)
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
INNER JOIN `member` AS M
ON A.memberId = M.id
LEFT JOIN reactionPoint AS RP
ON A.id = RP.relId AND RP.relTypeCode = 'article'
GROUP BY A.id
ORDER BY A.id DESC;
  1. 테스트 데이터 생성
# reactionPoint 테스트 데이터 생성
# 1번 회원이 1번 글에 싫어요
INSERT INTO reactionPoint
SET regDate = NOW(),
updateDate = NOW(),
memberId = 1,
relTypeCode = 'article',
relId = 1,
`point` = -1;
.
.
# 이하 생략
  1. ArticleRepository에 detail(article)불러오기에 적용시키기
	@Select("""
				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
				INNER JOIN `member` AS M
				ON A.memberId = M.id
				LEFT JOIN reactionPoint AS RP
				ON A.id = RP.relId AND RP.relTypeCode = 'article'
				WHERE A.id = #{id}
				GROUP BY A.id
				""")
	public Article getForPrintArticle(int id);

IFNULL

IFNULL (SUM(RP.point), 0) 
# 만약 nulll이 아니라면 RP.point의 sum을 보여주고, null이라면 0을 보여줘.

요구사항:

  • 테스트 데이터로 좋아요, 싫어요, 추천 합을 보여줬으니, 실제로 게시판에서 사용자가 사용 할 수 있도록 디article detail에 좋아요, 싫어요 버튼 처리
  • 리스트에 좋아요, 싫어요, 추천 합도 표시 될 수 있도록

UPDATE JOIN

테이블 2개에 JOIN을 걸어서 UPDATE를 해야 할 경우도 있음

#SELECT JOIN
SELECT columnA
FROM tableA AS A
INNER JOIN tableB AS B
ON A.id = B.id
WHERE#UPDATE JOIN
UPDATE tableA AS A
INNER JOIN tableB AS B
ON A.id = B.id
SET A.columnA = 변경할값
WHERE

article 테이블에 good,bad reactionPoint 컬럼 추가, update join 활용해서 reactionPoint 테이블의 데이터를 article 테이블에 적용

# update join -> 기존 게시물의 good,bad RP 값을 RP 테이블에서 가져온 데이터로 채운다
UPDATE article AS A
INNER JOIN (
    SELECT RP.relTypeCode,RP.relId,
    SUM(IF(RP.point > 0, RP.point, 0)) AS goodReactionPoint,
    SUM(IF(RP.point < 0, RP.point * -1, 0)) AS badReactionPoint
    FROM reactionPoint AS RP
    GROUP BY RP.relTypeCode, RP.relId
) AS RP_SUM
ON A.id = RP_SUM.relId
SET A.goodReactionPoint = RP_SUM.goodReactionPoint,
A.badReactionPoint = RP_SUM.badReactionPoint;
profile
hello world

0개의 댓글