Skip to content

Commit

Permalink
[BE] 방 CLOSE 상태 이후 피드백 개수 증가 로직 수정(#711) (#719)
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoding-play authored Nov 5, 2024
2 parents dacc648 + 6f43118 commit 6a7b8b8
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import corea.exception.ExceptionType;
import corea.feedback.dto.DevelopFeedbackUpdateInput;
import corea.feedback.repository.DevelopFeedbackRepository;
import corea.member.domain.Member;
import corea.room.domain.Room;
import corea.room.domain.RoomReader;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
Expand All @@ -16,11 +19,13 @@
public class DevelopFeedbackWriter {

private final DevelopFeedbackRepository developFeedbackRepository;
private final RoomReader roomReader;

public DevelopFeedback create(DevelopFeedback developFeedback, long roomId, long deliverId, long receiverId) {
validateAlreadyExist(roomId, deliverId, receiverId);
log.info("개발 피드백 작성 [방 ID={}, 작성자 ID={}, 수신자 ID={}]", roomId, deliverId, receiverId);

updateFeedbackPointIfRoomClosed(roomId, developFeedback);
return developFeedbackRepository.save(developFeedback);
}

Expand All @@ -30,6 +35,19 @@ private void validateAlreadyExist(long roomId, long deliverId, long receiverId)
}
}

private void updateFeedbackPointIfRoomClosed(long roomId, DevelopFeedback developFeedback) {
Room room = roomReader.find(roomId);

if (room.isClosed()) {
updateDevelopFeedbackPoint(developFeedback);
}
}

private void updateDevelopFeedbackPoint(DevelopFeedback developFeedback) {
Member receiver = developFeedback.getReceiver();
receiver.updateAverageRating(developFeedback.getEvaluatePoint());
}

public void update(DevelopFeedback developFeedback, long deliverId, DevelopFeedbackUpdateInput input) {
validateUpdateAuthority(developFeedback, deliverId);
log.info("개발 피드백 업데이트 [피드백 ID={}, 작성자 ID={}, 요청값={}]", developFeedback.getId(), deliverId, input);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import corea.exception.ExceptionType;
import corea.feedback.dto.SocialFeedbackUpdateInput;
import corea.feedback.repository.SocialFeedbackRepository;
import corea.member.domain.Member;
import corea.room.domain.Room;
import corea.room.domain.RoomReader;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
Expand All @@ -16,11 +19,13 @@
public class SocialFeedbackWriter {

private final SocialFeedbackRepository socialFeedbackRepository;
private final RoomReader roomReader;

public SocialFeedback create(SocialFeedback socialFeedback, long roomId, long deliverId, long receiverId) {
validateAlreadyExist(roomId, deliverId, receiverId);
log.info("소셜 피드백 작성 [방 ID={}, 작성자 ID={}, 수신자 ID={}]", roomId, deliverId, receiverId);

updateFeedbackPointIfRoomClosed(roomId, socialFeedback);
return socialFeedbackRepository.save(socialFeedback);
}

Expand All @@ -30,6 +35,19 @@ private void validateAlreadyExist(long roomId, long deliverId, long receiverId)
}
}

private void updateFeedbackPointIfRoomClosed(long roomId, SocialFeedback socialFeedback) {
Room room = roomReader.find(roomId);

if (room.isClosed()) {
updateSocialFeedbackPoint(socialFeedback);
}
}

private void updateSocialFeedbackPoint(SocialFeedback socialFeedback) {
Member receiver = socialFeedback.getReceiver();
receiver.updateAverageRating(socialFeedback.getEvaluatePoint());
}

