북마크 기능 구현
html
<div th:if="${userId} == null" onclick='alert("로그인 후 이용해주세요!")' class="bookmarkBox" >
<i class="fa-bookmark"></i>
</div>
<div th:if="${userId} != null" onclick="bookmark()" class="bookmarkBox" >
<i class="fa-bookmark"></i>
</div>
로그인이 되어있는 유저만 북마크 api 요청 가능하도록 th:if문 사용
js
function showBookmarkStatus(){
let class_bookmark;
if(bookmarkByLoginUser === "false") {
class_bookmark = "fa-regular";
}else {
class_bookmark = "fa-solid";
}
$('.fa-bookmark').addClass(class_bookmark);
}
function bookmark(){
if ($('.fa-bookmark').hasClass("fa-regular")){
$.ajax({
type: "POST",
url: `/api/cafes/${id}/bookmark`,
data: {},
success: function (response) {
$('.fa-bookmark').addClass("fa-solid").removeClass("fa-regular");
}
})
} else {
$.ajax({
type: "DELETE",
url: `/api/cafes/${id}/bookmark`,
data: {},
success: function (response) {
$('.fa-bookmark').addClass("fa-regular").removeClass("fa-solid");
}
})
}
}
페이지 호출시 로그인한 유저가 해당 게시물에 북마크 했는지 여부에 따라 다른 class를 적용하여 북마크 이모지를 다르게 표시하도록 분기처리
-> 적용된 클레스에 따라 ajax 호출 분기 처리
controller
@PostMapping("/api/cafes/{id}/bookmark")
public void createBookmark(@PathVariable Long id, User loginUser) {
cafeService.saveCafeBookmark(id, loginUser);
}
@DeleteMapping("/api/cafes/{id}/bookmark")
public void deleteBookmark(@PathVariable Long id, User loginUser) {
cafeService.removeCafeBookmark(id, loginUser);
}
service
@Transactional
public void saveCafeBookmark(Long cafeId, User loginUser) {
User user = userRepoistory.findById(loginUser.getId()).orElseThrow(
() -> new IllegalArgumentException(USER_NOT_FOUND.getMessage()));
Cafe cafe = cafeRepository.findById(cafeId).orElseThrow(
() -> new IllegalArgumentException(CAFE_NOT_FOUND.getMessage()));
CafeBookmark cafeBookmark = CafeBookmark.builder()
.user(user)
.cafe(cafe)
.build();
cafeBookmarkRepository.save(cafeBookmark);
}
@Transactional
public void removeCafeBookmark(Long cafeId, User loginUser) {
cafeBookmarkRepository.deleteByCafeIdAndUserId(cafeId, loginUser.getId());
}
'프로그래밍 > JPA Project - sparta' 카테고리의 다른 글
Spring Data JPA - LIKE문 (0) | 2022.08.18 |
---|---|
전략 패턴 리팩토링 - Sort (0) | 2022.07.28 |
SpringDataJPA정렬기능 심화! @Formula ★★★★★ (0) | 2022.07.27 |
tip. 인텔리제이 Local History 기능 (0) | 2022.07.27 |
다른 사용자의 데이터 접근 불가 처리 (0) | 2022.07.26 |