Skip to content

Commit 8df9db4

Browse files
authored
Merge pull request #296 from prgrms-web-devcourse-final-project/refactor/EA3-209-recuritment-post-edit
[EA3-209] Refactor: 모집글 생성 수정
2 parents 60fc4d6 + 302c99b commit 8df9db4

File tree

6 files changed

+29
-7
lines changed

6 files changed

+29
-7
lines changed

src/main/java/grep/neogulcoder/domain/recruitment/RecruitmentErrorCode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public enum RecruitmentErrorCode implements ErrorCode {
1414
NOT_FOUND(HttpStatus.NOT_FOUND, HttpStatus.NOT_FOUND.name(), "모집글을 찾지 못했습니다."),
1515
NOT_FOUND_STUDY_MEMBER(HttpStatus.NOT_FOUND, HttpStatus.NOT_FOUND.name(), "스터디에 참여하고 있지 않은 회원 입니다."),
1616
NOT_FOUND_COMMENT(HttpStatus.NOT_FOUND, HttpStatus.NOT_FOUND.name(), "댓글을 찾지 못했습니다"),
17-
NOT_OWNER(HttpStatus.BAD_REQUEST, HttpStatus.BAD_REQUEST.name(), "모집글을 등록한 당사자가 아닙니다.");
17+
NOT_OWNER(HttpStatus.BAD_REQUEST, HttpStatus.BAD_REQUEST.name(), "모집글을 등록한 당사자가 아닙니다."),
18+
END_DATE_ERROR(HttpStatus.BAD_REQUEST, HttpStatus.BAD_REQUEST.name(), "모집글은 스터디가 시작되고 종료될 때까지 작성 가능 합니다.");
1819

1920
private static final String BASIC_MESSAGE = "RECRUITMENT";
2021
private final HttpStatus status;

src/main/java/grep/neogulcoder/domain/recruitment/post/controller/RecruitmentPostSaveController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package grep.neogulcoder.domain.recruitment.post.controller;
22

33
import grep.neogulcoder.domain.recruitment.post.controller.dto.request.save.RecruitmentPostCreateRequest;
4-
import grep.neogulcoder.domain.recruitment.post.controller.dto.response.save.JoinedStudyLoadInfo;
54
import grep.neogulcoder.domain.recruitment.post.controller.dto.response.save.JoinedStudiesInfo;
5+
import grep.neogulcoder.domain.recruitment.post.controller.dto.response.save.JoinedStudyLoadInfo;
66
import grep.neogulcoder.domain.recruitment.post.service.RecruitmentPostSaveService;
77
import grep.neogulcoder.global.auth.Principal;
88
import grep.neogulcoder.global.response.ApiResponse;
@@ -21,7 +21,7 @@ public class RecruitmentPostSaveController implements RecruitmentPostSaveSpecifi
2121

2222
@PostMapping
2323
public ResponseEntity<ApiResponse<Long>> save(@Valid @RequestBody RecruitmentPostCreateRequest request,
24-
@AuthenticationPrincipal Principal userDetails) {
24+
@AuthenticationPrincipal Principal userDetails) {
2525
long postId = recruitmentPostService.create(request.toServiceRequest(), userDetails.getUserId());
2626
return ResponseEntity.ok(ApiResponse.success(postId));
2727
}
@@ -34,7 +34,7 @@ public ResponseEntity<ApiResponse<JoinedStudiesInfo>> getJoinedStudyInfo(@Authen
3434

3535
@GetMapping("/studies/{study-id}")
3636
public ResponseEntity<ApiResponse<JoinedStudyLoadInfo>> getJoinedStudyLoadInfo(@PathVariable("study-id") long studyId,
37-
@AuthenticationPrincipal Principal userDetails) {
37+
@AuthenticationPrincipal Principal userDetails) {
3838
JoinedStudyLoadInfo response = recruitmentPostService.getJoinedStudyLoadInfo(studyId, userDetails.getUserId());
3939
return ResponseEntity.ok(ApiResponse.success(response));
4040
}

src/main/java/grep/neogulcoder/domain/recruitment/post/controller/dto/request/save/RecruitmentPostCreateRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import grep.neogulcoder.domain.recruitment.post.service.request.RecruitmentPostCreateServiceRequest;
44
import io.swagger.v3.oas.annotations.media.Schema;
5-
import jakarta.validation.constraints.FutureOrPresent;
65
import jakarta.validation.constraints.NotBlank;
76
import jakarta.validation.constraints.NotNull;
87
import jakarta.validation.constraints.Positive;
@@ -31,7 +30,7 @@ public class RecruitmentPostCreateRequest {
3130
private int recruitmentCount;
3231

3332
@Schema(example = "2025-07-10", description = "모집 마감일")
34-
@FutureOrPresent(message = "모집 마감일은 현재 날짜 이전으로 설정이 불가능 합니다.")
33+
@NotNull
3534
private LocalDateTime expiredDate;
3635

3736
private RecruitmentPostCreateRequest() {

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
import org.springframework.stereotype.Service;
1414
import org.springframework.transaction.annotation.Transactional;
1515

16+
import java.time.LocalDateTime;
1617
import java.util.List;
1718

19+
import static grep.neogulcoder.domain.recruitment.RecruitmentErrorCode.*;
1820
import static grep.neogulcoder.domain.recruitment.RecruitmentErrorCode.NOT_FOUND_STUDY_MEMBER;
1921
import static grep.neogulcoder.domain.recruitment.RecruitmentErrorCode.NOT_STUDY_LEADER;
2022

@@ -28,12 +30,16 @@ public class RecruitmentPostSaveService {
2830

2931
@Transactional
3032
public long create(RecruitmentPostCreateServiceRequest request, long userId) {
31-
StudyMember studyMember = studyMemberRepository.findByStudyIdAndUserId(request.getStudyId(), userId);
33+
StudyMember studyMember = studyMemberRepository.findMemberWithStudyBy(request.getStudyId(), userId);
3234

3335
if (studyMember.hasNotRoleLeader()) {
3436
throw new BusinessException(NOT_STUDY_LEADER);
3537
}
3638

39+
if(studyMember.getStudy().hasEndDateBefore(request.getExpiredDate())){
40+
throw new BusinessException(END_DATE_ERROR);
41+
}
42+
3743
return recruitmentPostRepository.save(request.toEntity(userId)).getId();
3844
}
3945

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ public boolean isReviewableAt(LocalDateTime currentDateTime) {
125125
(currentDateTime.isEqual(reviewableDateTime) || currentDateTime.isBefore(reviewableDateTime));
126126
}
127127

128+
public boolean hasEndDateBefore(LocalDateTime dateTime) {
129+
return this.endDate.isBefore(dateTime);
130+
}
131+
128132
public static boolean isOverJoinLimit(int joinedStudyCount) {
129133
return joinedStudyCount >= MAX_JOINED_STUDY_COUNT;
130134
}

src/main/java/grep/neogulcoder/domain/study/repository/StudyMemberQueryRepository.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,18 @@ public StudyMember findByStudyIdAndUserId(long studyId, long userId) {
5656
.fetchOne();
5757
}
5858

59+
public StudyMember findMemberWithStudyBy(long studyId, long userId) {
60+
return queryFactory.select(studyMember)
61+
.from(studyMember)
62+
.join(studyMember.study, study).fetchJoin()
63+
.where(
64+
studyMember.study.id.eq(studyId),
65+
studyMember.userId.eq(userId),
66+
studyMember.activated.isTrue()
67+
)
68+
.fetchOne();
69+
}
70+
5971
public List<ExtendParticipationResponse> findExtendParticipation(Long studyId) {
6072
return queryFactory
6173
.select(Projections.constructor(

0 commit comments

Comments
 (0)