Programming/스프링(spring) - Enterprise

스프링(spring)/ +더하기 6(게시판별 좋아요 시스템 구현)

esoog Polaris 2023. 8. 8. 12:05
반응형

1. 1:1 논쟁이라는 시스템을 살려서 그 매치 자체에 대한 좋아요 기능을 구현하고자 한다.

먼저 천천히 숨을 가다듬고, 매퍼파일 부터 추가한다.(새로운 테이블 객체 생성시, VO파일에 추가 필수!)

 

<update id="updateCount"
		parameterType="com.project.model.BoardVO">
		update counter
		set
		senderGood = senderGood+#{senderGood},
		senderBad = senderBad+#{senderBad},
		receiverGood = receiverGood+#{receiverGood},
		receiverBad = receiverBad+#{receiverBad},
		debateGood = debateGood+#{debateGood},
		debateBad = debateBad+#{debateBad}
		where channel= #{channel}
	</update>
    
	<select id="counter"
		parameterType="com.project.model.BoardVO" resultType="com.project.model.BoardVO">
		SELECT * FROM
		counter
		WHERE
		channel=#{channel}
	</select>

* 이전에 만들었던 1:1매칭 채널 관련 테이블을 사용해서 count를 업데이트하고 셀렉트 하는 로직.

 

 

 

 

2. DAO와 Service파일에는

 

public void updateCount(BoardVO vo)throws Exception;
public List<BoardVO> counter(BoardVO vo)throws Exception;

 

 

DAOImpl 파일에는

 

@Override
	public void updateCount(BoardVO vo) throws Exception {
		sql.update(namespace + ".updateCount", vo);
	}
	@Override
	public List<BoardVO> counter(BoardVO vo) throws Exception {
		return sql.selectList(namespace + ".counter", vo.getChannel());
	}

 

 

ServiceImpl파일에는

 

@Override
	public void updateCount(BoardVO vo) throws Exception {
		dao.updateCount(vo);
	}
	@Override
	public List<BoardVO> counter(BoardVO vo) throws Exception {
		return dao.counter(vo);
	}

 

 

 

 

 

3. 1:1관전 시스템 Controller단에서도 처리하는 데이터 모델과 포스트 매핑을 수정해줘야 한다.

 

	// 논쟁 3자 구경
	@RequestMapping(value = "/debate3", method = RequestMethod.GET)
	public void getDebate3(BoardVO vo, Model model)
			throws Exception {
		// 그러니까 기존 주제 최초 발언 게시글 데이터
		List<BoardVO> originList = null;
		originList = service.originList(vo.getIdx());
		model.addAttribute("originList", originList);

		List<BoardVO> debate = null;
		debate = service.debate(vo.getIdx(), vo.getSender());
		model.addAttribute("debate", debate);
		
		List<BoardVO> counter = null;
		counter = service.counter(vo);
		model.addAttribute("counter", counter);
	}
	@RequestMapping(value = "/debate3", method = RequestMethod.POST)
	public String postDebate3(BoardVO vo) throws Exception {
		service.updateCount(vo);
		return "redirect:/board/debate?idx=" + vo.getIdx() + "&sender=" + vo.getSender() + "&channel=" + vo.getChannel() ;
	}

 

 

 

 

 

4. 마지막으로 관전페이지 jsp파일에 와서 전체 수정.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<link rel="stylesheet" href="../../resources/debate.css">
<!-- 합쳐지고 최소화된 최신 CSS -->
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<!-- 부가적인 테마 -->
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">

<script
	src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<title>작성</title>
