Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;
import site.campingon.campingon.bookmark.service.BookmarkService;
import site.campingon.campingon.common.jwt.CustomUserDetails;
import site.campingon.campingon.user.entity.User;

@Slf4j
@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import site.campingon.campingon.bookmark.entity.Bookmark;
import site.campingon.campingon.bookmark.repository.BookmarkRepository;
import site.campingon.campingon.camp.entity.Camp;
import site.campingon.campingon.camp.entity.CampInfo;
import site.campingon.campingon.camp.repository.CampInfoRepository;
import site.campingon.campingon.camp.repository.CampRepository;
import site.campingon.campingon.common.exception.ErrorCode;
import site.campingon.campingon.common.exception.GlobalException;
Expand All @@ -21,16 +23,20 @@ public class BookmarkService {
private final BookmarkRepository bookmarkRepository;
private final CampRepository campRepository;
private final UserRepository userRepository;
private final CampInfoRepository campInfoRepository;

// 찜 기능 (토글활용)
public void bookmarkCamp(Long campId, Long userId) {
// 이미 찜 관계가 있는지 확인
Optional<Bookmark> existingBookmark = bookmarkRepository.findByCampIdAndUserId(campId, userId);
CampInfo campInfo = campInfoRepository.findByCampId(campId)
.orElseThrow(() -> new GlobalException(ErrorCode.CAMP_NOT_FOUND_BY_ID));

// 이미 찜 등록이 된경우
if (existingBookmark.isPresent()) {
// isMarked 상태를 반대로 토글 - true->false, false->true로 전환
bookmarkRepository.delete(existingBookmark.get());
campInfo.updateBookmarkCntDown();
return; // 변경 후 반환
}

Expand All @@ -47,6 +53,7 @@ public void bookmarkCamp(Long campId, Long userId) {
.build(); // isMarked는 기본값 true

bookmarkRepository.save(bookmark);
campInfo.updateBookmarkCntUp();
}

}
12 changes: 12 additions & 0 deletions src/main/java/site/campingon/campingon/camp/entity/CampInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,16 @@ public class CampInfo {
@Builder.Default
@Column(name = "bookmark_cnt")
private Integer bookmarkCnt = 0;

public void updateBookmarkCntUp() {
bookmarkCnt++;
}

public void updateBookmarkCntDown() {
bookmarkCnt--;
}

public void updateRecommendCntUp() {
recommendCnt++;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ default CampInfoDto toCampInfoDto(CampInfo campInfo) {
return CampInfoDto.builder()
.recommendCnt(campInfo.getRecommendCnt())
.bookmarkCnt(campInfo.getBookmarkCnt())
.campInfoId(campInfo.getId())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import org.springframework.stereotype.Repository;
import site.campingon.campingon.camp.entity.CampInfo;

import java.util.Optional;

@Repository
public interface CampInfoRepository extends JpaRepository<CampInfo, Long> {
boolean findByCampId(Long id);
Optional<CampInfo> findByCampId(Long id);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,20 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import site.campingon.campingon.camp.entity.Camp;
import site.campingon.campingon.camp.entity.CampSite;
import site.campingon.campingon.camp.entity.CampInfo;
import site.campingon.campingon.camp.repository.CampInfoRepository;
import site.campingon.campingon.camp.repository.CampRepository;
import site.campingon.campingon.camp.repository.CampSiteRepository;
import site.campingon.campingon.common.exception.GlobalException;
import site.campingon.campingon.common.s3bucket.service.S3BucketService;
import site.campingon.campingon.reservation.entity.Reservation;
import site.campingon.campingon.reservation.entity.ReservationStatus;
import site.campingon.campingon.reservation.repository.ReservationRepository;
import site.campingon.campingon.review.dto.ReviewCreateRequestDto;
import site.campingon.campingon.review.dto.ReviewResponseDto;
import site.campingon.campingon.review.dto.ReviewUpdateRequestDto;
import site.campingon.campingon.review.entity.Review;
import site.campingon.campingon.review.entity.ReviewImage;
import site.campingon.campingon.review.mapper.ReviewImageMapper;
Expand All @@ -30,7 +28,6 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

import static site.campingon.campingon.common.exception.ErrorCode.*;
import static site.campingon.campingon.common.exception.ErrorCode.REVIEW_ALREADY_SUBMITTED;
Expand All @@ -48,6 +45,7 @@ public class ReviewService {
private final ReviewMapper reviewMapper;
private final ReviewImageMapper reviewImageMapper;
private final S3BucketService s3BucketService;
private final CampInfoRepository campInfoRepository;

private static final long MAX_FILE_SIZE = 10 * 1024 * 1024;
private static final int MAX_FILES_COUNT = 5; // 최대 파일 개수 제한
Expand Down Expand Up @@ -87,6 +85,13 @@ public ReviewResponseDto createReview(
reviewImageRepository.saveAll(reviewImages);
}

//추천한다면 CampInfo 업데이트
CampInfo campInfo = campInfoRepository.findByCampId(campId)
.orElseThrow(() -> new GlobalException(CAMP_NOT_FOUND_BY_ID));
if (requestDto.isRecommended()) {
campInfo.updateRecommendCntUp();
}

// 저장된 Review 엔티티를 ReviewResponseDto로 반환
return reviewMapper.toResponseDto(savedReview);
}
Expand Down
Loading