Skip to content

Commit

Permalink
[feat] 여행 후기 리뷰(TripRecordReview) 본문 및 이미지 등록시 회원 포인트 증가 로직 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
meena2003 committed Jan 18, 2024
1 parent dfa4ca8 commit b3bedee
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.haejwo.tripcometrue.domain.review.placereview.entity;
package com.haejwo.tripcometrue.domain.review.global;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
import java.util.List;
import java.util.Objects;

import static com.haejwo.tripcometrue.domain.review.global.PointType.CONTENT_WITH_IMAGE_POINT;
import static com.haejwo.tripcometrue.domain.review.global.PointType.ONLY_CONTENT_POINT;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
Expand Down Expand Up @@ -72,6 +75,8 @@ private TripRecord getTripRecordById(Long tripRecordId) {
}

// FIXME: 1/18/24 ratingScore @NotNull과 상충되는 부분 수정하기
// TODO: 사진만 처음 저장하는 경우 포인트 +1 추가 로직
// TODO: 본문이 등록되어 있지 않은 경우 수정 불가능 처리
@Transactional
public void modifyTripRecordReview(
PrincipalDetails principalDetails,
Expand All @@ -87,7 +92,7 @@ public void modifyTripRecordReview(
tripRecordReview.update(requestDto);
}

private static void validateRightMemberAccess(Member member, TripRecordReview tripRecordReview) {
private void validateRightMemberAccess(Member member, TripRecordReview tripRecordReview) {
if (!Objects.equals(tripRecordReview.getMember().getId(), member.getId())) {
throw new UserInvalidAccessException();
}
Expand All @@ -98,23 +103,6 @@ private TripRecordReview getTripRecordReviewById(Long tripRecordReviewId) {
.orElseThrow(TripRecordReviewNotFoundException::new);
}

public TripRecordReviewListResponseDto getMyTripRecordReviewList(
PrincipalDetails principalDetails,
Pageable pageable
) {

Page<TripRecordReview> reviews = tripRecordReviewRepository
.findByMember(getMember(principalDetails), pageable);

List<TripRecordReviewResponseDto> responseDtos = reviews.stream()
.map(tripRecordReview -> TripRecordReviewResponseDto.fromEntity(
tripRecordReview,
hasLikedTripRecordReview(principalDetails, tripRecordReview))
).toList();

return TripRecordReviewListResponseDto.fromResponseDtos(reviews.getTotalElements(), responseDtos);
}

private boolean hasLikedTripRecordReview(PrincipalDetails principalDetails, TripRecordReview tripRecordReview) {
List<Long> memberIds = tripRecordReview.getTripRecordReviewLikeses().stream()
.map(TripRecordReviewLikes::getMember)
Expand All @@ -127,7 +115,8 @@ private boolean hasLikedTripRecordReview(PrincipalDetails principalDetails, Trip
public TripRecordReviewResponseDto registerContent(
PrincipalDetails principalDetails,
Long tripRecordReviewId,
RegisterTripRecordReviewRequestDto requestDto) {
RegisterTripRecordReviewRequestDto requestDto
) {

Member loginMember = getMember(principalDetails);
TripRecordReview tripRecordReview = getTripRecordReviewById(tripRecordReviewId);
Expand All @@ -136,6 +125,8 @@ public TripRecordReviewResponseDto registerContent(
isReviewAlreadyRegister(tripRecordReview);

tripRecordReview.registerContent(requestDto);
calculateAndSavePoints(tripRecordReview, loginMember);

return TripRecordReviewResponseDto.fromEntity(tripRecordReview, false);
}

Expand All @@ -144,4 +135,30 @@ private void isReviewAlreadyRegister(TripRecordReview tripRecordReview) {
throw new DuplicateTripRecordReviewException();
}
}

private void calculateAndSavePoints(TripRecordReview tripRecordReview, Member member) {
int point = isImageIncluded(tripRecordReview) ? CONTENT_WITH_IMAGE_POINT.getPoint() : ONLY_CONTENT_POINT.getPoint();
member.earnPoint(point);
}

private boolean isImageIncluded(TripRecordReview tripRecordReview) {
return tripRecordReview.getImageUrl() != null;
}

public TripRecordReviewListResponseDto getMyTripRecordReviewList(
PrincipalDetails principalDetails,
Pageable pageable
) {

Page<TripRecordReview> reviews = tripRecordReviewRepository
.findByMember(getMember(principalDetails), pageable);

List<TripRecordReviewResponseDto> responseDtos = reviews.stream()
.map(tripRecordReview -> TripRecordReviewResponseDto.fromEntity(
tripRecordReview,
hasLikedTripRecordReview(principalDetails, tripRecordReview))
).toList();

return TripRecordReviewListResponseDto.fromResponseDtos(reviews.getTotalElements(), responseDtos);
}
}

0 comments on commit b3bedee

Please sign in to comment.