Skip to content

Commit a69a209

Browse files
committed
Merge branch 'main' of https://github.com/prgrms-web-devcourse-final-project/WEB5_6_NeogulCoder_BE into feature/EA3-210-aws-s3
2 parents fdddf0d + 6291fe9 commit a69a209

File tree

22 files changed

+210
-87
lines changed

22 files changed

+210
-87
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,12 @@
1-
# WEB5_6_Neogul_Coder_BE
1+
# WEB5_6_Neogul_Coder_BE
2+
3+
## 서비스 소개
4+
5+
## 담당파트
6+
<img width="1238" height="501" alt="image" src="https://github.com/user-attachments/assets/65a7d211-349c-45bf-b5a8-601310ee38bc" />
7+
8+
## 시스템 아키텍처
9+
<img width="787" height="588" alt="image" src="https://github.com/user-attachments/assets/8c247cc3-0d78-4a2e-b71a-1b2cf69b3778" />
10+
11+
## ERD
12+
<img width="2780" height="1562" alt="WEB5_6_NeogulCoder_BE (8)" src="https://github.com/user-attachments/assets/5ad5ccad-fd23-4601-8e13-1b2b082e2b4a" />

src/main/java/grep/neogulcoder/domain/admin/controller/AdminController.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import grep.neogulcoder.domain.admin.controller.dto.response.AdminStudyResponse;
55
import grep.neogulcoder.domain.admin.controller.dto.response.AdminUserResponse;
66
import grep.neogulcoder.domain.admin.service.AdminService;
7+
import grep.neogulcoder.domain.recruitment.post.service.RecruitmentPostService;
78
import grep.neogulcoder.domain.study.enums.Category;
9+
import grep.neogulcoder.domain.study.service.StudyManagementService;
10+
import grep.neogulcoder.domain.users.service.UserService;
811
import grep.neogulcoder.global.response.ApiResponse;
912
import lombok.RequiredArgsConstructor;
1013
import org.springframework.data.domain.Page;
@@ -15,6 +18,7 @@
1518
import org.springframework.web.bind.annotation.DeleteMapping;
1619
import org.springframework.web.bind.annotation.GetMapping;
1720
import org.springframework.web.bind.annotation.PathVariable;
21+
import org.springframework.web.bind.annotation.PostMapping;
1822
import org.springframework.web.bind.annotation.RequestMapping;
1923
import org.springframework.web.bind.annotation.RequestParam;
2024
import org.springframework.web.bind.annotation.RestController;
@@ -26,6 +30,9 @@
2630
public class AdminController implements AdminSpecification {
2731

2832
private final AdminService adminService;
33+
private final UserService userService;
34+
private final StudyManagementService studyManagementService;
35+
private final RecruitmentPostService recruitmentPostService;
2936

3037
@GetMapping("/users")
3138
public ResponseEntity<ApiResponse<Page<AdminUserResponse>>> getUsers(
@@ -52,6 +59,24 @@ public ResponseEntity<ApiResponse<Page<AdminRecruitmentPostResponse>>> getRecrui
5259
return ResponseEntity.ok(ApiResponse.success(adminService.getAllRecruitmentPosts(page, subject)));
5360
}
5461

62+
@PostMapping("/reactive/user/{userId}")
63+
public ResponseEntity<ApiResponse<Void>> reactiveUser(@PathVariable("userId") Long userId) {
64+
userService.reactiveUser(userId);
65+
return ResponseEntity.ok(ApiResponse.success("회원이 다시 활성화 되었습니다."));
66+
}
67+
68+
@PostMapping("/reactive/study/{studyId}")
69+
public ResponseEntity<ApiResponse<Void>> reactiveStudy(@PathVariable("studyId") Long studyId) {
70+
studyManagementService.reactiveStudy(studyId);
71+
return ResponseEntity.ok(ApiResponse.success("스터디가 다시 활성화 되었습니다."));
72+
}
73+
74+
@PostMapping("/reactive/study/{recruitmentPostId}")
75+
public ResponseEntity<ApiResponse<Void>> reactiveRecruitmentPost(@PathVariable("recruitmentPostId") Long recruitmentPostId) {
76+
recruitmentPostService.reactivePost(recruitmentPostId);
77+
return ResponseEntity.ok(ApiResponse.success("모집글이 다시 활성화 되었습니다."));
78+
}
79+
5580
@DeleteMapping("/users/{userId}")
5681
public ResponseEntity<ApiResponse<Void>> deleteUser(@PathVariable Long userId) {
5782
adminService.deleteUser(userId);

src/main/java/grep/neogulcoder/domain/admin/service/AdminService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import grep.neogulcoder.domain.study.enums.Category;
1010
import grep.neogulcoder.domain.study.repository.StudyQueryRepository;
1111
import grep.neogulcoder.domain.study.repository.StudyRepository;
12+
import grep.neogulcoder.domain.users.entity.User;
1213
import grep.neogulcoder.domain.users.repository.UserRepository;
1314
import grep.neogulcoder.domain.users.service.UserService;
1415
import grep.neogulcoder.global.exception.business.NotFoundException;

src/main/java/grep/neogulcoder/domain/alram/service/AlarmService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void acceptInvite(Long targetUserId, Long alarmId) {
126126
Long studyId = alarm.getDomainId();
127127
Study study = findValidStudy(studyId);
128128
studyMemberRepository.save(StudyMember.createMember(study, targetUserId));
129-
studyManagementServiceFacade.increaseMemberCount(study, targetUserId);
129+
studyManagementServiceFacade.increaseMemberCount(studyId, targetUserId);
130130
alarm.checkAlarm();
131131
}
132132

src/main/java/grep/neogulcoder/domain/recruitment/post/RecruitmentPost.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,8 @@ public void updateStatus(RecruitmentPostStatus status) {
6363
public void delete() {
6464
this.activated = false;
6565
}
66+
67+
public void reactive() {
68+
this.activated = true;
69+
}
6670
}

src/main/java/grep/neogulcoder/domain/recruitment/post/repository/RecruitmentPostQueryRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ private BooleanBuilder equalsStudyCategory(Category category) {
157157
}
158158

159159
private BooleanBuilder likeContent(String content) {
160-
return nullSafeBuilder(() -> recruitmentPost.content.contains(content));
160+
return nullSafeBuilder(() -> recruitmentPost.content.contains(content).or(recruitmentPost.subject.contains(content)));
161161
}
162162

163163
private BooleanBuilder nullSafeBuilder(Supplier<BooleanExpression> supplier) {

src/main/java/grep/neogulcoder/domain/recruitment/post/service/RecruitmentPostService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@ public void delete(long recruitmentPostId, long userId) {
9999
recruitmentPost.delete();
100100
}
101101

102+
@Transactional
103+
public void reactivePost(Long recruitmentPostId) {
104+
RecruitmentPost recruitmentPost = postRepository.findByIdAndActivatedTrue(recruitmentPostId)
105+
.orElseThrow(() -> new NotFoundException(NOT_FOUND));
106+
recruitmentPost.reactive();
107+
}
108+
102109
private List<CommentsWithWriterInfo> findCommentsWithWriterInfo(RecruitmentPost post) {
103110
List<CommentsWithWriterInfo> comments = commentQueryRepository.findCommentsWithWriterInfo(post.getId());
104111
List<CommentsWithWriterInfo> withdrawnUserComments = withdrawnUserChangeNameFrom(comments);

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class ReviewController implements ReviewSpecification {
2727

2828
@GetMapping("/studies/{study-id}/targets")
2929
public ResponseEntity<ApiResponse<ReviewTargetUsersInfo>> getReviewTargetUsersInfo(@PathVariable("study-id") long studyId,
30-
@AuthenticationPrincipal Principal userDetails) {
30+
@AuthenticationPrincipal Principal userDetails) {
3131
ReviewTargetUsersInfo response = reviewService.getReviewTargetUsersInfo(studyId, userDetails.getUserId());
3232
return ResponseEntity.ok(ApiResponse.success(response));
3333
}
@@ -44,16 +44,16 @@ public ResponseEntity<ApiResponse<Long>> save(@Valid @RequestBody ReviewSaveRequ
4444
return ResponseEntity.ok(ApiResponse.noContent());
4545
}
4646

47-
@GetMapping("/me/tags")
48-
public ResponseEntity<ApiResponse<MyReviewTagsInfo>> getMyReviewTags(@AuthenticationPrincipal Principal userDetails) {
49-
MyReviewTagsInfo response = reviewService.getMyReviewTags(userDetails.getUserId());
47+
@GetMapping("/users/{user-id}/tags")
48+
public ResponseEntity<ApiResponse<MyReviewTagsInfo>> getMyReviewTags(@PathVariable("user-id") long userId) {
49+
MyReviewTagsInfo response = reviewService.getMyReviewTags(userId);
5050
return ResponseEntity.ok(ApiResponse.success(response));
5151
}
5252

53-
@GetMapping("/me/contents")
53+
@GetMapping("/users/{user-id}/contents")
5454
public ResponseEntity<ApiResponse<ReviewContentsPagingInfo>> getMyReviewContents(@PageableDefault(size = 4) Pageable pageable,
55-
@AuthenticationPrincipal Principal userDetails) {
56-
ReviewContentsPagingInfo response = reviewService.getMyReviewContents(pageable, userDetails.getUserId());
55+
@PathVariable("user-id") long userId) {
56+
ReviewContentsPagingInfo response = reviewService.getMyReviewContents(pageable, userId);
5757
return ResponseEntity.ok(ApiResponse.success(response));
5858
}
5959
}

src/main/java/grep/neogulcoder/domain/review/controller/ReviewSpecification.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public interface ReviewSpecification {
6161
ResponseEntity<ApiResponse<Long>> save(ReviewSaveRequest request, Principal userDetails);
6262

6363
@Operation(
64-
summary = "자신이 받은 리뷰 태그 조회",
64+
summary = "회원이 받은 리뷰 태그 조회",
6565
description = """
6666
회원이 받은 리뷰 태그의 종류와 개수를 조회합니다.
6767
@@ -86,9 +86,9 @@ public interface ReviewSpecification {
8686
- 내부 반환 값은 Map<String, List<ReviewTagCountInfo>> 입니다.
8787
"""
8888
)
89-
ResponseEntity<ApiResponse<MyReviewTagsInfo>> getMyReviewTags(Principal userDetails);
89+
ResponseEntity<ApiResponse<MyReviewTagsInfo>> getMyReviewTags(long userId);
9090

91-
@Operation(summary = "자신이 받은 주관 리뷰들 조회",
91+
@Operation(summary = "회원이 받은 주관 리뷰들 페이징 조회",
9292
description = """
9393
회원이 받은 **주관식 리뷰**를 페이징하여 조회합니다.
9494
@@ -100,5 +100,5 @@ public interface ReviewSpecification {
100100
✅ 예시:
101101
`/reviews/me/contents?page=0&size=5`
102102
""")
103-
ResponseEntity<ApiResponse<ReviewContentsPagingInfo>> getMyReviewContents(Pageable pageable, Principal userDetails);
103+
ResponseEntity<ApiResponse<ReviewContentsPagingInfo>> getMyReviewContents(Pageable pageable, long userId);
104104
}

src/main/java/grep/neogulcoder/domain/study/Study.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ public void finish() {
118118
this.finished = true;
119119
}
120120

121+
public void reactive() {
122+
this.activated = true;
123+
}
124+
121125
public boolean isReviewableAt(LocalDateTime currentDateTime) {
122126
LocalDateTime reviewableDateTime = this.endDate.plusDays(7);
123127

0 commit comments

Comments
 (0)