Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] refactor: 서비스 리팩터링 #540

Merged
merged 45 commits into from
Sep 7, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
1e6204b
feat: 리뷰를 검증하는 서비스 구현
Kimprodp Aug 28, 2024
d62a842
refactor: 리뷰 등록 서비스가 리뷰를 생성하고 검증 서비스를 통해서 검증하도록 변경
Kimprodp Aug 28, 2024
de03539
refactor: 답변 검증 서비스가 요청이 아닌 객체를 검증하도록 변경
Kimprodp Aug 28, 2024
2fc94e1
feat: 리뷰에서 제공하는 기능 추가
Kimprodp Aug 28, 2024
7561c72
refactor: dto명 변경 및 사용하지 않는 메서드 삭제
Kimprodp Aug 28, 2024
d3842d2
refactor: 예외명 및 메세지 변경
Kimprodp Aug 28, 2024
3cfe514
refactor: 리뷰 목록 조회 서비스명 변경 및 응답 객체 mapper를 활용하도록 변경
Kimprodp Aug 28, 2024
daecbdc
feat: 리뷰 목록 응답 객체 매핑 서비스 추가
Kimprodp Aug 28, 2024
9cc53a9
refactor: dto명 변경으로 인한 수정
Kimprodp Aug 28, 2024
b60807f
refactor: ReviewMapper를 통해 리뷰를 생성하도록 변경
Kimprodp Aug 28, 2024
ebc281c
refactor: 리뷰 상세 응답 mapper를 활용하도록 변경 및 일부 로직 리팩터링
Kimprodp Aug 28, 2024
e42293c
refactor: 템플릿을 찾는 로직을 mapper에서 하도록 변경
Kimprodp Aug 28, 2024
357e9ef
refactor: 리팩터링에 따른 컨트롤러 변경사항
Kimprodp Aug 28, 2024
bb153e5
Merge remote-tracking branch 'refs/remotes/origin/develop' into be/re…
Kimprodp Aug 28, 2024
646d8b7
test: 변경사항 반영
Kimprodp Aug 28, 2024
20d6ffc
refactor: 질문이 없는 섹션은 응답 생성하지 않도록 변경
Kimprodp Aug 29, 2024
bd4b455
refactor: 답변이 null인 경우에 대한 예외 추가
Kimprodp Aug 29, 2024
fd2f730
refactor: CheckBoxAnswerValidator null 검증 제외 및 질문 유효 검증 추가
Kimprodp Aug 29, 2024
14e1819
refactor: TextAnswerValidator 질문 유효 검증 추가
Kimprodp Aug 29, 2024
76a01c7
test: Validator 테스트 작성
Kimprodp Aug 29, 2024
08e5707
test: Mapper 테스트 작성
Kimprodp Aug 29, 2024
7e15fa3
test: ReviewValidator 테스트 작성
Kimprodp Aug 29, 2024
8726e0c
test: ReviewRegisterService 테스트 간소화
Kimprodp Aug 29, 2024
cfe4fd9
test: 리팩터링 사항 반영
Kimprodp Aug 29, 2024
c351eb2
test: Review 테스트 작성
Kimprodp Aug 29, 2024
4ff1bb4
chore: secret 변경사항 반영
Kimprodp Aug 29, 2024
f494164
refactor: 답변 생성 시, null 이 들어올 수 없도록 변경
Kimprodp Sep 4, 2024
b0e20bc
refactor: ReviewMapper 에서 답변에 대한 검증 없이 엔티티 매핑만 하도록 변경
Kimprodp Sep 4, 2024
0d63f18
refactor: ReviewValidator 에서 답변에 대한 검증도 진행하도록 변경
Kimprodp Sep 4, 2024
d93f943
refactor: 메서드명 변경 (getAllQuestionIdsFromAnswers -> getAnsweredQuestio…
Kimprodp Sep 4, 2024
6363b82
refactor: @Transactional 어노테이션을 클래스 범위에만 적용하도록 변경
Kimprodp Sep 4, 2024
0062fb4
refactor: 메서드 분리 변경
Kimprodp Sep 4, 2024
1359b10
refactor: 메서드 시그니쳐 변경
Kimprodp Sep 4, 2024
8caa2b0
style : 개행 수정
Kimprodp Sep 4, 2024
b90aa47
refactor: 존재하는 메서드 활용하도록 변경
Kimprodp Sep 4, 2024
1f18e77
refactor: 리뷰에 특적 질문에 대한 답변이 있는지 확인하는 기능 추가
Kimprodp Sep 4, 2024
0071013
style: 개행 수정
Kimprodp Sep 4, 2024
7022bcb
refactor: 객체 메서드를 활용하도록 변경
Kimprodp Sep 5, 2024
c280809
test: AnswerMapperTest 작성
Kimprodp Sep 5, 2024
d9b4519
refactor: 답변 검증 시, 답변이 빈 경우에 대한 검증도 객체 생성자에서 진행 및 QuestionNotAnswered…
Kimprodp Sep 7, 2024
caa0716
refactor: 메서드명 변경 (hasQuestions -> hasAnsweredQuestion)
Kimprodp Sep 7, 2024
eca9491
style: 개행 변경
Kimprodp Sep 7, 2024
591f8cb
refactor: ReviewValidator 파라미터를 나눠보 보낼 수 있는 부분 적용
Kimprodp Sep 7, 2024
d3a615c
Merge remote-tracking branch 'refs/remotes/origin/develop' into be/re…
Kimprodp Sep 7, 2024
610b785
test: develop 브랜치 머치 후, 미변경 사항 적용
Kimprodp Sep 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions backend/src/main/java/reviewme/review/domain/Review.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.AccessLevel;
import lombok.EqualsAndHashCode;
import lombok.Getter;
Expand Down Expand Up @@ -55,6 +58,20 @@ public Review(long templateId, long reviewGroupId,
this.createdAt = LocalDateTime.now();
}

public Set<Long> getAllQuestionIdsFromAnswers() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제안) getAnsweredQuestionIds

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영 완료👍

