Skip to content

Conversation

@023-dev
Copy link
Member

@023-dev 023-dev commented Jan 6, 2026

#️⃣연관된 이슈

close #406

📝 작업 내용

지원서 목록 조회 API에 semesterId 필터링 기능을 추가했습니다.

  • 컨트롤러에 @RequestParam(required = false) final Long semesterId 파라미터 추가
  • 서비스 레이어에서 Repository로 semesterId 전달하도록 구현
  • Repository의 findAppliesByStatus 메서드가 semesterId를 받아 필터링 수행
  • semesterId는 optional 파라미터로 구현되어 기존 API 호출에 영향 없음

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 지원서 조회 시 학기별 필터링 옵션 추가
      • 임시 저장 지원서 조회에 학기 필터 지원
      • 제출된 지원서 조회에 학기 필터 지원

✏️ Tip: You can customize this high-level summary in your review settings.

@023-dev 023-dev self-assigned this Jan 6, 2026
@023-dev 023-dev linked an issue Jan 6, 2026 that may be closed by this pull request
@023-dev 023-dev added ✨feature 구현, 개선 사항 관련 부분 👨🏻‍💻backend 백엔드 작업 labels Jan 6, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 6, 2026

Walkthrough

semesterId 매개변수를 API 엔드포인트, 서비스 계층, 저장소 계층에 걸쳐 추가하여 임시 저장 및 제출된 지원서 조회 시 학기별 필터링 기능을 확장합니다. 기존 매개변수와 제어 흐름은 변경되지 않습니다.

Changes

Cohort / File(s) 변경 사항
API 컨트롤러
src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.java, src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.java
메서드 시그니처에 선택적 @RequestParam(required = false) final Long semesterId 매개변수 추가; 서비스 호출 시 semesterId 인자 전달
API 스펙
src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.java, src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.java
메서드 시그니처에 선택적 @RequestParam(required = false) final Long semesterId 매개변수 추가
서비스 계층
src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java, src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java
메서드 시그니처에 Long semesterId 매개변수 추가; 저장소 메서드 호출 시 semesterId 전달
저장소 인터페이스
src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.java
findAppliesByStatus 메서드 시그니처에 final Long semesterId 매개변수 추가
저장소 구현
src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java
메서드 시그니처에 final Long semesterId 매개변수 추가; eqSemesterId(Long) 헬퍼 메서드 추가; WHERE 절에 eqSemesterId(semesterId) 조건 적용
테스트
src/test/java/org/ject/support/domain/admin/service/AdminTempApplyServiceTest.java, src/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.java, src/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.java
기존 테스트의 메서드 호출에 semesterId 매개변수 추가; semesterId 필터링 동작을 검증하는 새로운 테스트 추가

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 한 번의 새 매개변수로,
학기를 걸러내는 마법이 펼쳐지네!
쌓인 지원서들을 분류하며,
컨트롤러부터 저장소까지 춤을 춘다네,
체계적인 변화, 반복되는 패턴이 아름답구나! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 핵심 변경 사항을 명확하게 설명합니다. '관리자 지원서 조회 API에 기수 파라미터 추가'는 변경 내용의 주요 포인트를 잘 요약하고 있습니다.
Linked Issues check ✅ Passed PR이 이슈 #406의 모든 코딩 요구사항을 충족합니다. 관리자 지원서 조회 API에 기수 파라미터(semesterId)를 추가했고, 양 엔드포인트(AdminTempApplyController, SubmittedApplyController)를 모두 업데이트했습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 이슈 #406의 범위 내에 있습니다. semesterId 필터 추가와 관련된 컨트롤러, 서비스, 리포지토리, 테스트 변경만 포함되어 있습니다.
✨ Finishing touches
  • 📝 Generate docstrings

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 8e63b2e and 1e7e70e.

📒 Files selected for processing (11)
  • src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.java
  • src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.java
  • src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.java
  • src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.java
  • src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java
  • src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java
  • src/test/java/org/ject/support/domain/admin/service/AdminTempApplyServiceTest.java
  • src/test/java/org/ject/support/domain/admin/service/SubmittedApplyServiceTest.java
  • src/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.java
  • src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.java
  • src/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.java
  • src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java
  • src/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.java
  • src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepository.java
  • src/test/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryTest.java
  • src/main/java/org/ject/support/domain/admin/service/SubmittedApplyService.java
  • src/main/java/org/ject/support/domain/apply/repository/ApplyQueryRepositoryImpl.java
  • src/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.java
  • src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyApiSpec.java
  • src/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 파라미터가 statuspageable 사이에 논리적으로 배치되었으며, 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: 기존 테스트 케이스가 올바르게 업데이트되었습니다.

semesterIdnull로 전달하여 기존 동작(필터링 없음)을 테스트합니다. 이는 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: 기존 테스트들이 올바르게 업데이트되었습니다.

모든 기존 테스트에서 semesterIdnull로 전달하여 필터링 없는 기존 동작을 검증합니다. 하위 호환성이 잘 유지됩니다.

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

Test Results

253 tests   253 ✅  9s ⏱️
 55 suites    0 💤
 55 files      0 ❌

Results for commit 1e7e70e.

@github-actions
Copy link

github-actions bot commented Jan 6, 2026

📊테스트 커버리지

Overall Project 79.33% 🍏
Files changed 100% 🍏

File Coverage
ApplyQueryRepositoryImpl.java 100% 🍏
AdminTempApplyService.java 100% 🍏
SubmittedApplyService.java 100% 🍏

@fivedragon5 fivedragon5 self-requested a review January 7, 2026 07:04
Copy link
Member

@fivedragon5 fivedragon5 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다.

@023-dev 023-dev merged commit 4f50d17 into dev Jan 7, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

👨🏻‍💻backend 백엔드 작업 ✨feature 구현, 개선 사항 관련 부분

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 관리자 지원서 조회 API에 기수 파라미터 추가

3 participants