1) articleController에서 actorCanMakeReaction 사용
ResultData actorCanMakeReactionRd = reactionPointService.actorCanMakeReaction(rq.getLoginedMemberId(),
"article", id);
model.addAttribute("actorCanMakeReactionRd", actorCanMakeReactionRd);
model.addAttribute("actorCanMakeReaction", actorCanMakeReactionRd.isSuccess());
if (actorCanMakeReactionRd.getResultCode().equals("F-2")) {
int sumReactionPointByMemberId = (int) actorCanMakeReactionRd.getData1();
if (sumReactionPointByMemberId > 0) {
model.addAttribute("actorCanCancelGoodReaction", true);
} else {
model.addAttribute("actorCanCancelBadReaction", true);
}
}
reactionPointService.actorCanMakeReaction
: 좋아요/싫어요 할수있는지 여부를 ResultData로 반환actorCanMakeReactionRd.getResultCode().equals("F-2")
: 좋아요/싫어요 할수있는지 결과가 F-2
, 즉 할수없을때sumReactionPointByMemberId
를통해actorCanCancelBadReaction
(싫어요 취소 가능) true, 1이라면 actorCanCancelGoodReaction
(좋아요 취소 가능한지) true를detail.jsp
에서 해당 데이터를 바탕으로 버튼 노출을 하기위해 model객체에 addAttribute한다. 싫어요 리액션을 했다면
싫어요 취소 버튼이 노출되고 좋아요 버튼은 비활성화 버튼이 노출 되야한다.좋아요 리액션을 했다면
좋아요 취소 버튼이 노출되고 싫어요 버튼은 비활성화 버튼이 노출 되야한다.2) reactionPointService.actorCanMakeReaction()
public ResultData actorCanMakeReaction(int actorId, String relTypeCode, int id) {
// 로그인 안한상태
if (actorId == -1) {
return ResultData.from("F-1", "로그인 후 이용해주세요");
}
int sumReactionPointByMemberId = reactionPointRepository.getSumReactionPointByMemberId(actorId, relTypeCode, id);
if (sumReactionPointByMemberId != 0) {
return ResultData.from("F-2", "리액션을 할 수 없습니다", "sumReactionPointByMemberId", sumReactionPointByMemberId);
}
return ResultData.from("S-1", "리액션을 할 수 있습니다", "sumReactionPointByMemberId", sumReactionPointByMemberId);
}
좋아요/싫어요 할수있는지 여부
와 sumReactionPointByMemberId
을 ResultData로 반환리액션포인트가 0
이 아니라면, 이미 리액션을 한경우이므로 리액션을 할수없다.3) detail.jsp의 리액션 좋아요 취소 버튼
<c:if test="${actorCanCancelGoodReaction}">
<span> </span>
<a href="/usr/reactionPoint/doGoodReaction?relTypeCode=article&relId=${param.id}&replaceUri=${rq.encodedCurrentUri}"
class="btn btn-outline btn-xs">좋아요 👍</a>
<span> </span>
<a onclick="alert(this.title); return false;" title="좋아요를 취소해주세요" href="#" class="btn btn-outline btn-xs">싫어요
👎</a>
</c:if>
좋아요 리액션을 한 경우에 나타는 버튼
싫어요버튼
을 클릭시 기능이 동작하지 않고 경고창을 띄움4) 좋아요 취소 버튼 클릭시
@RequestMapping("/usr/reactionPoint/doCancelGoodReaction")
@ResponseBody
public String doCancelGoodReaction(String relTypeCode, int relId, String replaceUri) {
ResultData actorCanMakeReactionRd = reactionPointService.actorCanMakeReaction(rq.getLoginedMemberId(),
relTypeCode, relId);
if (actorCanMakeReactionRd.isSuccess()) {
return rq.jsHistoryBackOnView("좋아요 버튼이 클릭되지 않았습니다.");
}
reactionPointService.deleteGoodReactionPoint(rq.getLoginedMemberId(), relTypeCode, relId);
return rq.jsReplace("좋아요 취소!", replaceUri);
}
actorCanMakeReactionRd.isSuccess()
: 취소 버튼을 눌렀다면 actorCanMakeReactionRd는 false값을 반환(이미 좋아요가 선택됬기때문에)if (actorCanMakeReactionRd.isSuccess())
: 브라우저에서 버튼클릭이외에 직접 uri작성하여 이동하는 경우간략하게 설명
싫어요기능도 좋아요 기능과 방식은 동일
로그인이 안됬을경우, 좋아요 /싫어요( 선택되지 않은 상태 ) 버튼이 노출 X
로그인이 된경우, 좋아요/ 싫어요( 선택되지 않은 상태 ) 버튼 노출 O
좋아요 버튼을 눌렀을 경우 싫어요 버튼은 비활성화되고 좋아요 버튼은 좋아요취소버튼으로 노출
싫어요 버튼을 눌렀을 경우 좋아요 버튼은 비활성화되고 싫어요 버튼은 싫어요취소버튼으로 노출
각각 버튼클릭시 DB에도 업데이트