_%EB%A6%AC%EC%8A%A4%ED%8A%B8_%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8.drawio.png)
// 게시판에서나 상대방 페이지에서 팔로우 팔로잉 클릭할때 추가, 삭제
@RequestMapping(value="/follow.do", method=RequestMethod.POST)
public String boardfollow(@RequestParam("followId") String followId,
HttpSession session, Model model) throws Exception {
// 세션에서 현재 로그인 아이디 가져오기
MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
String memberId = memberDomain.getMemberId();
// 맵에 회원 아이디와 팔로우 아이디 넣기
Map<String, Object> followIds = new HashMap<>();
followIds.put("followId", followId);
followIds.put("memberId", memberId);
String checkBoardFollow = "false";
if(followService.checkBoardFollow(followIds) != null) {
checkBoardFollow = followService.checkBoardFollow(followIds);
}
System.out.println("팔로우 컨트롤러에서 checkBoardFollow : " + checkBoardFollow);
if(checkBoardFollow.equals("true")) {
// 언팔
followService.deleteFollow(followIds);
}else {
// 팔로우
followService.addFollow(followIds);
}
model.addAttribute("checkBoardFollow", checkBoardFollow);
// 팔로우 팔로잉 수
int followCount = followService.followCount(memberId);
int followingCount = followService.followingCount(memberId);
session.setAttribute("followCount", followCount);
session.setAttribute("followingCount", followingCount);
return "/mypage/follow/follower";
}
// 팔로우
@Override
public void addFollow(Map<String, Object> followIds) throws Exception {
followDAO.addFollow(followIds);
}
// 언팔
@Override
public void deleteFollow(Map<String, Object> followIds) throws Exception {
followDAO.deleteFollow(followIds);
}
// 게시판이나 상대방 페이지에서 팔로우 여부 체크
@Override
public String checkBoardFollow(Map<String, Object> followIds) throws Exception {
return followDAO.checkBoardFollow(followIds);
}
// 팔로우 카운트
@Override
public int followCount(String memberId) throws Exception {
return followDAO.followCount(memberId);
}
// 팔로잉 카운트
@Override
public int followingCount(String memberId) throws Exception {
return followDAO.followingCount(memberId);
}
// 팔로우 추가
@Override
public void addFollow(Map<String, Object> followIds) throws DataAccessException {
sqlSession.insert("mapper.follow.addFollow", followIds);
}
// 팔로우 삭제
@Override
public void deleteFollow(Map<String, Object> followIds) throws DataAccessException {
sqlSession.delete("mapper.follow.deleteFollow", followIds);
}
// 팔로우 여부 체크
@Override
public String checkBoardFollow(Map<String, Object> followIds) throws DataAccessException {
return sqlSession.selectOne("mapper.follow.checkBoardFollow", followIds);
}
// 팔로우 카운트
@Override
public int followCount(String memberId) throws DataAccessException {
return sqlSession.selectOne("mapper.follow.followCount", memberId);
}
// 팔로잉 카운트
@Override
public int followingCount(String memberId) throws DataAccessException {
return sqlSession.selectOne("mapper.follow.followingCount", memberId);
}
<!-- 팔로우 추가 -->
<insert id="addFollow" parameterType="MAP">
<![CDATA[
BEGIN
INSERT INTO follower(memberId, followerId)
VALUES(#{followId}, #{memberId});
INSERT INTO following(memberId, followerId)
VALUES(#{memberId}, #{followId});
END;
]]>
</insert>
<!-- 언팔 -->
<delete id="deleteFollow" parameterType="MAP">
<![CDATA[
BEGIN
DELETE FROM follower
WHERE memberId = #{followId} AND followerId = #{memberId};
DELETE FROM following
WHERE memberId = #{memberId} AND followerId = #{followId};
END;
]]>
</delete>
<!-- 게시판이나 상대방 페이지에서 팔로우 여부 체크 -->
<select id="checkBoardFollow" parameterType="MAP" resultType="String">
SELECT
CASE
WHEN EXISTS (
SELECT 0
FROM following
WHERE memberId = #{memberId}
AND followerId = #{followId}
)
THEN 'true'
ELSE 'false'
END
FROM dual
</select>
<!-- 팔로워 수 -->
<select id="followCount" parameterType="String" resultType="int">
<![CDATA[
SELECT COUNT(followerId)
from follower
where memberId = #{memberId}
]]>
</select>
<!-- 팔로잉 수 -->
<select id="followingCount" parameterType="String" resultType="int">
<![CDATA[
SELECT COUNT(followerId)
from following
where memberId = #{memberId}
]]>
</select>
// 버튼 클릭 시
function follow(followerId) {
var followId = followerId;
$.ajax({
url: '/gami/mypage/follow/follow.do',
type: 'POST',
data: { followId: followId },
success: function() {
alert("팔로우 성공");
location.reload();
},
error: function() {
alert("팔로우 실패");
}
});
}
<aside> 💡
팔로우 여부를 체크해서 false면 추가하고 true면 지우게 함.
추가 혹은 삭제를 진행한 후에는 팔로우, 팔로잉 카운트를 세션에 넣어 사이드바에 띄울 수 있게 함. 버튼 클릭시 말고도 로그인할때, 마이페이지에 들어갈때도 조회하여 세션에 담을 수 있게 함.
</aside>