public TemplateAnswerResponse getReviewDetail(long reviewId, String reviewRequestCode, String groupAccessCode) {
        ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode)
                .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode));
        if (!reviewGroup.matchesGroupAccessCode(groupAccessCode)) {
            throw new ReviewGroupUnauthorizedException(reviewGroup.getId());
        }
        Review review = reviewRepository.findByIdAndReviewGroupId(reviewId, reviewGroup.getId())
                .orElseThrow(() -> new ReviewNotFoundByIdAndGroupException(reviewId, reviewGroup.getId()));

        long templateId = review.getTemplateId();

        List<Section> sections = sectionRepository.findAllByTemplateId(templateId);
        List<SectionAnswerResponse> sectionResponses = new ArrayList<>();

        for (Section section : sections) {
            addSectionResponse(review, reviewGroup, section, sectionResponses);
        }

        return new TemplateAnswerResponse(
                templateId,
                reviewGroup.getReviewee(),
                reviewGroup.getProjectName(),
                review.getCreatedDate(),
                sectionResponses
        );
    }
@Test
    void 잘못된_그룹_액세스_코드로_리뷰를_조회할_경우_예외를_발생한다() {
        // given
        String reviewRequestCode = "reviewRequestCode";
        String groupAccessCode = "groupAccessCode";
        ReviewGroup reviewGroup = reviewGroupRepository.save(
                new ReviewGroup("테드", "리뷰미 프로젝트", reviewRequestCode, groupAccessCode));

        Review review = reviewRepository.save(new Review(0, reviewGroup.getId(), List.of(), List.of()));

        // when, then
        assertThatThrownBy(() -> reviewDetailLookupService.getReviewDetail(
                review.getId(), reviewRequestCode, "wrong" + groupAccessCode
        )).isInstanceOf(ReviewGroupUnauthorizedException.class);
    }