
1. repository
ReviewRepository
이전에 구현했던 ReviewRepository 에 findByPlace 함수를 추가함으로써 해당 장소에 대한 모든 리뷰를 반환받을 수 있다.
@Repository
public interface ReviewRepository extends JpaRepository<Review,Long> {
List<Review> findByPlace(Place place);
}
2. service
ReviewService
이전에 구현했던 ReviewService 에 getReviewByPlace 함수를 추가함으로써 장소에 의해 리뷰를 찾을 수 있는 로직을 구현하였다.
//특정 장소에 작성된 리뷰 리스트 반환
@Service
@RequiredArgsConstructor
public class ReviewService {
private final ReviewRepository reviewRepository;
private final UploadImageService uploadImageService;
private final PlaceService placeService;
private final PlaceRepository placeRepository;
public List<ReviewDto> getReviewByPlace(String posX, String posY) {
// 장소 찾은 후
Place place = placeRepository.findByPosXAndPosY(posX,posY).get();
// 해당 장소에 해당하는 리뷰들 조회
List<Review> reviewByPlace = reviewRepository.findByPlace(place);
List<ReviewDto> reviewDtos =new ArrayList<>();
for(Review review:reviewByPlace){
// 리뷰에 저장된 이미지들의 파일 경로 리스트에 모두 저장 후
List<String> filePathList = getFilePathList(review.getUploadImages());
// dto로 반환
ReviewDto reviewDto = ReviewDto.of(review, filePathList);
reviewDtos.add(reviewDto);
}
return reviewDtos;
}
}
PlaceService
이전에 구현했던 PlaceService에 getAllPlace 함수를 추가하였다. member을 파라미터로 받는 경우 해당 멤버가 특정 장소에 좋아요를 눌렀는지 확인 후 좋아요를 누른 장소이면 checkLike를 true로 변경함으로서 좋아요를 누름을 표시했다.
member을 파라미터로 받지 않으면 좋아요를 눌렀는지 확인하지 않고 모든 장소를 반환한다.
@Service
@RequiredArgsConstructor
public class PlaceService {
// 특정 회원이 좋아요를 누른 장소의 마커 색깔을 다르게 하기 위해
public List<PlaceDto> getAllPlace(Member member){
List<Place> places = placeRepository.findAll();
//System.out.println(places.size());
List<PlaceDto> placeDtoList = new ArrayList<>();
for(Place place:places){
PlaceDto placeDto = PlaceDto.of(place);
if(likeService.checkLike(member.getEmail(), place)){
placeDto.setCheckLike(true);
}
placeDtoList.add(placeDto);
}
return placeDtoList;
}
// 리뷰가 작성된 모든 장소 반환
public List<PlaceDto> getAllPlace(){
List<Place> places = placeRepository.findAll();
List<PlaceDto> placeDtoList = new ArrayList<>();
for(Place place:places){
PlaceDto placeDto = PlaceDto.of(place);
placeDtoList.add(placeDto);
}
return placeDtoList;
}
}
3. controller
HomeController
메인 페이지에 모든 맛집 리스트를 볼 수 있는 지도를 띄우기 위해 모든 맛집 리스트를 받아온다.
로그인을 한 상태이면 getAllPlace함수에 member을 파라미터로 넘긴다.
@Controller
@RequiredArgsConstructor
public class HomeController {
private final HttpSession httpSession;
private final MemberRepository memberRepository;
private final PlaceService placeService;
@GetMapping(value={"","/"})
public String getAllReviews(Model model){
SessionUser user = (SessionUser) httpSession.getAttribute("user");
List<PlaceDto> placeDtoList;
if(user!=null){
Member member = memberRepository.findByEmail(user.getEmail()).get();
placeDtoList = placeService.getAllPlace(member);
}else{
placeDtoList = placeService.getAllPlace();
}
model.addAttribute("placeDtoList",placeDtoList);
return "reviews/reviewList";
}
}
ReviewController
전체 맛집이 표시된 지도에서 특정 마커 클릭시 마커가 가리키는 장소에 작성된 모든 리뷰 리스트 반환하는 uri
@Controller
@RequiredArgsConstructor
@RequestMapping("/reviews")
public class ReviewController {
@GetMapping("/byPlace")
public ResponseEntity<List<ReviewDto>> getReviewByPlace(@RequestParam("posX") String posX,
@RequestParam("posY") String posY){
List<ReviewDto> reviewDtos = reviewService.getReviewByPlace(posX, posY);
return ResponseEntity.ok(reviewDtos);
}
}
'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 |