사용자 좋아요 싫어요 상태 내려주는 로직 추가.

This commit is contained in:
nevermoregb 2025-03-28 13:10:14 +09:00
parent fe7afd1d7f
commit 7b2cab5b95
3 changed files with 87 additions and 5 deletions

View File

@ -130,6 +130,10 @@ public interface localbordMapper {
void deleteGoodOrBadByCommentId(MapDto map); void deleteGoodOrBadByCommentId(MapDto map);
MapDto selectMyBoardReaction(MapDto boardDetail);
MapDto selectMyBoardReactions(MapDto param);
} }

View File

@ -227,7 +227,8 @@ public class localbordService {
PageHelper.startPage(page, size); PageHelper.startPage(page, size);
List<MapDto> result = boardMapper.selectComments(map); List<MapDto> result = boardMapper.selectComments(map);
enrichCommentsWithAdditionalData(result); // 댓글 데이터 보강 enrichCommentsWithAdditionalData(map, result); // 댓글 데이터 보강
return PageUtil.redefineNavigation(new PageInfo<>(result, size)); return PageUtil.redefineNavigation(new PageInfo<>(result, size));
} }
@ -397,12 +398,18 @@ public class localbordService {
private void enrichBoardDetail(MapDto boardDetail) { private void enrichBoardDetail(MapDto boardDetail) {
if(boardDetail == null) return; if(boardDetail == null) return;
long userId = AuthUtil.getUser().getId();
long boardId = ((Number) boardDetail.get("id")).longValue(); long boardId = ((Number) boardDetail.get("id")).longValue();
boardDetail.put("userId", userId);
boardDetail.put("hasAttachment", selectIsAttachments(boardId)); boardDetail.put("hasAttachment", selectIsAttachments(boardId));
boardDetail.put("commentCount", selectCountComments(boardId)); boardDetail.put("commentCount", selectCountComments(boardId));
MapDto reactions = selectCountBoardReactions(boardId); MapDto reactions = selectCountBoardReactions(boardId);
long myReaction = this.selectMyBoardReaction(boardDetail);
boardDetail.put("likeCount", reactions.getOrDefault("likeCount", 0)); boardDetail.put("likeCount", reactions.getOrDefault("likeCount", 0));
boardDetail.put("dislikeCount", reactions.getOrDefault("dislikeCount", 0)); boardDetail.put("dislikeCount", reactions.getOrDefault("dislikeCount", 0));
boardDetail.put("myReaction", myReaction);
// Blob 데이터를 문자열로 변환 // Blob 데이터를 문자열로 변환
Object content = boardDetail.get("content"); Object content = boardDetail.get("content");
@ -412,6 +419,43 @@ public class localbordService {
} }
} }
// 사용자 게시글 좋아요/싫어요 조회
private long selectMyBoardReaction(MapDto boardDetail) {
MapDto map = boardMapper.selectMyBoardReaction(boardDetail);
long result = 3;
if(map == null) {
result = 3;
} else if("T".equals(map.getString("LOCGOBGOD")) && "F".equals(map.getString("LOCGOBBAD"))) {
result = 1;
} else if("F".equals(map.getString("LOCGOBGOD")) && "T".equals(map.getString("LOCGOBBAD"))) {
result = 2;
} else {
result = 3;
}
return result;
}
// 사용자 댓글 좋아요/싫어요 조회
private long selectMyBoardReactions(MapDto param) {
MapDto map = boardMapper.selectMyBoardReactions(param);
long result = 3;
if(map == null) {
result = 3;
} else if("T".equals(map.getString("LOCGOBGOD")) && "F".equals(map.getString("LOCGOBBAD"))) {
result = 1;
} else if("F".equals(map.getString("LOCGOBGOD")) && "T".equals(map.getString("LOCGOBBAD"))) {
result = 2;
} else {
result = 3;
}
return result;
}
private void enrichPostsWithAdditionalData(List<MapDto> posts) { private void enrichPostsWithAdditionalData(List<MapDto> posts) {
for (MapDto post : posts) { for (MapDto post : posts) {
Object idObject = post.get("id"); Object idObject = post.get("id");
@ -434,7 +478,7 @@ public class localbordService {
} }
} }
private void enrichCommentsWithAdditionalData(List<MapDto> comments) { private void enrichCommentsWithAdditionalData(MapDto map, List<MapDto> comments) {
for (MapDto comment : comments) { for (MapDto comment : comments) {
Object idObject = comment.get("LOCCMTSEQ"); Object idObject = comment.get("LOCCMTSEQ");
String userId = ""; String userId = "";
@ -449,17 +493,26 @@ public class localbordService {
if (idObject instanceof Number) { if (idObject instanceof Number) {
long commentId = ((Number) idObject).longValue(); long commentId = ((Number) idObject).longValue();
long id = AuthUtil.getUser().getId(); //사용자 아이디
MapDto reactions = boardMapper.selectCountCommentReactions(commentId); MapDto reactions = boardMapper.selectCountCommentReactions(commentId);
comment.put("likeCount", reactions != null ? reactions.getOrDefault("likeCount", 0) : 0); comment.put("likeCount", reactions != null ? reactions.getOrDefault("likeCount", 0) : 0);
comment.put("dislikeCount", reactions != null ? reactions.getOrDefault("dislikeCount", 0) : 0); comment.put("dislikeCount", reactions != null ? reactions.getOrDefault("dislikeCount", 0) : 0);
map.put("userId", id);
map.put("boardId", map.get("LOCBRDSEQ"));
map.put("commentId", commentId);
comment.put("myReaction", this.selectMyBoardReactions(map));
Object content = comment.get("content"); Object content = comment.get("content");
comment.put("content", content); comment.put("content", content);
} }
} }
} }
/** /**
* 게시판 수정 * 게시판 수정
* *

View File

@ -378,7 +378,32 @@
COALESCE(SUM(CASE WHEN LOCGOBBAD = 'T' THEN 1 ELSE 0 END), 0) AS dislikeCount COALESCE(SUM(CASE WHEN LOCGOBBAD = 'T' THEN 1 ELSE 0 END), 0) AS dislikeCount
FROM localgorb FROM localgorb
WHERE LOCBRDSEQ = #{boardId} AND LOCCMTSEQ IS NULL; WHERE LOCBRDSEQ = #{boardId} AND LOCCMTSEQ IS NULL;
</select>
<!-- 사용자 게시물 좋아요/싫어요 상태 조회 -->
<select id="selectMyBoardReaction">
SELECT
LOCGOBGOD,
LOCGOBBAD
FROM
localgorb
WHERE
LOCBRDSEQ = #{id}
AND LOCCMTSEQ IS NULL
AND MEMBERSEQ = #{userId};
</select>
<!-- 사용자 댓글 게시물 좋아요/싫어요 상태 조회 -->
<select id="selectMyBoardReactions">
SELECT
LOCGOBGOD,
LOCGOBBAD
FROM
localgorb
WHERE
LOCBRDSEQ = #{boardId}
AND LOCCMTSEQ = #{commentId}
AND MEMBERSEQ = #{userId};
</select> </select>
<!-- 댓글별 좋아요/싫어요 개수 조회 --> <!-- 댓글별 좋아요/싫어요 개수 조회 -->