
1. repository
LikeRepository
Like를 저장하기 위해 LikeRepository 를 만들었다.
특정 멤버가 누른 좋아요 리스트를 반환하기 위해 findByMember 함수를 만들었다.
특정 멤버가 특정 장소에 좋아요를 눌렀는지 확인하기 위해 existByMemberEmailAndPlace 함수를 만들었다.
특정 멤버가 특정 장소에 누른 좋아요를 제거하기 위해 deleteByMemberAndPlace 함수를 만들었다.
@Repository
public interface LikeRepository extends JpaRepository<Like,Long> {
void deleteByMemberAndPlace(Member loginMember, Place place);
Boolean existsByMemberEmailAndPlace(String loginMemberEmail, Place place);
@Query("select l from Like l " +
"join fetch l.member m "+
"join fetch l.place p "+
"where l.member=:member")
List<Like> findByMember(@Param("member") Member member);
}
2. service
LikeService
@Service
@RequiredArgsConstructor
public class LikeService {
private final LikeRepository likeRepository;
private final MemberRepository memberRepository;
private final PlaceRepository placeRepository;
// Like 생성
@Transactional
public void addLike(Member loginMember, Place place){
likeRepository.save(Like.builder()
.member(loginMember)
.place(place)
.build()
);
}
// Like 삭제
@Transactional
public void deleteLike(Member loginMember, Place place){
likeRepository.deleteByMemberAndPlace(loginMember,place);
}
// 특정 회원이 특정 장소에 좋아요 눌렀는지 확인하기 위해
public Boolean checkLike(String loginMemberEmail, Place place){
return likeRepository.existsByMemberEmailAndPlace(loginMemberEmail,place);
}
}
PlaceService
특정 회원이 찜한 장소를 반환하기 위해 getLikePlace 함수를 만들었다.
@Service
@RequiredArgsConstructor
public class PlaceService {
private final PlaceRepository placeRepository;
private final LikeService likeService;
private final LikeRepository likeRepository;
// 특정 회원이 찜한 장소 리스트 반환
public List<PlaceDto> getLikePlace(Member member) {
// 특정 회원이 누른 좋아요 리스트 반환
List<Like> likeList=likeRepository.findByMember(member);
List<PlaceDto> placeDtoList = new ArrayList<>();
for(Like like:likeList){
// 해당 likeList 에 해당되는 장소들 리스트로 반환
PlaceDto placeDto = PlaceDto.of(like.getPlace());
placeDto.setCheckLike(true);
placeDtoList.add(placeDto);
}
return placeDtoList;
}
}
3. Controller
MemberController
@Controller
@RequiredArgsConstructor
@RequestMapping("/members")
public class MemberController {
// 특정 장소에 좋아요 추가함으로써 찜한 장소에 추가됨
@PostMapping("/addLike")
public String addLike(@RequestParam("posX") String posX,
@RequestParam("posY") String posY, Model model) {
//System.out.println(posX+" "+posY);
SessionUser user = (SessionUser) httpSession.getAttribute("user");
Member member= memberRepository.findByEmail(user.getEmail()).get();
Place place = placeRepository.findByPosXAndPosY(posX, posY).get();
likeService.addLike(member, place);
return "reviews/reviewList";
}
// 찜한 장소에 like 취소하기 위해
@PostMapping("/delLike")
public String deleteLike(@RequestParam("posX") String posX,
@RequestParam("posY") String posY, Model model) {
//System.out.println(posX+" "+posY);
SessionUser user = (SessionUser) httpSession.getAttribute("user");
Member member= memberRepository.findByEmail(user.getEmail()).get();
Place place = placeRepository.findByPosXAndPosY(posX, posY).get();
likeService.deleteLike(member,place);
return "reviews/reviewList";
}
// 특정 회원이 찜한 장소 리스트 볼 수 있는 uri
@GetMapping("/likeList")
public String getLikeList(Model model){
SessionUser user = (SessionUser) httpSession.getAttribute("user");
List<PlaceDto> placeDtoList;
Member member = memberRepository.findByEmail(user.getEmail()).get();
placeDtoList = placeService.getLikePlace(member);
model.addAttribute("placeDtoList",placeDtoList);
return "reviews/likeList";
}
}
'web > 맛슐랭 Project' 카테고리의 다른 글
| 맛슐랭 - 모든 맛집 리스트 조회를 위한 구현 (0) | 2024.03.30 |
|---|---|
| 맛슐랭 - 리뷰 구현 결과 (0) | 2024.03.27 |
| 맛슐랭 - 맛집 리뷰 Controller 구현 (0) | 2024.03.27 |
| 맛슐랭 - 맛집 리뷰 service 구현 (CRUD) (0) | 2024.03.27 |
| 맛슐랭 - 맛집 리뷰 생성을 위한 Repository 구현 (0) | 2024.03.27 |