public void update(SocialFeedback socialFeedback, long deliverId, SocialFeedbackUpdateInput input) {
validateUpdateAuthority(socialFeedback, deliverId);
log.info("소셜 피드백 업데이트 [피드백 ID={}, 작성자 ID={}, 요청값={}]", socialFeedback.getId(), deliverId, input);
Expand Down
2 changes: 2 additions & 0 deletions backend/src/main/java/corea/room/domain/RoomReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
import corea.room.repository.RoomRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

@Component
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class RoomReader {

private final RoomRepository roomRepository;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import corea.matchresult.domain.MatchResult;
import corea.matchresult.repository.MatchResultRepository;
import corea.member.domain.Member;
import corea.member.domain.Profile;
import corea.member.repository.MemberRepository;
import corea.room.domain.Room;
import corea.room.repository.RoomRepository;
Expand Down Expand Up @@ -59,6 +60,46 @@ void create() {
assertThat(matchResult.isReviewerCompletedFeedback()).isTrue();
}

@Transactional
@Test
@DisplayName("방이 close 상태가 아닐 때 피드백을 작성하면, 피드백 받은 개수가 증가하지 않는다")
void notUpdateFeedbackPoint() {
Member manager = memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN(manager));
Member deliver = memberRepository.save(MemberFixture.MEMBER_PORORO());
Member receiver = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(
room.getId(),
deliver,
receiver
));

developFeedbackService.create(room.getId(), deliver.getId(), createRequest(receiver.getId()));

Profile profile = receiver.getProfile();
assertThat(profile.getFeedbackCount()).isEqualTo(0);
}

@Transactional
@Test
@DisplayName("방이 close 상태일 때 피드백을 작성하면, 피드백 받은 개수가 바로 증가한다.")
void updateFeedbackPoint() {
Member manager = memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN_WITH_CLOSED(manager));
Member deliver = memberRepository.save(MemberFixture.MEMBER_PORORO());
Member receiver = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(
room.getId(),
deliver,
receiver
));

developFeedbackService.create(room.getId(), deliver.getId(), createRequest(receiver.getId()));

Profile profile = receiver.getProfile();
assertThat(profile.getFeedbackCount()).isEqualTo(1);
}

@Test
@DisplayName("개발(리뷰어 -> 리뷰이) 에 대한 매칭 결과가 없으면 예외를 발생한다.")
void throw_exception_when_not_exist_match_result() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import corea.matchresult.domain.MatchResult;
import corea.matchresult.repository.MatchResultRepository;
import corea.member.domain.Member;
import corea.member.domain.Profile;
import corea.member.repository.MemberRepository;
import corea.room.domain.Room;
import corea.room.repository.RoomRepository;
Expand Down Expand Up @@ -61,6 +62,46 @@ void create() {
assertThat(matchResult.isRevieweeCompletedFeedback()).isTrue();
}

@Transactional
@Test
@DisplayName("방이 close 상태가 아닐 때 피드백을 작성하면, 피드백 받은 개수가 증가하지 않는다")
void notUpdateFeedbackPoint() {
Member manager = memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN(manager));
Member reviewer = memberRepository.save(MemberFixture.MEMBER_PORORO());
Member reviewee = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(
room.getId(),
reviewer,
reviewee
));

socialFeedbackService.create(room.getId(), reviewee.getId(), createRequest(reviewer.getId()));

Profile profile = reviewer.getProfile();
assertThat(profile.getFeedbackCount()).isEqualTo(0);
}

@Transactional
@Test
@DisplayName("방이 close 상태일 때 피드백을 작성하면, 피드백 받은 개수가 바로 증가한다.")
void updateFeedbackPoint() {
Member manager = memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN_WITH_CLOSED(manager));
Member reviewer = memberRepository.save(MemberFixture.MEMBER_PORORO());
Member reviewee = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(
room.getId(),
reviewer,
reviewee
));

socialFeedbackService.create(room.getId(), reviewee.getId(), createRequest(reviewer.getId()));

Profile profile = reviewer.getProfile();
assertThat(profile.getFeedbackCount()).isEqualTo(1);
}

@Test
@DisplayName("소셜(리뷰이->리뷰어)에 대한 매칭 결과가 없으면 예외를 발생한다.")
void throw_exception_when_not_exist_match_result() {
Expand Down

0 comments on commit 6a7b8b8

Please sign in to comment.