본문 바로가기
web/Bakery Shop Project

쇼핑몰 구현 11 - 위시리스트 기능

by su0a 2024. 2. 23.

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";
}