Skip to content

feat: Admin 기능 구현 (가입 승인/반려/정지/탈퇴, 게시글/댓글 삭제) - #7

Open
Je-hye wants to merge 3 commits into
developsfrom
eunhye/feature/admin-v2
Open

feat: Admin 기능 구현 (가입 승인/반려/정지/탈퇴, 게시글/댓글 삭제)#7
Je-hye wants to merge 3 commits into
developsfrom
eunhye/feature/admin-v2

Conversation

@Je-hye

@Je-hye Je-hye commented May 24, 2026

Copy link
Copy Markdown
Contributor

PR #6을 revert 후 팀 리뷰를 위해 재오픈한 PR입니다.

구현 내용

Admin API 8개 전체 구현 (TDD 적용).

  • GET /api/admin/users/pending — 가입 대기 회원 목록 (페이지네이션)
  • GET /api/admin/users/{userId} — 회원 상세 조회 (postCount, commentCount 포함)
  • PATCH /api/admin/users/{userId}/approve — 가입 승인
  • PATCH /api/admin/users/{userId}/reject — 가입 반려 (사유 저장)
  • DELETE /api/admin/posts/{postId} — 게시글 소프트 삭제
  • DELETE /api/admin/comments/{commentId} — 댓글 소프트 삭제
  • PATCH /api/admin/users/{userId}/ban — 회원 정지 (7일 고정, UserSanction 이력 저장)
  • DELETE /api/admin/users/{userId} — 강제 탈퇴 (UserSanction FORCE_WITHDRAW 이력 저장)

포함된 공통 인프라

아직 다른 브랜치에 merge 안 된 공통 코드가 포함되어 있어요. 중복 충돌 주의:

  • common/dto/ApiResponse.java — 공통 응답 래퍼
  • common/exception/CustomException.java, ErrorCode.java, GlobalExceptionHandler.java
  • config/JpaConfig.java@EnableJpaAuditing 분리 (@WebMvcTest 충돌 방지)
  • domain/user/repository/ 추가 — AdminRepository, UserRejectionRepository, UserSanctionRepository
  • domain/post/repository/ 추가 — PostRepository, CommentRepository

설계 결정 사항 (팀 논의 필요)

  • 응답 래퍼: admin은 ApiResponse<T> 사용, auth는 raw DTO 반환 — 팀 전체 통일 방향 논의 필요
  • 강제 탈퇴 상태: UserStatusWITHDRAWN 없어서 BANNED 상태로 저장, user_sanctions에서 FORCE_WITHDRAW 타입으로 구분 — ERD 확인 필요

테스트

  • AdminControllerTest@WebMvcTest 슬라이스 테스트 (MockMvc)
  • AdminServiceTest@ExtendWith(MockitoExtension) 단위 테스트
  • 전체 테스트 52개 통과 ✅

Test Plan

  • JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.18/libexec/openjdk.jdk/Contents/Home ./gradlew test
  • POST /api/auth-test/create-admin 으로 어드민 계정 생성 후 JWT 발급
  • Admin API 정상 응답 확인

🤖 Generated with Claude Code

Je-hye and others added 3 commits May 24, 2026 20:45
각 어노테이션(@transactional, @PathVariable, @RequestBody 등)과
JPA Dirty Checking, 소프트 삭제, SecurityUtil 동작 원리 설명 포함.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
DTO(record, @notblank), Repository(Query Method 명명 규칙),
공통 인프라(ApiResponse, ErrorCode, GlobalExceptionHandler, JpaConfig) 포함.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant