Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/be/feature/100-info-for-writing-…
Browse files Browse the repository at this point in the history
…review' into be/feature/100-info-for-writing-review

# Conflicts:
#	backend/src/main/java/reviewme/member/domain/ReviewerGroupGithubIds.java
  • Loading branch information
skylar1220 committed Jul 25, 2024
2 parents b201d3a + ae673b6 commit 07fa6a3
Show file tree
Hide file tree
Showing 34 changed files with 547 additions and 211 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "github_id_reviewer_group")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EqualsAndHashCode(of = "id")
@Getter
Expand All @@ -25,6 +28,7 @@ public class GithubIdReviewerGroup {
private GithubId githubId;

@ManyToOne
@JoinColumn(name = "reviewer_group_id", nullable = false)
private ReviewerGroup reviewerGroup;

public GithubIdReviewerGroup(GithubId githubId, ReviewerGroup reviewerGroup) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ReviewerGroupGithubIds {

@OneToMany(mappedBy = "reviewerGroup", cascade = CascadeType.ALL)
@OneToMany(mappedBy = "reviewerGroup", cascade = CascadeType.PERSIST)
private Set<GithubIdReviewerGroup> reviewerGithubIds;

public ReviewerGroupGithubIds(ReviewerGroup reviewerGroup, List<GithubId> githubIds) {
Expand Down
11 changes: 11 additions & 0 deletions backend/src/main/java/reviewme/review/domain/Review.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
Expand Down Expand Up @@ -42,6 +44,9 @@ public class Review {
@JoinColumn(name = "reviewer_group_id", nullable = false)
private ReviewerGroup reviewerGroup;

@OneToMany(mappedBy = "review")
private List<ReviewContent> reviewContents;

@Embedded
private Keywords keywords;

Expand All @@ -58,9 +63,11 @@ public Review(Member reviewer, Member reviewee, ReviewerGroup reviewerGroup,
}
this.reviewer = reviewer;
this.reviewee = reviewee;
this.reviewContents = new ArrayList<>();
this.keywords = new Keywords(keywords);
this.createdAt = createdAt;
reviewerGroup.addReview(this);
this.reviewerGroup = reviewerGroup;
this.isPublic = false;
}

Expand All @@ -71,4 +78,8 @@ public boolean isSubmittedBy(Member member) {
public boolean isForReviewee(Member member) {
return reviewee.equals(member);
}

public void addReviewContents(ReviewContent reviewContent) {
reviewContents.add(reviewContent);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public ReviewContent(Review review, Question question, String answer) {
this.review = review;
this.question = question;
this.answer = answer;
review.addReviewContents(this);
}

private void validateAnswerLength(String answer) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,16 @@

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

@Schema(description = "리뷰 내용 등록 요청")
public record CreateReviewContentRequest(
@NotNull(message = "리뷰 항목 순서를 입력해주세요.")
@Schema(description = "리뷰 항목 순서")
Long order,

@NotBlank(message = "질문을 입력해주세요.")
@Schema(description = "리뷰 문항")
String question,
@NotBlank(message = "질문을 입력해주세요.")
Long questionId,

@NotBlank(message = "답변을 입력해주세요.")
@Schema(description = "리뷰 문항에 대한 답변")
@NotBlank(message = "답변을 입력해주세요.")
String answer
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,22 @@

@Schema(description = "리뷰 등록 요청")
public record CreateReviewRequest(
@NotNull(message = "리뷰어 아이디를 입력해주세요.")

@Schema(description = "리뷰어 ID")
@NotNull(message = "리뷰어 아이디를 입력해주세요.")
Long reviewerId,

@NotNull(message = "리뷰어 그룹 아이디를 입력해주세요.")
@Schema(description = "리뷰어 그룹 ID")
@NotNull(message = "리뷰어 그룹 아이디를 입력해주세요.")
Long reviewerGroupId,

@Schema(description = "리뷰 내용 목록")
@Valid
@NotNull(message = "리뷰 내용을 입력해주세요.")
@Schema(description = "리뷰 내용 목록")
List<CreateReviewContentRequest> contents,
List<CreateReviewContentRequest> reviewContents,

@NotNull(message = "키워드를 입력해주세요.")
@Schema(description = "선택된 키워드 ID 목록")
List<Long> selectedKeywordIds
@NotNull(message = "키워드를 입력해주세요.")
List<Long> keywords
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package reviewme.review.exception;

import reviewme.global.exception.NotFoundException;

public class QuestionNotFoundException extends NotFoundException {

public QuestionNotFoundException() {
super("질문이 존재하지 않습니다.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import reviewme.review.domain.Question;
import reviewme.review.exception.QuestionNotFoundException;

@Repository
public interface QuestionRepository extends JpaRepository<Question, Long> {

default Question getQuestionById(long id) {
return findById(id).orElseThrow(QuestionNotFoundException::new);
}
}
29 changes: 28 additions & 1 deletion backend/src/main/java/reviewme/review/service/ReviewService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package reviewme.review.service;

import java.time.LocalDateTime;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
Expand All @@ -12,7 +13,9 @@
import reviewme.member.domain.Member;
import reviewme.member.domain.ReviewerGroup;
import reviewme.member.repository.MemberRepository;
import reviewme.member.repository.ReviewerGroupRepository;
import reviewme.member.service.ReviewerGroupService;
import reviewme.review.domain.Question;
import reviewme.review.domain.Review;
import reviewme.review.domain.ReviewContent;
import reviewme.review.dto.response.ReviewCreationResponse;
Expand All @@ -23,6 +26,7 @@
import reviewme.review.dto.response.ReviewDetailReviewContentResponse;
import reviewme.review.dto.response.ReviewDetailReviewerGroupResponse;
import reviewme.review.exception.ReviewUnAuthorizedException;
import reviewme.review.repository.QuestionRepository;
import reviewme.review.repository.ReviewContentRepository;
import reviewme.review.repository.ReviewRepository;

Expand All @@ -35,12 +39,35 @@ public class ReviewService {
private final QuestionService questionService;
private final ReviewRepository reviewRepository;
private final MemberRepository memberRepository;
private final ReviewerGroupRepository reviewerGroupRepository;
private final ReviewContentRepository reviewContentRepository;
private final QuestionRepository questionRepository;
private final KeywordRepository keywordRepository;

@Transactional
public Long createReview(CreateReviewRequest request) {
return null;
ReviewerGroup reviewerGroup = reviewerGroupRepository.getReviewerGroupById(request.reviewerGroupId());
Member reviewer = memberRepository.getMemberById(request.reviewerId());

List<Keyword> keywordList = request.keywords()
.stream()
.map(keywordRepository::getKeywordById)
.toList();

Review review = new Review(reviewer, reviewerGroup.getReviewee(),
reviewerGroup, keywordList, LocalDateTime.now());
Review savedReview = reviewRepository.save(review);

request.reviewContents()
.forEach(contentsRequest -> {
Question question = questionRepository.getQuestionById(contentsRequest.questionId());
String answer = contentsRequest.answer();

ReviewContent reviewContent = new ReviewContent(savedReview, question, answer);
reviewContentRepository.save(reviewContent);
});

return savedReview.getId();
}

@Transactional(readOnly = true)
Expand Down

This file was deleted.

Loading

0 comments on commit 07fa6a3

Please sign in to comment.