1. LikeRepository
@Repository
public interface LikeRepository extends JpaRepository<Like,Long> {
//회원이 해당 아이템 아이디를 가진 상품에 누른 위시리스트를 취소할 경우
void deleteByMemberEmailAndItemId(String email,Long itemId);
//회원이 해당 아이템 아이디를 가진 상품에 위시리스트 버튼을 눌렀는지 확인하기 위해
Boolean existsByMemberEmailAndItemId(String email,Long itemId);
//특정 회원이 누른 위시리스트 상품들을 모두 조회
Page<Like> findAllByMemberEmail(PageRequest pageRequest,String email);
//회원 아이디와 상품 id로 위시리스트 객체를 찾는 경우
Like findByMemberEmailAndItemId(String email,Long itemId);
}
2. LikeService
@Service
@RequiredArgsConstructor
public class LikeService {
private final LikeRepository likeRepository;
private final MemberService memberService;
private final MemberRepository memberRepository;
private final ItemRepository itemRepository;
public boolean checkLike(String loginEmail, Long itemId) {
return likeRepository.existsByMemberEmailAndItemId(loginEmail,itemId);
}
//위시리스트 생성
@Transactional
public void createLike(String email, Long itemId){
Item item = itemRepository.findById(itemId).get();
Member loginMember = memberRepository.findByEmail(email).get();
Like like = Like.createLike(loginMember,item);
likeRepository.save(like);
}
//위시리스트 삭제
@Transactional
public void deleteLike(String email, Long itemId){
Item item = itemRepository.findById(itemId).get();
Member loginMember = memberRepository.findByEmail(email).get();
Like like = likeRepository.findByMemberEmailAndItemId(email, itemId);
if (loginMember != null) {
loginMember.getLikes().remove(like);
memberRepository.save(loginMember); // 변경사항 저장
}
likeRepository.delete(like);
}
}
3. LikeController
@Controller
@RequiredArgsConstructor
@RequestMapping("/likes")
public class LikeController {
private final LikeService likeService;
@GetMapping("/create/{itemId}")
public String addLike(@PathVariable Long itemId, Authentication auth){
likeService.createLike(auth.getName(), itemId);
return "redirect:/items/"+itemId+"/detail";
}
@GetMapping("/delete/{itemId}")
public String deleteLike(@PathVariable Long itemId, Authentication auth){
likeService.deleteLike(auth.getName(),itemId);
return "redirect:/items/"+itemId+"/detail";
}
}
위시리스트 조회 - MemberController
@GetMapping("/myPage/wishlist")
public String wishlistPage(Authentication auth, Model model,
@RequestParam(required = false,defaultValue = "1") int page){
PageRequest pageRequest = PageRequest.of(page - 1, 10, Sort.by("id").descending());
model.addAttribute("wishlists",itemService.findAllWishlist(auth,pageRequest));
return "members/myWishlist";
}
'web > Bakery Shop Project' 카테고리의 다른 글
쇼핑몰 구현 13 - 주문 기능 (0) | 2024.02.23 |
---|---|
쇼핑몰 구현 12 - 리뷰 , Q&A 기능 (0) | 2024.02.23 |
쇼핑몰 구현 10 - 장바구니 기능 (0) | 2024.02.23 |
쇼핑몰 구현 9 - 상품 기능 (0) | 2024.02.23 |
쇼핑몰 구현 8 - 회원 기능 (0) | 2024.02.23 |