diff --git a/backend/src/main/java/reviewme/review/domain/Review.java b/backend/src/main/java/reviewme/review/domain/Review.java index c841eba4e..4573f0e41 100644 --- a/backend/src/main/java/reviewme/review/domain/Review.java +++ b/backend/src/main/java/reviewme/review/domain/Review.java @@ -1,5 +1,6 @@ package reviewme.review.domain; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -7,6 +8,7 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; +import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -31,8 +33,12 @@ public class Review { @JoinColumn(name = "reviewer_group_id", nullable = false) private ReviewerGroup reviewerGroup; - public Review(Member reviewer, ReviewerGroup reviewerGroup) { + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; + + public Review(Member reviewer, ReviewerGroup reviewerGroup, LocalDateTime createdAt) { this.reviewer = reviewer; this.reviewerGroup = reviewerGroup; + this.createdAt = createdAt; } } diff --git a/backend/src/main/java/reviewme/review/dto/response/ReviewResponse.java b/backend/src/main/java/reviewme/review/dto/response/ReviewResponse.java index 525e6dfd7..8b9006072 100644 --- a/backend/src/main/java/reviewme/review/dto/response/ReviewResponse.java +++ b/backend/src/main/java/reviewme/review/dto/response/ReviewResponse.java @@ -1,9 +1,9 @@ package reviewme.review.dto.response; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; import java.util.List; import reviewme.keyword.dto.response.KeywordResponse; -import reviewme.member.dto.response.MemberResponse; import reviewme.member.dto.response.ReviewerGroupResponse; @Schema(description = "리뷰 응답") @@ -12,10 +12,8 @@ public record ReviewResponse( @Schema(description = "리뷰 ID") long id, -// LocalDateTime createdAt, - - @Schema(description = "리뷰어") - MemberResponse reviewer, + @Schema(description = "리뷰 생성 시각") + LocalDateTime createdAt, @Schema(description = "리뷰어 그룹") ReviewerGroupResponse reviewerGroup, diff --git a/backend/src/main/java/reviewme/review/service/ReviewService.java b/backend/src/main/java/reviewme/review/service/ReviewService.java index ca4685d5c..58ed24007 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewService.java +++ b/backend/src/main/java/reviewme/review/service/ReviewService.java @@ -56,8 +56,8 @@ public Long createReview(CreateReviewRequest request) { throw new ReviewAlreadySubmittedException(); } validateIsDeadlinePassed(reviewerGroup); - - Review review = reviewRepository.save(new Review(reviewer, reviewerGroup)); + + Review review = reviewRepository.save(new Review(reviewer, reviewerGroup, LocalDateTime.now())); List contents = request.contents() .stream() @@ -83,13 +83,9 @@ private void validateIsDeadlinePassed(ReviewerGroup reviewerGroup) { public ReviewResponse findReview(long id) { Review review = reviewRepository.getReviewById(id); - - // todo: 모든 리뷰는 기본적으로 익명이므로, 이것을 리턴하면 안된다! ReviewReponse에서 MemberResponse 자체를 없애야 한다. - Member member = memberRepository.getMemberById(review.getReviewer().getId()); - MemberResponse memberResponse = new MemberResponse(member.getId(), member.getName()); - - ReviewerGroup reviewerGroup = reviewerGroupRepository.getReviewerGroupById(review.getReviewerGroup().getId()); + ReviewerGroup reviewerGroup = review.getReviewerGroup(); Member reviewee = reviewerGroup.getReviewee(); + ReviewerGroupResponse reviewerGroupResponse = new ReviewerGroupResponse( reviewerGroup.getId(), reviewerGroup.getGroupName(), @@ -117,7 +113,7 @@ public ReviewResponse findReview(long id) { return new ReviewResponse( review.getId(), - memberResponse, + review.getCreatedAt(), reviewerGroupResponse, reviewContentResponse, keywordResponses diff --git a/backend/src/test/java/reviewme/review/repository/ReviewKeywordRepositoryTest.java b/backend/src/test/java/reviewme/review/repository/ReviewKeywordRepositoryTest.java index 6707814b2..bd00c21ae 100644 --- a/backend/src/test/java/reviewme/review/repository/ReviewKeywordRepositoryTest.java +++ b/backend/src/test/java/reviewme/review/repository/ReviewKeywordRepositoryTest.java @@ -6,6 +6,7 @@ import static reviewme.fixture.KeywordFixture.회의를_이끌어요; import static reviewme.fixture.ReviewerGroupFixture.리뷰_그룹; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -44,7 +45,7 @@ class ReviewKeywordRepositoryTest { Member sancho = memberRepository.save(new Member("산초", "sancho")); Member kirby = memberRepository.save(new Member("커비", "kirby")); ReviewerGroup group = reviewerGroupRepository.save(리뷰_그룹.create(sancho)); - Review review = reviewRepository.save(new Review(kirby, group)); + Review review = reviewRepository.save(new Review(kirby, group, LocalDateTime.now())); List reviewKeywords = Stream.of(꼼꼼하게_기록해요, 회의를_이끌어요, 의견을_잘_조율해요) .map(KeywordFixture::create) .map(keywordRepository::save) diff --git a/backend/src/test/java/reviewme/review/service/ReviewKeywordServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewKeywordServiceTest.java index 52de278cb..298809d78 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewKeywordServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewKeywordServiceTest.java @@ -6,6 +6,7 @@ import static reviewme.fixture.KeywordFixture.회의를_이끌어요; import static reviewme.fixture.ReviewerGroupFixture.리뷰_그룹; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -50,7 +51,7 @@ class ReviewKeywordServiceTest { Member sancho = memberRepository.save(new Member("산초", "sancho")); Member kirby = memberRepository.save(new Member("커비", "kirby")); ReviewerGroup group = reviewerGroupRepository.save(리뷰_그룹.create(sancho)); - Review review = reviewRepository.save(new Review(kirby, group)); + Review review = reviewRepository.save(new Review(kirby, group, LocalDateTime.now())); List keywords = Stream.of(꼼꼼하게_기록해요, 회의를_이끌어요, 의견을_잘_조율해요) .map(KeywordFixture::create) @@ -72,7 +73,7 @@ class ReviewKeywordServiceTest { Member sancho = memberRepository.save(new Member("산초", "sancho")); Member kirby = memberRepository.save(new Member("커비", "kirby")); ReviewerGroup group = reviewerGroupRepository.save(리뷰_그룹.create(sancho)); - Review review = reviewRepository.save(new Review(kirby, group)); + Review review = reviewRepository.save(new Review(kirby, group, LocalDateTime.now())); List keywords = Stream.of(꼼꼼하게_기록해요, 회의를_이끌어요, 의견을_잘_조율해요) .map(KeywordFixture::create) diff --git a/backend/src/test/java/reviewme/review/ReviewServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java similarity index 93% rename from backend/src/test/java/reviewme/review/ReviewServiceTest.java rename to backend/src/test/java/reviewme/review/service/ReviewServiceTest.java index 879737c26..97076c234 100644 --- a/backend/src/test/java/reviewme/review/ReviewServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java @@ -1,4 +1,4 @@ -package reviewme.review; +package reviewme.review.service; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -27,7 +27,6 @@ import reviewme.review.exception.ReviewAlreadySubmittedException; import reviewme.review.repository.ReviewContentRepository; import reviewme.review.repository.ReviewRepository; -import reviewme.review.service.ReviewService; import reviewme.support.ServiceTest; @ServiceTest @@ -94,7 +93,7 @@ class ReviewServiceTest { Member reviewee = memberRepository.save(new Member("아루", "aru")); memberRepository.save(new Member("산초", "sancho")); ReviewerGroup reviewerGroup = reviewerGroupRepository.save(리뷰_그룹.create(reviewee)); - Review review = reviewRepository.save(new Review(reviewer, reviewerGroup)); + Review review = reviewRepository.save(new Review(reviewer, reviewerGroup, LocalDateTime.now())); // when ReviewResponse response = reviewService.findReview(review.getId()); @@ -139,28 +138,25 @@ class ReviewServiceTest { List.of() ); - reviewRepository.save(new Review(reviewer, reviewerGroup)); + reviewRepository.save(new Review(reviewer, reviewerGroup, LocalDateTime.now())); // when, then assertThatThrownBy(() -> reviewService.createReview(createReviewRequest)) .isInstanceOf(ReviewAlreadySubmittedException.class); } - + + @Test void 데드라인이_지난_리뷰그룹에_대해_리뷰를_작성하려하면_예외가_발생한다() { // given memberRepository.save(new Member("산초", "sancho")); Member reviewee = memberRepository.save(new Member("아루", "aru")); LocalDateTime createdAt = LocalDateTime.now().minusDays(7).minusMinutes(1); - reviewerGroupRepository.save( + ReviewerGroup reviewerGroup = reviewerGroupRepository.save( new ReviewerGroup(reviewee, "그룹A", "그룹 설명", createdAt) ); - Keyword keyword = keywordRepository.save(new Keyword("꼼꼼해요")); - - CreateReviewContentRequest contentRequest = new CreateReviewContentRequest( - 1L, "소프트스킬이 어떤가요?", "소통을 잘해요" - ); + githubReviewerGroupRepository.save(new GithubReviewerGroup("sancho", reviewerGroup)); CreateReviewRequest createReviewRequest = new CreateReviewRequest( - 1L, 1L, List.of(contentRequest), List.of(keyword.getId()) + 1L, 1L, List.of(), List.of() ); // when, then