return Stream.concat(
textAnswers.stream().map(TextAnswer::getQuestionId),
checkboxAnswers.stream().map(CheckboxAnswer::getQuestionId)
).collect(Collectors.toSet());
}

public Set<Long> getAllCheckBoxOptionIds() {
return checkboxAnswers.stream()
.flatMap(answer -> answer.getSelectedOptionIds().stream())
.map(CheckBoxAnswerSelectedOption::getSelectedOptionId)
.collect(Collectors.toSet());
}

public LocalDate getCreatedDate() {
return createdAt.toLocalDate();
}
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package reviewme.review.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import reviewme.review.domain.Review;
import reviewme.review.repository.ReviewRepository;
import reviewme.review.service.dto.request.CreateReviewRequest;
import reviewme.review.service.module.CheckBoxAnswerValidator;
import reviewme.review.service.module.ReviewMapper;
import reviewme.review.service.module.ReviewValidator;
import reviewme.review.service.module.TextAnswerValidator;

@Service
@RequiredArgsConstructor
public class ReviewRegisterService {

private final ReviewMapper reviewMapper;
private final ReviewValidator reviewValidator;
private final TextAnswerValidator textAnswerValidator;
private final CheckBoxAnswerValidator checkBoxAnswerValidator;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validatormapper에서만 사용된다면, mapper 필드에 두어도 괜찮겠습니다

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mapper와 validator의 책임을 완전히 분리해야 된다고 생각합니다.
mapper 에서는 검증 없이 단순히 매핑만 하도록 하고(리뷰와 답변 모두 생성만),
validator에서는 비즈니즈 정책에 따른 검증만 하도록 변경했습니다.(리뷰와 답번 검증 진행)

이 두 로직이 서비스 단에서 나눠져서 보인다면 깊게 접근하지 않아도 변경할 부분을 쉽게 찾을 수 있을 것 같아요😊


private final ReviewRepository reviewRepository;

@Transactional
public long registerReview(CreateReviewRequest request) {
Review review = reviewMapper.mapToReview(request, textAnswerValidator, checkBoxAnswerValidator);
reviewValidator.validate(review);
Review registeredReview = reviewRepository.save(review);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위 코멘트와 같은 맥락으로, mapper가 매핑한 리뷰를 검증된 리뷰라고 바라보는 것도 좋겠네요. 추상화 측면에서도 리뷰를 등록하는 것이니, 검증의 책임을 아래로 내리는 것이 자연스럽게 느껴져요

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위 코멘트에서 함께 설명드렸습니다!

return registeredReview.getId();
}
}
Loading