Profile.jsp
<c:choose>
<c:when test="${dto.pageOwnerState}">
<button class="cta" onclick="location.href='/image/upload'">사진등록</button>
</c:when>
<c:otherwise>
<c:choose>
<c:when test= "${dto.subscribeState}">
<button class="cta blue" onclick="toggleSubscribe(${dto.user.id}, this)">구독취소</button>
</c:when>
<c:otherwise>
<button class="cta" onclick="toggleSubscribe(${dto.user.id}, this)">구독하기</button>
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
이전에 c:choose 했었던 구독버튼 온클릭 이벤트에 ${dto.user.id} , 함수를 바로 불러오는 this를 추가
SusbcribeApiController
@RequiredArgsConstructor
@RestController
public class SubscribeApiController {
private final SubscribeService subscribeService;
@PostMapping("/api/subscribe/{toUserId}")
public ResponseEntity<?> subscribe(@AuthenticationPrincipal PrincipalDetails principalDetails , @PathVariable int toUserId ){
subscribeService.구독하기(principalDetails.getUser().getId(),toUserId);
return new ResponseEntity<>(new CMRespDto<>(1, "구독하기 성공", null), HttpStatus.OK);
}
@DeleteMapping("/api/subscribe/{toUserId}")
public ResponseEntity<?> unsubscribe(@AuthenticationPrincipal PrincipalDetails principalDetails , @PathVariable int toUserId ){
subscribeService.구독취소하기(principalDetails.getUser().getId(), toUserId);
return new ResponseEntity<>(new CMRespDto<>(1, "구독취소하기 성공", null), HttpStatus.OK);
}
}
이전에 만들어놓은 구독하기 로직의 맵핑주소를 토대로 Ajax를 만들어준다.
// (1) 유저 프로파일 페이지 구독하기, 구독취소
function toggleSubscribe(toUserId, obj) {
if ($(obj).text() === "구독취소") {
$.ajax({
type: "delete",
url: "/api/subscribe/"+toUserId,
dataType: "json"
}).done(res=>{
$(obj).text("구독하기");
$(obj).toggleClass("blue");
}).fail(error=>{
console.log("구독취소실패", error);
});
} else {
$.ajax({
type: "post",
url: "/api/subscribe/"+toUserId,
dataType: "json"
}).done(res=>{
$(obj).text("구독취소");
$(obj).toggleClass("blue");
}).fail(error=>{
console.log("구독하기실패", error);
});
}
}
profile.js에 ajax문을 추가하고.
this로 obj를 받아오고 , 세션값인 ${dto.user.id} 로 toUserId 사용하여 url을 받았다.
별다른 입력값이 없기때문에 ajax는 type, url, dataType 정도면 해결.
구독하기 와 구독취소가 정상적으로 실행된다.
'Spring > JPA + Security' 카테고리의 다른 글
[Spring Data JPA] 구독하기 구현하기 -4 구독리스트 구현, JPQL 사용한 Native Query (0) | 2023.01.11 |
---|---|
[Spring Data JPA] 구독하기 구현하기 - 3 구독정보 모달 구현, Mysql 스칼라 서브쿼리 만들기 (0) | 2023.01.11 |
[Spring Data JPA] 로그인 상태에 따라 다른 구독버튼 / 구독하기 - 1-1 (0) | 2023.01.10 |
[Spring Data JPA] 구독하기 구현하기 - 1 구독 정보 DB 완성 및 구현 (0) | 2023.01.10 |
[Spring Data JPA]게시물 띄우는 로직 만들기 -2 뷰 렌더링 (0) | 2023.01.10 |
댓글