Conversation
TODO: 모집 정보 테스트코드를 시간 계산법을 LocalDateTime에서 Instant로 변경 후에 활성화할 것
…hub.com/pknu-wap/Moadong into refactor/#368-collection-merge-and-test
- 1시간마다 DB 확인 - RecruitmentScheduler.java -> RecruitmentStateChecker 이름 변경
Due-IT
left a comment
There was a problem hiding this comment.
고생 많으셨습니다.
커밋기록이 중복돼서 리뷰 이후 변경사항을 파악하기 어려운 감이 있네요.
앞으로 리베이스 사용시 유의해야할거 같습니다 :)
backend/src/main/java/moadong/club/payload/response/ClubApplicationResponse.java
Outdated
Show resolved
Hide resolved
| List<ClubApplicationQuestion> newQuestions = request.questions().stream() | ||
| .map(question -> ClubApplicationQuestion.builder() | ||
| .id(question.id()) | ||
| .title(question.title()) | ||
| .description(question.description()) | ||
| .type(question.type()) | ||
| .options( | ||
| ClubQuestionOption.builder() | ||
| .required(question.options().required()) | ||
| .build() | ||
| ) | ||
| .items(question.items().stream() | ||
| .map(item -> | ||
| ClubQuestionItem.builder() | ||
| .value(item.value()) | ||
| .build()) | ||
| .toList()) | ||
| .build()) | ||
| .toList(); |
There was a problem hiding this comment.
builder를 중첩해서 한번에 생성하는 것과 필요한 것들을 준비해서 변수를 통해 생성하는 방법은 어떤 차이가 있을까요?
There was a problem hiding this comment.
가시성에서는 따로 나누는게 오히려 좋을것으로 생각이됩니다. 제가 저렇게 작성한건 이미 stream으로 배열을 다루고있어서 한거였습니다!
There was a problem hiding this comment.
궁금해서 stream일때와 for loop일때 성능 차이를 비교해봤습니다
case 10개

case 100만개

오히려 stream을 사용한게 퍼포먼스적으로 느리다는점을 알수있었습니다.
퍼포먼스적으로도 그렇고 가시성에서도 for-loop로 나누는게 좋을듯하여 리팩토링 진행하겠습니다~
참고:
https://sigridjin.medium.com/java-stream-api는-왜-for-loop보다-느릴까-50dec4b9974b
Zepelown
left a comment
There was a problem hiding this comment.
고생하셨습니다.
커맨트 남겼으니 확인 부탁드립니다.
backend/src/main/java/moadong/club/service/ClubApplyService.java
Outdated
Show resolved
Hide resolved
|
|
||
| @Id | ||
| private String id; | ||
|
|
||
| private String questionId; | ||
|
|
||
| @Builder.Default | ||
| private List<ClubQuestionAnswer> answers = new ArrayList<>(); | ||
|
|
||
| @Builder.Default | ||
| LocalDateTime createdAt = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime(); | ||
| } |
There was a problem hiding this comment.
혹시 여기에 status 만 하나 추가해주실 수 있으실까요?
Enum으로 선언하시면 될 것 같습니다.
public enum ApplicationStatus {
DRAFT, // 작성 중
SUBMITTED, // 제출 완료
SCREENING, // 서류 심사 중
SCREENING_PASSED, // 서류 통과
SCREENING_FAILED, // 서류 탈락
INTERVIEW_SCHEDULED, // 면접 일정 확정
INTERVIEW_IN_PROGRESS, // 면접 진행 중
INTERVIEW_PASSED, // 면접 통과
INTERVIEW_FAILED, // 면접 탈락
OFFERED, // 최종 합격 제안
ACCEPTED, // 제안 수락
DECLINED, // 제안 거절
CANCELED_BY_APPLICANT // 지원자 자진 철회
}
위 상태처럼 만들어주시면 감사하겠습니다.
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
backend/src/main/java/moadong/club/entity/ClubApplication.java (1)
22-38: 🛠️ Refactor suggestion사용자 ID 필드가 필요합니다.
현재 설계에서는 지원서를 제출한 사용자를 식별할 수 있는
userId필드가 누락되어 있습니다. 이 필드는 지원서와 사용자를 연결하는 중요한 요소이며, 지원자 관리 및 통계 분석에 필수적입니다.public class ClubApplication { @Id private String id; private String questionId; + + private String userId; @Enumerated(EnumType.STRING) @Builder.Default ApplicationStatus status = ApplicationStatus.SUBMITTED; // ... }
🧹 Nitpick comments (3)
backend/src/main/java/moadong/club/entity/ClubApplication.java (3)
30-31: 기본 상태값 검토 필요현재
status의 기본값이SUBMITTED로 설정되어 있습니다. 일반적인 지원서 워크플로우에서는 사용자가 작성 중인 상태를 의미하는DRAFT가 초기 상태로 더 적합할 수 있습니다. 사용자가 명시적으로 제출 버튼을 클릭할 때 상태를SUBMITTED로 변경하는 것이 논리적입니다.@Enumerated(EnumType.STRING) @Builder.Default -ApplicationStatus status = ApplicationStatus.SUBMITTED; +ApplicationStatus status = ApplicationStatus.DRAFT;
37-37: 접근 제한자 추가 필요
createdAt필드에 접근 제한자(private)가 누락되어 있어 패키지 수준 접근이 가능합니다. 일관성 유지와 캡슐화를 위해 접근 제한자를 추가하는 것이 좋습니다.@Builder.Default -LocalDateTime createdAt = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime(); +private LocalDateTime createdAt = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime();
22-23: 클래스에 JavaDoc 주석 추가 권장
ClubApplication클래스의 목적과 역할에 대한 JavaDoc 주석이 없습니다. 코드 가독성과 유지보수성 향상을 위해 클래스 목적, 주요 필드의 의미, 사용 방법 등을 설명하는 JavaDoc 주석을 추가하는 것이 좋습니다.+/** + * 동아리 지원서 정보를 나타내는 엔티티 클래스입니다. + * MongoDB의 "club_applications" 컬렉션에 저장됩니다. + * 지원서의 기본 정보와 답변 목록을 포함합니다. + */ @Document("club_applications") @AllArgsConstructor @Getter @Builder(toBuilder = true) public class ClubApplication {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
backend/src/main/java/moadong/club/entity/ClubApplication.java(1 hunks)backend/src/main/java/moadong/club/enums/ApplicationStatus.java(1 hunks)backend/src/main/java/moadong/club/service/ClubApplyService.java(1 hunks)backend/src/main/java/moadong/global/exception/ErrorCode.java(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- backend/src/main/java/moadong/club/enums/ApplicationStatus.java
🚧 Files skipped from review as they are similar to previous changes (2)
- backend/src/main/java/moadong/club/service/ClubApplyService.java
- backend/src/main/java/moadong/global/exception/ErrorCode.java
🧰 Additional context used
🧬 Code Graph Analysis (1)
backend/src/main/java/moadong/club/entity/ClubApplication.java (2)
backend/src/main/java/moadong/club/entity/ClubApplicationQuestion.java (1)
AllArgsConstructor(13-37)backend/src/main/java/moadong/club/entity/ClubQuestion.java (1)
Document(16-53)
#️⃣연관된 이슈
📝작업 내용
중점적으로 리뷰받고 싶은 부분(선택)
논의하고 싶은 부분(선택)
🫡 참고사항
현재 지원서를 단일로 받아 post와 put 메서드 로직이 동일합니다.
Summary by CodeRabbit