</head>
<body>

	<c:if test="${member == null}">
		<script>
			alert("로그인을 해야 작성이 가능합니다.");
			window.location.href = '/'; // 여기서 '/페이지'는 이동하고자 하는 페이지의 URL입니다.
		</script>
	</c:if>

	<div class="contentBox">
		<c:forEach items="${counter}" var="counter">
			<c:set var="senderGood" value="${counter.senderGood}"></c:set>
			<c:set var="senderBad" value="${counter.senderBad}"></c:set>
			<c:set var="receiverGood" value="${counter.receiverGood}"></c:set>
			<c:set var="receiverBad" value="${counter.receiverBad}"></c:set>
			<c:set var="debateGood" value="${counter.debateGood}"></c:set>
			<c:set var="debateBad" value="${counter.debateBad}"></c:set>
		</c:forEach>

		<c:forEach items="${originList}" var="originList">
			<div class="userBox">
				<h1>최초 논점</h1>
				<div>
					<fmt:formatDate value="${originList.date}"
						pattern="yyyy-MM-dd HH:mm:ss" />
				</div>
				<div>${originList.nick}</div>
				<div>${originList.text}</div>
				<button class="debateGood" id="debateGood">논쟁굿
					${debateGood}</button>
				<button class="debateBad" id="debateBad">논쟁베드 ${debateBad}</button>
			</div>
			<c:set var="originListNick" value="${originList.nick}"></c:set>
			<c:set var="originListIdx" value="${originList.idx}"></c:set>
		</c:forEach>

		<c:forEach items="${debate}" var="debate">
			<c:if test="${debate.nick==originListNick}">
				<div class="originBox">
					<div>
						<fmt:formatDate value="${debate.date}"
							pattern="yyyy-MM-dd HH:mm:ss" />
					</div>
					<div>${debate.nick}</div>
					<div>${debate.text}</div>
					<button class="receiverGood" id="receiverGood">오리진굿
						${receiverGood}</button>
					<button class="receiverBad" id="receiverBad">오리진베드
						${receiverBad}</button>
				</div>
			</c:if>
			<c:if test="${debate.nick!=originListNick}">
				<div class="newBox">
					<div>
						<fmt:formatDate value="${debate.date}"
							pattern="yyyy-MM-dd HH:mm:ss" />
					</div>
					<div>${debate.nick}</div>
					<div>${debate.text}</div>
					<button class="senderGood" id="senderGood">논객굿
						${senderGood}</button>
					<button class="senderBad" id="senderBad">논객베드 ${senderBad}</button>
				</div>
				<c:set var="senderNick" value="${debate.nick}"></c:set>
			</c:if>
		</c:forEach>
	</div>

	<input type="hidden" class="form-control" id="channel" name="channel"
		value="${originListIdx}${senderNick}${originListNick}" />

	<script type="text/javascript">
		$(document).ready(function() {
			var channel = $("#channel").val().trim();

			$("#senderGood").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 1,
						senderBad : 0,
						receiverGood : 0,
						receiverBad : 0,
						debateGood : 0,
						debateBad : 0
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						location.reload(); // 페이지 리로드
					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
			$("#senderBad").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 0,
						senderBad : 1,
						receiverGood : 0,
						receiverBad : 0,
						debateGood : 0,
						debateBad : 0
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						// 요청 성공 시 실행할 코드
						location.reload(); // 페이지 리로드
					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
			$("#receiverGood").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 0,
						senderBad : 0,
						receiverGood : 1,
						receiverBad : 0,
						debateGood : 0,
						debateBad : 0
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						// 요청 성공 시 실행할 코드
						location.reload(); // 페이지 리로드

					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
			$("#receiverBad").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 0,
						senderBad : 0,
						receiverGood : 0,
						receiverBad : 1,
						debateGood : 0,
						debateBad : 0
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						// 요청 성공 시 실행할 코드
						location.reload(); // 페이지 리로드

					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
			$("#debateGood").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 0,
						senderBad : 0,
						receiverGood : 0,
						receiverBad : 0,
						debateGood : 1,
						debateBad : 0
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						// 요청 성공 시 실행할 코드
						location.reload(); // 페이지 리로드

					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
			$("#debateBad").on("click", function() {
				$.ajax({
					type : "POST", // 요청 메소드
					url : "/board/debate3", // 요청 보낼 URL
					data : {
						channel : channel,
						senderGood : 0,
						senderBad : 0,
						receiverGood : 0,
						receiverBad : 0,
						debateGood : 0,
						debateBad : 1
					}, // 보낼 데이터 (필요에 따라 수정)
					success : function(response) {
						// 요청 성공 시 실행할 코드
						location.reload(); // 페이지 리로드

					},
					error : function(xhr, status, error) {
						// 요청 실패 시 실행할 코드
					}
				});
			});
		});
	</script>
</body>
</html>

* 아직은 자바스크립트로 동적인 페이지 형성이 미숙해 코드가 길다.

그래도

 

 

 

 

 

확인. 나이스

728x90