[Spring Boot 게시판] 23일차

김정현·2022년 10월 27일
0

SPRINGBOOT게시판

목록 보기
23/36

좋아요/싫어요 버튼 기능 구현

좋아요 싫어요 기능이 비슷하므로 좋아요 기능만 설명

1) reactionController

	@RequestMapping("/usr/reactionPoint/doGoodReaction")
	@ResponseBody
	public String doGoodReaction(String relTypeCode , int relId, String replaceUri) {
		boolean actorCanMakeReaction = reactionPointService.actorCanMakeReaction(rq.getLoginedMemberId(),relTypeCode,relId );
		if(actorCanMakeReaction==false) {
			return rq.jsHistoryBack("이미 처리되었습니다.");
		}
		reactionPointService.addGoodReactionPoint(rq.getLoginedMemberId(),relTypeCode,relId);
		
		return rq.jsReplace("좋아요!", replaceUri);
	}
  • 좋아요 버튼이 클릭이되면 /usr/reactionPoint/doGoodReaction로 이동이 된다.
  • actorCanMakeReaction()를 통해 좋아요/싫어요 했는지 여부를 파악하고
  • 좋아요를 했다면 뒤로가기
  • addGoodReactionPoint() : 좋아요시 reactionPoint테이블과 article테이블에도 업데이트하는 메소드
  • 좋아요/싫어요 정보가 게시물에도 있기 때문에 reactionPoint테이블과 함께 article테이블도 업데이트를 해줘야한다.
  • 좋아요 업데이트 성공시 해당 replaceUri로 이동

2) reactionService

	public ResultData addGoodReactionPoint(int actorId, String relTypeCode, int relId) {
		reactionPointRepository.addGoodReactionPoint(actorId,relTypeCode,relId);
			
		switch (relTypeCode) {
			case "article":
			articleService.increaseGoodReactionPoint(relId);
			break;
		}
		return ResultData.from("S-1", "좋아요 처리 되었습니다");
	}
  • reactionPointRepository.addGoodReactionPoint()를 통해 reactionPoint 테이블에도 업데이트하고
  • articleService.increaseGoodReactionPoint(relId)를 통해 게시물테이블에도 업데이트
  • 이때 switch문 에서 article밖에 없지만 댓글기능이 추가되면 댓글에대한 case도 추가되야 한다.

3) reactionRepository

	@Insert("""
		<script>
			INSERT INTO reactionPoint
			SET regDate = NOW(),
			updateDate = NOW(),
			memberId = #{actorId},
			relTypeCode =#{relTypeCode},
			relId = #{relId},
			`point` = 1;
		</script>				
				""")
	public void addGoodReactionPoint(int actorId, String relTypeCode, int relId);
  • DB에 추가하는 쿼리문

4) rq객체의 getCurrentUri()

		public String getCurrentUri() {
		String currentUri = req.getRequestURI();
		String queryString = req.getQueryString();

		if (queryString != null && queryString.length() > 0) {
			currentUri += "?" + queryString;
		}

		return currentUri;
	}
  • detail페이지에서 좋아요/싫어요 버튼 클릭시로 이동해야할 uri가져오는 메소드로
  • 즉, 좋아요/싫어요 버튼 클릭후 기능이 실행된후 이동되야할 uri로 detail페이지를 의미한다.
  • req.getRequestURI() : request객체로부터 해당uri를 가져오는 메소드
  • req.getQueryString() : request객체로부터 쿼리스트링을 가져오는 메소드

5) getUriEncoded()

    public static String getUriEncoded(String str) {
            try {
                return URLEncoder.encode(str, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                return str;
            }
        }
  • 위의 메소드는 getCurrentUri()를 인코딩하여 반환하는 메소드로
  • 인코딩 하는 이유는 운영체제마다 일부 문자(/, #, =, &, ?, %, +, 등등) 를 인식하는 방식이 다르기 때문

0개의 댓글