[feat] 일반 구성원 목록 조회 구현#579
Conversation
Walkthrough관리자용 일반 구성원(기수별) 목록 조회 API가 추가되었습니다. 검색 조건 DTO, 커서 페이지 응답, Querydsl 저장소, 유스케이스 검증 및 페이지 조립, 컨트롤러 엔드포인트, 관련 테스트가 함께 변경되었습니다. Changes관리자 일반 구성원 목록 조회 API
독립 테스트 정리
Estimated code review effort: 4 (Complex) | ~60 minutes Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
Test Results403 tests 403 ✅ 13s ⏱️ Results for commit 67e9608. ♻️ This comment has been updated with latest results. |
📊테스트 커버리지
|
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.java`:
- Around line 246-250: 비즈니스 예외 응답 검증에서 잘못된 JSON 경로를 사용하고 있습니다;
AdminMemberSemesterControllerTest의 mockMvc assertion을 `$.status` 대신 `$.code`로
바꿔서 MemberErrorCode.REQUIRED_SEMESTER_FOR_TEAM_FILTER.getCode()가 실제 에러 코드 필드에
매핑되는지 확인하세요.
- Around line 191-199: Update the AdminMemberSemesterControllerTest expectation
for the `/admin/members/semester` response so `nextCursor` is asserted as null
instead of absent; the current JSON serialization from the controller returns
`nextCursor: null`, so adjust the assertion in the test case that checks
`jsonPath("$.data.nextCursor")` accordingly.
In
`@src/test/java/org/ject/support/domain/recruit/controller/QuestionControllerTest.java`:
- Line 64: The email suffix generation in QuestionControllerTest is too short
and can collide under fast or parallel test runs. Update the uniqueSuffix
handling used in the affected test setup/assertion paths (including the
duplicate spot) to use a lower-collision identifier such as a UUID-derived
fragment or other random base36 value instead of the last 6 digits of
System.nanoTime(). Keep the existing email format logic, but replace the
truncation approach in the test helper/inline usage so each generated email is
much less likely to repeat.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: a8a0f8a6-9a4b-4b40-92e0-5c80bb9135be
📒 Files selected for processing (18)
src/main/java/org/ject/support/admin/member/controller/AdminMemberSemesterApiSpec.javasrc/main/java/org/ject/support/admin/member/controller/AdminMemberSemesterController.javasrc/main/java/org/ject/support/admin/member/dto/projection/SearchMemberSemesterProjection.javasrc/main/java/org/ject/support/admin/member/dto/request/MemberSemesterSearchCondition.javasrc/main/java/org/ject/support/admin/member/dto/response/SearchMemberSemesterResponse.javasrc/main/java/org/ject/support/admin/member/dto/result/SearchMemberSemesterPageResult.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberActivityService.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberUseCase.javasrc/main/java/org/ject/support/common/response/CursorPageResponse.javasrc/main/java/org/ject/support/domain/member/exception/MemberErrorCode.javasrc/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepository.javasrc/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepositoryImpl.javasrc/main/java/org/ject/support/domain/member/repository/MemberActivityRepository.javasrc/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberActivityServiceTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberUseCaseTest.javasrc/test/java/org/ject/support/domain/member/repository/MemberActivityRepositoryTest.javasrc/test/java/org/ject/support/domain/recruit/controller/QuestionControllerTest.java
b2e4eb2 to
2a4f05b
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/test/java/org/ject/support/domain/member/ActivityStatusTest.java (1)
10-81: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
isAllAvailableFor의 null/빈 리스트 분기 테스트 추가 고려.현재 테스트는 상태 매트릭스를 잘 검증하지만,
statuses가null이거나 비어 있을 때true를 반환하는 조기 반환 분기는 검증되지 않습니다. 필터 미지정 시 동작을 보장하기 위해 해당 케이스 추가를 권장합니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/test/java/org/ject/support/domain/member/ActivityStatusTest.java` around lines 10 - 81, ActivityStatusTest currently covers only populated status combinations, so the null/empty early-return behavior in ActivityStatus.isAllAvailableFor is unverified. Add focused tests in ActivityStatusTest for a null statuses input and an empty list, asserting true for both MemberType.SEMESTER and the other member types as applicable. Use the existing isAllAvailableFor method and MemberType enum to place the new cases alongside the current matrix tests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/test/java/org/ject/support/domain/member/ActivityStatusTest.java`:
- Around line 10-81: ActivityStatusTest currently covers only populated status
combinations, so the null/empty early-return behavior in
ActivityStatus.isAllAvailableFor is unverified. Add focused tests in
ActivityStatusTest for a null statuses input and an empty list, asserting true
for both MemberType.SEMESTER and the other member types as applicable. Use the
existing isAllAvailableFor method and MemberType enum to place the new cases
alongside the current matrix tests.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 78c908b8-85c4-439a-9888-335c5be7458e
📒 Files selected for processing (14)
src/main/java/org/ject/support/admin/member/dto/projection/SearchMemberSemesterProjection.javasrc/main/java/org/ject/support/admin/member/dto/request/MemberSemesterSearchCondition.javasrc/main/java/org/ject/support/admin/member/dto/response/SearchMemberSemesterResponse.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberUseCase.javasrc/main/java/org/ject/support/domain/member/ActivityStatus.javasrc/main/java/org/ject/support/domain/member/entity/MemberActivity.javasrc/main/java/org/ject/support/domain/member/exception/MemberErrorCode.javasrc/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepositoryImpl.javasrc/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberActivityServiceTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberUseCaseTest.javasrc/test/java/org/ject/support/domain/member/ActivityStatusTest.javasrc/test/java/org/ject/support/domain/member/fixture/SemesterActivityFixture.javasrc/test/java/org/ject/support/domain/member/repository/MemberActivityRepositoryTest.java
🚧 Files skipped from review as they are similar to previous changes (7)
- src/main/java/org/ject/support/admin/member/dto/request/MemberSemesterSearchCondition.java
- src/test/java/org/ject/support/admin/member/service/AdminMemberUseCaseTest.java
- src/test/java/org/ject/support/admin/member/service/AdminMemberActivityServiceTest.java
- src/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepositoryImpl.java
- src/test/java/org/ject/support/domain/member/repository/MemberActivityRepositoryTest.java
- src/main/java/org/ject/support/admin/member/service/AdminMemberUseCase.java
- src/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.java
8670e82 to
5445e95
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/test/java/org/ject/support/domain/member/entity/MemberActivityTest.java (1)
92-95: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value타입 안전한
errorCode추출 고려
.extracting("errorCode")는 문자열 기반 리플렉션 추출이라 필드/getter 이름이 바뀌어도 컴파일 타임에 감지되지 않습니다.extracting(t -> ((MemberException) t).getErrorCode())형태의 함수형 추출을 사용하면 리팩터링 시 안전성이 높아집니다. 다만 기존 테스트 스위트에 동일 패턴이 이미 관례적으로 쓰였을 수 있어 필수는 아닙니다.♻️ 제안
assertThat(throwable) .isInstanceOf(MemberException.class) - .extracting("errorCode") + .extracting(t -> ((MemberException) t).getErrorCode()) .isEqualTo(MemberErrorCode.INVALID_ACTIVITY_STATUS);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/test/java/org/ject/support/domain/member/entity/MemberActivityTest.java` around lines 92 - 95, The assertion in MemberActivityTest uses string-based extracting("errorCode"), which is brittle against refactors. Update the throwable assertion to use a type-safe lambda-based extraction on MemberException, referencing getErrorCode() instead of the reflective field name, while keeping the existing instance-of and equality checks intact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/test/java/org/ject/support/domain/member/entity/MemberActivityTest.java`:
- Around line 92-95: The assertion in MemberActivityTest uses string-based
extracting("errorCode"), which is brittle against refactors. Update the
throwable assertion to use a type-safe lambda-based extraction on
MemberException, referencing getErrorCode() instead of the reflective field
name, while keeping the existing instance-of and equality checks intact.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: c3ae946c-8914-4af3-bb41-670774104dbe
📒 Files selected for processing (18)
src/main/java/org/ject/support/admin/member/controller/AdminMemberSemesterController.javasrc/main/java/org/ject/support/admin/member/dto/projection/SearchMemberSemesterProjection.javasrc/main/java/org/ject/support/admin/member/dto/request/MemberSemesterSearchCondition.javasrc/main/java/org/ject/support/admin/member/dto/response/SearchMemberSemesterResponse.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberActivityService.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberService.javasrc/main/java/org/ject/support/admin/member/service/AdminMemberUseCase.javasrc/main/java/org/ject/support/domain/member/ActivityStatus.javasrc/main/java/org/ject/support/domain/member/entity/MemberActivity.javasrc/main/java/org/ject/support/domain/member/exception/MemberErrorCode.javasrc/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepositoryImpl.javasrc/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberActivityServiceTest.javasrc/test/java/org/ject/support/admin/member/service/AdminMemberUseCaseTest.javasrc/test/java/org/ject/support/domain/member/ActivityStatusTest.javasrc/test/java/org/ject/support/domain/member/entity/MemberActivityTest.javasrc/test/java/org/ject/support/domain/member/fixture/SemesterActivityFixture.javasrc/test/java/org/ject/support/domain/member/repository/MemberActivityRepositoryTest.java
✅ Files skipped from review due to trivial changes (3)
- src/main/java/org/ject/support/admin/member/dto/projection/SearchMemberSemesterProjection.java
- src/main/java/org/ject/support/admin/member/service/AdminMemberService.java
- src/test/java/org/ject/support/domain/member/ActivityStatusTest.java
🚧 Files skipped from review as they are similar to previous changes (14)
- src/main/java/org/ject/support/domain/member/entity/MemberActivity.java
- src/main/java/org/ject/support/admin/member/dto/request/MemberSemesterSearchCondition.java
- src/main/java/org/ject/support/admin/member/dto/response/SearchMemberSemesterResponse.java
- src/main/java/org/ject/support/admin/member/service/AdminMemberActivityService.java
- src/main/java/org/ject/support/admin/member/controller/AdminMemberSemesterController.java
- src/test/java/org/ject/support/admin/member/service/AdminMemberActivityServiceTest.java
- src/test/java/org/ject/support/domain/member/fixture/SemesterActivityFixture.java
- src/test/java/org/ject/support/admin/member/service/AdminMemberUseCaseTest.java
- src/main/java/org/ject/support/domain/member/exception/MemberErrorCode.java
- src/main/java/org/ject/support/admin/member/service/AdminMemberUseCase.java
- src/main/java/org/ject/support/domain/member/repository/MemberActivityQueryRepositoryImpl.java
- src/test/java/org/ject/support/admin/member/controller/AdminMemberSemesterControllerTest.java
- src/test/java/org/ject/support/domain/member/repository/MemberActivityRepositoryTest.java
- src/main/java/org/ject/support/domain/member/ActivityStatus.java
* [feat] 일반 구성원 목록 조회 응답 구조 추가 * [feat] 일반 구성원 목록 조회 QueryDSL 추가 * [feat] 일반 구성원 목록 조회 API 추가 * [test] 일반 구성원 목록 조회 Controller, Service, Repository 테스트 추가 * [fix] 이메일 길이로 실패하던 Question 통합테스트 수정 * [fix] Controller 테스트 실패 케이스에서 cursor 검증 수정, unique email 생성 로직 수정 * [fix] redis 컨테이너 종료로 인한 테스트 실패 조치 * [feat] 활동 상태 필터 추가 * [comment] 주석 통합 및 정리
* [feat] 일반 구성원 목록 조회 응답 구조 추가 * [feat] 일반 구성원 목록 조회 QueryDSL 추가 * [feat] 일반 구성원 목록 조회 API 추가 * [test] 일반 구성원 목록 조회 Controller, Service, Repository 테스트 추가 * [fix] 이메일 길이로 실패하던 Question 통합테스트 수정 * [fix] Controller 테스트 실패 케이스에서 cursor 검증 수정, unique email 생성 로직 수정 * [fix] redis 컨테이너 종료로 인한 테스트 실패 조치 * [feat] 활동 상태 필터 추가 * [comment] 주석 통합 및 정리
관련이슈
close #516
작업 내용
테스트
참고
Summary by CodeRabbit
Summary by CodeRabbit
New Features
더보기여부, 다음 커서, 전체 개수까지 함께 제공됩니다.Bug Fixes