Admin Payments 컨트롤러 + 라우팅 + 테스트
ID: a69975cb-8adc-450e-a1d0-c922be88b04d
## 작업 내용
Admin::PaymentsController를 생성하고, 결제 목록 조회 + 취소 기능을 구현합니다.
## 완료 기준
### 1. 라우팅 (config/routes.rb)
admin 네임스페이스에 추가:
```ruby
resources :payments, only: [:index] do
member do
post :cancel
end
end
```
### 2. Admin::PaymentsController (app/controllers/admin/payments_controller.rb)
- `Admin::BaseController` 상속
- **index 액션:**
- Payment.includes(:user).order(created_at: :desc) 로 기본 조회
- 검색: 사용자명/이메일/전화번호로 검색 (params[:search])
- 필터: 상태 (params[:status] - pending/completed/failed/canceled)
- 필터: 결제 유형 (params[:payment_type] - report/career_up/premium/analysis_credit/package/workshop/strength_diary/custom)
- 페이지네이션: PER_PAGE = 50, pagy 사용 (기존 컨트롤러들이 pagy 사용 중)
- 정렬: created_at desc (기본), amount, status
- **cancel 액션:**
- 관리자 취소 기능. 기존 Payments::CancellationService를 참고하되, 관리자는 7일 제한 없이 취소 가능해야 함
- 취소 성공 시 flash notice와 함께 리다이렉트
- 취소 실패 시 flash alert와 함께 리다이렉트
### 3. 테스트 (test/controllers/admin/payments_controller_test.rb)
- index 액션 테스트: 관리자 접근 가능, 비관리자 접근 불가
- 검색 테스트
- 필터 테스트
- cancel 액션 테스트
- 기존 테스트 패턴: test/controllers/admin/ 디렉토리의 기존 테스트 참고
### 참고 사항
- 기존 Admin::UsersController, Admin::DiagnosisSessionsController의 패턴을 따라주세요
- Payment 모델은 이미 존재합니다 (app/models/payment.rb)
- 사용자 정보: user.name, user.email_address, user.phone
- 상태 enum: pending, completed, failed, canceled
- 결제 유형 enum: report, career_up, premium, analysis_credit, package, workshop, strength_diary, custom
- pagy gem이 이미 설치되어 있습니다
- 기존 Admin::BaseController (app/controllers/admin/base_controller.rb) 상속 필수
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 리뷰 → 완료
2026년 02월 28일 07:26:26
-
Bbackend-dev 상태 변경: 진행 중 → 리뷰
2026년 02월 28일 07:24:48
-
Bbackend-dev Admin::PaymentsController + 라우팅 + 테스트 구현 완료
2026년 02월 28일 07:24:47
상세 보기
## 변경 사항
### 1. 라우팅 (config/routes.rb)
- admin 네임스페이스에 `resources :payments, only: [:index]` + `member { patch :cancel }` 추가### 2. Admin::PaymentsController (app/controllers/admin/payments_controller.rb) - 신규
- `Admin::BaseController` 상속
- **index**: `Payment.includes(user: :profile).order(created_at: :desc)`
- 검색: `params[:q]` → users.name, users.email_address, user_profiles.phone_number ILIKE 검색
- 필터: `params[:status]` (validated), `params[:payment_type]` (validated)
- 정렬: created_at, amount, status / asc, desc
- 수동 페이지네이션 (PER_PAGE=50)
- **cancel**: completed 상태 확인 + free/유료 분기
- free: 바로 `payment.cancel!`
- 유료: `ProviderResolver` → `provider.cancel` 호출 후 `payment.cancel!`
- turbo_stream / html respond_to 지원
- 에러 처리: rescue → flash alert redirect### 3. 테스트 (test/integration/admin/payments_test.rb) - 신규
- 18개 테스트 전부 통과
- 접근 제어 (2), index 조회 (1), 검색 (2), 상태 필터 (3), 유형 필터 (2), 정렬 (2), 페이지네이션 (1), 취소 (5)
- PG API 호출 mock: `define_singleton_method`로 ProviderResolver 패치### 참고
- 뷰 템플릿(index.html.erb) 및 i18n 키는 이미 존재
- 기존 admin 테스트 82개 전부 통과 확인 -
Bbackend-dev 티켓 클레임 완료
2026년 02월 28일 07:18:11