Skip to content

Commit 9e2e6dc

Browse files
committed
Merge branch 'feature/EA3-156-review-joinedStudy-implement' of https://github.com/prgrms-web-devcourse-final-project/WEB5_6_NeogulCoder_BE into feature/EA3-138-recruitment-post-implement
2 parents 50e6f39 + 08df649 commit 9e2e6dc

File tree

5 files changed

+56
-5
lines changed

5 files changed

+56
-5
lines changed

src/main/java/grep/neogul_coder/domain/review/controller/ReviewController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public ApiResponse<ReviewTargetUsersInfo> getReviewTargetUsersInfo(@PathVariable
3131

3232
@GetMapping("/studies/me")
3333
public ApiResponse<JoinedStudiesInfo> getJoinedStudiesInfo(@AuthenticationPrincipal Principal userDetails) {
34-
return ApiResponse.success(new JoinedStudiesInfo());
34+
JoinedStudiesInfo response = reviewService.getJoinedStudiesInfo(userDetails.getUserId());
35+
return ApiResponse.success(response);
3536
}
3637

3738
@PostMapping

src/main/java/grep/neogul_coder/domain/review/controller/dto/response/JoinedStudiesInfo.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
package grep.neogul_coder.domain.review.controller.dto.response;
22

3+
import grep.neogul_coder.domain.study.Study;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.Getter;
56
import lombok.ToString;
67

78
import java.util.List;
89

10+
@ToString
911
@Getter
1012
public class JoinedStudiesInfo {
1113

1214
@Schema(example = "[ { studyId: 2, studyName: 자바 스터디, imageUrl: www.s3.com } ]")
13-
private List<StudyInfo> studiesInfo;
15+
private List<StudyInfo> studies;
1416

15-
public JoinedStudiesInfo() {
17+
public JoinedStudiesInfo(List<StudyInfo> studies) {
18+
this.studies = studies;
19+
}
20+
21+
public static JoinedStudiesInfo of(List<Study> studies) {
22+
List<StudyInfo> studiesInfo = studies.stream()
23+
.map(study -> new StudyInfo(study.getId(), study.getName(), study.getImageUrl()))
24+
.toList();
25+
26+
return new JoinedStudiesInfo(studiesInfo);
1627
}
1728

1829
@ToString

src/main/java/grep/neogul_coder/domain/review/service/ReviewService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package grep.neogul_coder.domain.review.service;
22

33
import grep.neogul_coder.domain.review.*;
4+
import grep.neogul_coder.domain.review.controller.dto.response.JoinedStudiesInfo;
45
import grep.neogul_coder.domain.review.controller.dto.response.MyReviewTagsInfo;
56
import grep.neogul_coder.domain.review.controller.dto.response.ReviewContentsPagingInfo;
67
import grep.neogul_coder.domain.review.controller.dto.response.ReviewTargetUsersInfo;
@@ -14,6 +15,7 @@
1415
import grep.neogul_coder.domain.review.repository.ReviewTagRepository;
1516
import grep.neogul_coder.domain.study.Study;
1617
import grep.neogul_coder.domain.study.StudyMember;
18+
import grep.neogul_coder.domain.study.repository.StudyMemberQueryRepository;
1719
import grep.neogul_coder.domain.study.repository.StudyMemberRepository;
1820
import grep.neogul_coder.domain.study.repository.StudyRepository;
1921
import grep.neogul_coder.domain.users.entity.User;
@@ -41,6 +43,7 @@ public class ReviewService {
4143
private final UserRepository userRepository;
4244
private final StudyRepository studyRepository;
4345
private final StudyMemberRepository studyMemberRepository;
46+
private final StudyMemberQueryRepository studyMemberQueryRepository;
4447

4548
private final ReviewTagFinder reviewTagFinder;
4649
private final ReviewRepository reviewRepository;
@@ -56,6 +59,11 @@ public ReviewTargetUsersInfo getReviewTargetUsersInfo(long studyId, String myNic
5659
return ReviewTargetUsersInfo.of(targetUsers);
5760
}
5861

62+
public JoinedStudiesInfo getJoinedStudiesInfo(long userId) {
63+
List<StudyMember> studyMembers = studyMemberQueryRepository.findAllFetchStudyByUserId(userId);
64+
return JoinedStudiesInfo.of(convertToStudiesFrom(studyMembers));
65+
}
66+
5967
@Transactional
6068
public long save(ReviewSaveServiceRequest request, long writeUserId) {
6169
if(isAlreadyWrittenReviewBy(request.getStudyId(), request.getTargetUserId(), writeUserId)){
@@ -114,6 +122,12 @@ private List<User> findReviewTargetUsers(List<StudyMember> studyMembers, String
114122
.toList();
115123
}
116124

125+
private List<Study> convertToStudiesFrom(List<StudyMember> studyMembers) {
126+
return studyMembers.stream()
127+
.map(StudyMember::getStudy)
128+
.toList();
129+
}
130+
117131
private boolean isAlreadyWrittenReviewBy(long studyId, long targetUserId, long writeUserId) {
118132
return reviewQueryRepository.findBy(studyId, targetUserId, writeUserId) != null;
119133
}

src/main/java/grep/neogul_coder/global/init/ReviewTagInitializer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public class ReviewTagInitializer {
2727
@EventListener(ApplicationReadyEvent.class)
2828
@Transactional
2929
public void initReviewTags() {
30-
if (reviewTagRepository.count() == 5) {
30+
long count = reviewTagRepository.count();
31+
if (count == 0 || count == 5) {
3132
List<ReviewTagEntity> reviewTagEntities = Stream.of(
3233
GoodReviewTag.values(),
3334
BadReviewTag.values(),

src/test/java/grep/neogul_coder/domain/review/controller/service/ReviewServiceTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import grep.neogul_coder.domain.IntegrationTestSupport;
44
import grep.neogul_coder.domain.review.Review;
55
import grep.neogul_coder.domain.review.ReviewType;
6+
import grep.neogul_coder.domain.review.controller.dto.response.JoinedStudiesInfo;
67
import grep.neogul_coder.domain.review.controller.dto.response.MyReviewTagsInfo;
78
import grep.neogul_coder.domain.review.controller.dto.response.ReviewContentsPagingInfo;
89
import grep.neogul_coder.domain.review.controller.dto.response.ReviewTargetUsersInfo;
@@ -86,7 +87,30 @@ void getReviewTargetUsersInfo() {
8687
.containsExactlyInAnyOrder("테스터2", "테스터3");
8788
}
8889

89-
//TODO REVIEW_TAG_INITIALIZER 수정 필요
90+
@DisplayName("내가 참여한 스터디 정보들을 조회 합니다.")
91+
@Test
92+
void getJoinedStudiesInfo() {
93+
//given
94+
User user = createUser("테스터");
95+
userRepository.save(user);
96+
97+
Study study1 = createStudy("운영체제 스터디", Category.IT);
98+
Study study2 = createStudy("클라이밍 동아리", Category.HOBBY);
99+
studyRepository.saveAll(List.of(study1, study2));
100+
101+
StudyMember studyMember1 = createStudyMember(study1, user.getId());
102+
StudyMember studyMember2 = createStudyMember(study2, user.getId());
103+
studyMemberRepository.saveAll(List.of(studyMember1, studyMember2));
104+
105+
//when
106+
JoinedStudiesInfo response = reviewService.getJoinedStudiesInfo(user.getId());
107+
108+
//then
109+
assertThat(response.getStudies())
110+
.extracting("studyName")
111+
.containsExactlyInAnyOrder("운영체제 스터디", "클라이밍 동아리");
112+
}
113+
90114
@DisplayName("리뷰 입력을 받아 리뷰를 저장 합니다.")
91115
@Test
92116
void save() {

0 commit comments

Comments
 (0)