Skip to content

Commit

Permalink
[BE] 방 종료 시, 코드 리뷰 완료 버튼 동작 안하도록 하는 기능 구현(#579) (#580)
Browse files Browse the repository at this point in the history
* feat: 방 종료 후 코드 리뷰 완료 버튼 검증 로직 구현

* fix: 잘못된 요청값 수정 (#566)

Co-authored-by: youngsu5582 <[email protected]>

* refactor: 리뷰 완료 요청 검증 로직 변경

---------

Co-authored-by: gyungchan Jo <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: youngsu5582 <[email protected]>
  • Loading branch information
3 people committed Oct 12, 2024
1 parent 686f0d2 commit 9dd7f32
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ public boolean isReviewer() {
return memberRole.isReviewer();
}

public boolean isNotReviewer() {
return !isReviewer();
}

public boolean isPullRequestNotSubmitted() {
return status.isPullRequestNotSubmitted();
}

public long getRoomsId() {
return room.getId();
}
Expand All @@ -82,18 +90,6 @@ public String getMemberGithubId() {
return member.getGithubUserId();
}

public boolean isReviewer() {
return memberRole.isReviewer();
}

public boolean isNotReviewer() {
return !isReviewer();
}

public boolean isPullRequestNotSubmitted() {
return status.isPullRequestNotSubmitted();
}

private static void debug(long roomId, long memberId) {
log.debug("참가자 생성[방 ID={}, 멤버 ID={}", roomId, memberId);
}
Expand Down
21 changes: 19 additions & 2 deletions backend/src/main/java/corea/review/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import corea.matchresult.repository.MatchResultRepository;
import corea.member.domain.Member;
import corea.member.repository.MemberRepository;
import corea.room.domain.Room;
import corea.room.repository.RoomRepository;
import lombok.RequiredArgsConstructor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -23,19 +25,34 @@ public class ReviewService {

private static final Logger log = LogManager.getLogger(ReviewService.class);

private final MatchResultRepository matchResultRepository;
private final MemberRepository memberRepository;
private final GithubOAuthProvider githubOAuthProvider;
private final RoomRepository roomRepository;
private final MemberRepository memberRepository;
private final MatchResultRepository matchResultRepository;

@Transactional
public void completeReview(long roomId, long reviewerId, long revieweeId) {
Room room = getRoom(roomId);
validateRoomStatus(room);

MatchResult matchResult = getMatchResult(roomId, reviewerId, revieweeId);
matchResult.reviewComplete();
updateReviewLink(matchResult, reviewerId);

log.info("리뷰 완료[{매칭 ID({}), 리뷰어 ID({}, 리뷰이 ID({})", matchResult.getId(), reviewerId, revieweeId);
}

private Room getRoom(long roomId) {
return roomRepository.findById(roomId)
.orElseThrow(() -> new CoreaException(ExceptionType.ROOM_NOT_FOUND, String.format("해당 Id의 방이 없습니다. 입력된 Id=%d", roomId)));
}

private void validateRoomStatus(Room room) {
if (room.isNotProgress()) {
throw new CoreaException(ExceptionType.ROOM_STATUS_INVALID);
}
}

private void updateReviewLink(MatchResult matchResult, long reviewerId) {
Member reviewer = memberRepository.findById(reviewerId)
.orElseThrow(() -> new CoreaException(ExceptionType.MEMBER_NOT_FOUND));
Expand Down
4 changes: 4 additions & 0 deletions backend/src/main/java/corea/room/domain/Room.java
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ public boolean isNotClosed() {
return !isClosed();
}

public boolean isNotProgress() {
return status.isNotProgress();
}

public boolean isNotMatchingManager(long memberId) {
return manager.isNotMatchingId(memberId);
}
Expand Down
4 changes: 4 additions & 0 deletions backend/src/main/java/corea/room/domain/RoomStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ public boolean isNotOpened() {
return this != OPEN;
}

public boolean isNotProgress() {
return this != PROGRESS;
}

public String getStatus() {
return this.name();
}
Expand Down
18 changes: 16 additions & 2 deletions backend/src/test/java/corea/review/service/ReviewServiceTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class ReviewServiceTest {
void completeReview() {
Member reviewer = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
Member reviewee = memberRepository.save(MemberFixture.MEMBER_PORORO());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN(memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON())));
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN_WITH_PROGRESS(memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON())));
MatchResult matchResult = matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(room.getId(), reviewer, reviewee));

when(githubOAuthProvider.getPullRequestReview(anyString()))
Expand All @@ -77,7 +77,7 @@ void completeReview() {
void notCompleteReview() {
Member reviewer = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
Member reviewee = memberRepository.save(MemberFixture.MEMBER_PORORO());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN(memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON())));
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN_WITH_PROGRESS(memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON())));
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(room.getId(), reviewer, reviewee));

when(githubOAuthProvider.getPullRequestReview(anyString())).thenReturn(new GithubPullRequestReview[]{});
Expand All @@ -88,6 +88,20 @@ void notCompleteReview() {
.isEqualTo(ExceptionType.NOT_COMPLETE_GITHUB_REVIEW);
}

@Test
@DisplayName("방이 종료되고 코드 리뷰 완료 버튼을 누르면 예외가 발생한다.")
void completeReviewAfterRoomClosed() {
Member reviewer = memberRepository.save(MemberFixture.MEMBER_YOUNGSU());
Member reviewee = memberRepository.save(MemberFixture.MEMBER_PORORO());
Room room = roomRepository.save(RoomFixture.ROOM_DOMAIN_WITH_CLOSED(memberRepository.save(MemberFixture.MEMBER_ROOM_MANAGER_JOYSON())));
matchResultRepository.save(MatchResultFixture.MATCH_RESULT_DOMAIN(room.getId(), reviewer, reviewee));

assertThatThrownBy(() -> reviewService.completeReview(room.getId(), reviewer.getId(), reviewee.getId()))
.asInstanceOf(InstanceOfAssertFactories.type(CoreaException.class))
.extracting(CoreaException::getExceptionType)
.isEqualTo(ExceptionType.ROOM_STATUS_INVALID);
}

@Test
@DisplayName("방과 멤버들에 해당하는 매칭결과가 없으면 예외를 발생한다.")
void completeReview_throw_exception_when_not_exist_room_and_members() {
Expand Down

0 comments on commit 9dd7f32

Please sign in to comment.