Skip to content

#407 [Feat] 어드민 유저 검색 API 추가 - #408

Merged
si-zero merged 5 commits into
devfrom
feat/#407
Aug 26, 2026
Merged

#407 [Feat] 어드민 유저 검색 API 추가#408
si-zero merged 5 commits into
devfrom
feat/#407

Conversation

@si-zero

@si-zero si-zero commented Aug 26, 2026

Copy link
Copy Markdown
Member

#️⃣ 연관된 이슈

📝 작업 내용

✨ Feat

내용 파일
닉네임/유저태그 검색 저장소 메서드 추가 UserRepository.java
이메일(소셜 로그인) 검색 저장소 메서드 추가 UserSocialAccountRepository.java
검색 응답 DTO 추가 AdminUserSummaryResponse.java, AdminUserSearchResponse.java
유저 검색 서비스 로직 추가 AdminUserService.java
유저 검색 API 엔드포인트 추가 AdminUserController.java

📚 Docs

내용 파일
어드민 유저 검색 API 명세 추가 docs/api-specs/user-api.md

📌 공유 사항

  1. GET /api/v1/admin/users/search?keyword=로 닉네임/유저태그/이메일 통합 검색 가능합니다. 어드민 페이지에서 유저별 테스트 알림 발송 시 userId를 찾는 용도로 사용할 수 있습니다.
  2. 로컬 로그인 유저는 이메일 필드가 없어 닉네임/유저태그로만 검색됩니다 (스키마상 제약).
  3. 닉네임/유저태그 매칭과 이메일 매칭은 서로 다른 테이블(users / user_social_accounts) 조회 결과라 애플리케이션 레벨에서 병합 후 페이징합니다.

✅ 체크리스트

  • Reviewer에 팀원들을 선택했나요?
  • Assignees에 본인을 선택했나요?
  • 컨벤션에 맞는 Type을 선택했나요?
  • Development에 이슈를 연동했나요?
  • Merge 하려는 브랜치가 올바르게 설정되어 있나요?
  • 컨벤션을 지키고 있나요?
  • 로컬에서 실행했을 때 에러가 발생하지 않나요?
  • 팀원들에게 PR 링크 공유를 했나요?

📸 스크린샷

./gradlew test 전체 통과. AdminUserServiceTest 3케이스(닉네임/태그 매칭, 이메일 매칭, 로컬 로그인 유저) 추가.

💬 리뷰 요구사항

  1. 닉네임/유저태그 매칭 쪽만 DB 페이징(Slice)을 타고, 이메일 매칭은 애플리케이션 레벨에서 병합하는 구조라 hasNext 판단이 완전히 정확하진 않습니다(대략치). 어드민 내부 도구 특성상 감안 가능한 수준인지 의견 부탁드립니다.

@si-zero si-zero self-assigned this Aug 26, 2026
@si-zero si-zero added the ✨ Feat (기능 추가) 새로운 기능을 추가할 때 사용합니다. label Aug 26, 2026
@si-zero si-zero linked an issue Aug 26, 2026 that may be closed by this pull request
2 tasks
@si-zero
si-zero merged commit 0b9a374 into dev Aug 26, 2026
1 check passed
@si-zero
si-zero deleted the feat/#407 branch August 26, 2026 07:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feat (기능 추가) 새로운 기능을 추가할 때 사용합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ Feat: 어드민 유저 검색 API 추가

1 participant