-
Notifications
You must be signed in to change notification settings - Fork 4
feat: 관리자 지원서 조회 API에 기수 파라미터 추가 #409
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
Conversation
Walkthrough
Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (3)
src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.java (1)
30-32: LGTM! API 스펙 변경이 적절합니다.
semesterId파라미터가required = false로 올바르게 선언되어 기존 API 동작을 보존합니다. 파라미터 위치도 일관성 있게 배치되었습니다.선택사항: API 문서 개선
Operation description에 새로운 파라미터에 대한 설명을 추가하면 API 사용자에게 도움이 될 수 있습니다:
@Operation( summary = "제출된 지원서 목록 조회", - description = "제출된 지원서들의 목록을 조회합니다.") + description = "제출된 지원서들의 목록을 조회합니다. semesterId를 지정하면 해당 기수의 지원서만 조회됩니다.")src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.java (1)
38-42: LGTM! API 스펙 변경이 일관성 있게 적용되었습니다.임시 저장 지원서 API도 제출된 지원서 API와 동일한 방식으로
semesterId파라미터를 추가하여 일관성을 유지합니다.선택사항: API 문서 개선
Operation description에 새로운 파라미터에 대한 설명을 추가하는 것을 고려해보세요:
@Operation( summary = "임시 저장된 지원서 목록 조회", - description = "관리자가 임시 저장된 지원서 목록을 조회합니다." + description = "관리자가 임시 저장된 지원서 목록을 조회합니다. semesterId를 지정하면 해당 기수의 지원서만 조회됩니다." )src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java (1)
33-48: 쿼리 최적화 고려 사항
eqSemesterId에서apply.recruit.semester.id를 사용하면 QueryDSL이 암시적 조인을 생성합니다. 현재 구현은 정상 동작하지만, 성능이 중요한 경우apply.recruit에 대한 명시적 조인 추가를 고려해 볼 수 있습니다.현재 구현도 문제없이 동작하므로, 성능 이슈가 발생하지 않는 한 유지해도 됩니다.
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (11)
src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.javasrc/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.javasrc/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.javasrc/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.javasrc/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.javasrc/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.javasrc/test/java/org/ject/support/domain/admin/service/AdminTempApplyServiceTest.javasrc/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.javasrc/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.java
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: 023-dev
Repo: JECT-Study/JECT-Official-WebSite-Server PR: 284
File: src/main/java/org/ject/support/domain/member/dto/MemberEditRequest.java:23-23
Timestamp: 2025-09-25T14:08:16.315Z
Learning: MemberEditRequest의 semesterName 필드는 특정 비즈니스 케이스로 인해 의도적으로 validation을 제거했음. 팀 논의를 통해 결정된 사항으로 NotBlank 검증을 추가하지 않음.
📚 Learning: 2025-10-23T13:43:33.075Z
Learnt from: 023-dev
Repo: JECT-Study/JECT-Official-WebSite-Server PR: 306
File: src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java:29-38
Timestamp: 2025-10-23T13:43:33.075Z
Learning: In `SubmittedApplyService.java` (Java service class in Spring Boot application), the bulk delete method `deleteSubmittedApplies` uses `applyIds.stream().distinct().toList()` to deduplicate input IDs before calling `findAllByIdAndStatusWithMember(distinctIds, Status.SUBMITTED)` to fetch Apply entities with status filtering and member join fetch, preventing duplicate ID issues in the size check.
Applied to files:
src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.javasrc/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.javasrc/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.javasrc/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.javasrc/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.java
📚 Learning: 2025-10-23T13:43:48.042Z
Learnt from: 023-dev
Repo: JECT-Study/JECT-Official-WebSite-Server PR: 306
File: src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java:28-38
Timestamp: 2025-10-23T13:43:48.042Z
Learning: In `SubmittedApplyService.java` (Java service class in Spring Boot application), the bulk delete method `deleteSubmittedApplies` deduplicates the input ID list using `stream().distinct().toList()` before calling `findAllByIdAndStatusWithMember(distinctIds, Status.SUBMITTED)` to fetch multiple Apply entities with status filtering and member join fetch in a single query, preventing N+1 issues and ensuring only SUBMITTED applies are deleted.
Applied to files:
src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.javasrc/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.javasrc/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.javasrc/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.javasrc/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.javasrc/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.java
📚 Learning: 2025-09-25T14:08:16.315Z
Learnt from: 023-dev
Repo: JECT-Study/JECT-Official-WebSite-Server PR: 284
File: src/main/java/org/ject/support/domain/member/dto/MemberEditRequest.java:23-23
Timestamp: 2025-09-25T14:08:16.315Z
Learning: MemberEditRequest의 semesterName 필드는 특정 비즈니스 케이스로 인해 의도적으로 validation을 제거했음. 팀 논의를 통해 결정된 사항으로 NotBlank 검증을 추가하지 않음.
Applied to files:
src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.javasrc/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.javasrc/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: check-application
🔇 Additional comments (12)
src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.java (1)
9-12: LGTM! 메서드 시그니처 변경이 적절합니다.
semesterId파라미터가status와pageable사이에 논리적으로 배치되었으며,Long타입을 사용하여 null 값을 통한 선택적 필터링이 가능합니다.src/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.java (2)
222-237: LGTM! 기존 테스트가 올바르게 업데이트되었습니다.
semesterId = null로 설정하여 기존 동작(학기 필터 없음)을 검증하며, repository 호출 검증도 새 시그니처를 반영하고 있습니다.
312-332: LGTM! 새로운 필터링 기능에 대한 테스트가 적절합니다.
semesterId로 필터링하는 경우를 명시적으로 검증하며, repository 호출과 결과 검증이 올바르게 구현되었습니다.src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java (1)
43-46: LGTM! 서비스 계층 변경이 올바르게 구현되었습니다.
semesterId파라미터를 repository 계층으로 올바르게 전달하며, 파라미터 순서도 일관성 있게 유지됩니다.src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java (1)
59-61: LGTM!
semesterId파라미터가 서비스 메서드에 올바르게 추가되었고, 기존jobFamily파라미터와 동일한 패턴으로 리포지토리에 전달됩니다.null처리는 리포지토리 레이어에서 적절히 수행됩니다.src/test/java/org/ject/support/domain/admin/service/AdminTempApplyServiceTest.java (2)
231-265: LGTM!
semesterId필터링을 위한 새로운 테스트 케이스가 잘 작성되었습니다. 기존 테스트 패턴을 따르며, mock 설정과 검증이 올바르게 구성되어 있습니다.
167-180: 기존 테스트 케이스가 올바르게 업데이트되었습니다.
semesterId를null로 전달하여 기존 동작(필터링 없음)을 테스트합니다. 이는 API의 하위 호환성을 검증합니다.src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.java (1)
42-46: LGTM!
semesterId파라미터가@RequestParam(required = false)로 올바르게 추가되었습니다. 기존jobFamily파라미터와 동일한 패턴을 따르며, API의 하위 호환성이 유지됩니다.src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.java (1)
39-43: LGTM!
AdminTempApplyController와 일관된 방식으로semesterId파라미터가 추가되었습니다. 두 컨트롤러 간의 API 일관성이 잘 유지됩니다.src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java (1)
75-79: LGTM!
eqSemesterId헬퍼 메서드가 기존eqJobFamily,eqApplyStatus메서드와 동일한 패턴으로 구현되었습니다.null처리가 올바르게 되어 있어 선택적 필터링이 정상 동작합니다.src/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.java (2)
233-273: 잘 작성된 통합 테스트입니다.두 개의 학기와 해당 리크루트를 생성하여
semesterId필터링이 올바르게 동작하는지 검증합니다. 테스트 데이터 설정이 명확하고, 결과 검증이 적절합니다.
86-86: 기존 테스트들이 올바르게 업데이트되었습니다.모든 기존 테스트에서
semesterId를null로 전달하여 필터링 없는 기존 동작을 검증합니다. 하위 호환성이 잘 유지됩니다.
Test Results253 tests 253 ✅ 9s ⏱️ Results for commit 1e7e70e. |
📊테스트 커버리지
|
fivedragon5
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다.
#️⃣연관된 이슈
close #406
📝 작업 내용
지원서 목록 조회 API에
semesterId필터링 기능을 추가했습니다.@RequestParam(required = false) final Long semesterId파라미터 추가findAppliesByStatus메서드가 semesterId를 받아 필터링 수행semesterId는 optional 파라미터로 구현되어 기존 API 호출에 영향 없음Summary by CodeRabbit
릴리스 노트
✏️ Tip: You can customize this high-level summary in your review settings.