할인코드 어드민 CRUD + UI

ID: 6e2bd6bb-51c5-45d0-9f3b-62b34cd1f5c0

높음 완료

## 목표
어드민 패널에 할인코드 관리 기능 구현 (CRUD + 토글)

## 작업 내용

### 1. 라우트 (config/routes.rb)
```ruby
# admin 네임스페이스 안에 추가
resources :discount_codes, except: :destroy do
member do
patch :toggle_active
end
end
```

### 2. 컨트롤러 (app/controllers/admin/discount_codes_controller.rb)
- Admin::BaseController 상속
- 기존 Admin::ProductsController 패턴 따름
- 액션: index, show, new, create, edit, update, toggle_active
- Index: 검색(name, code), 필터(discount_type, active), 정렬, 페이지네이션
- PER_PAGE = 30

### 3. 뷰 (app/views/admin/discount_codes/)
- index.html.erb: 테이블 (이름, 코드, 유형, 값, 적용상품, 사용횟수/최대, 만료일, 활성화, 액션)
- show.html.erb: 상세 정보 + 적용 상품 목록 + 사용 내역
- _form.html.erb: 생성/수정 공통 폼
- 이름 (text)
- 코드 (text, 자동생성 안내)
- 할인 유형 (select: percentage/fixed_amount)
- 할인값 (number)
- 전체 적용 (checkbox)
- 적용 상품 (multi-select, applies_to_all이 false일 때만)
- 최대 사용횟수 (number, optional)
- 최소 구매금액 (number)
- 만료일 (datetime)
- 활성화 (checkbox)
- new.html.erb, edit.html.erb: form 렌더

### 4. 사이드바 (app/views/admin/shared/_sidebar.html.erb)
- "Payments" 아래에 "Discount Codes" 메뉴 추가
- 아이콘: heroicon 'tag' 또는 유사

### 5. 로케일 (config/locales/*.yml)
- en.yml, ko.yml, zh.yml, vi.yml에 admin.discount_codes 섹션 추가
- 기존 admin.products 패턴 참고

### 6. Tailwind CSS 스타일
- 기존 어드민 뷰 (payments, products) 스타일과 일관성 유지
- auto_submit_controller 사용 (검색/필터)

### 7. 테스트 (test/integration/admin/discount_codes_test.rb)
- 접근 제어 (일반 사용자 차단)
- Index (기본 조회, 검색, 필터, 정렬, 페이지네이션)
- Create (성공, 실패)
- Update (성공, 실패)
- Toggle active
- Show

## ⚠️ 의존성
- model-dev가 DiscountCode 모델과 마이그레이션을 완료해야 함
- 마이그레이션이 아직 없으면 먼저 `bin/rails db:migrate` 실행 후 작업
- 모델이 없으면 모델 파일이 생길 때까지 컨트롤러/뷰부터 작성

## 파일 담당 범위 (이 파일들만 수정)
- app/controllers/admin/discount_codes_controller.rb (신규)
- app/views/admin/discount_codes/* (신규)
- app/views/admin/shared/_sidebar.html.erb (수정)
- config/routes.rb (수정 - admin 블록 안에 추가)
- config/locales/en.yml, ko.yml, zh.yml, vi.yml (수정 - admin.discount_codes 추가)
- test/integration/admin/discount_codes_test.rb (신규)

## 완료 기준
- 어드민에서 할인코드 CRUD 가능
- 사이드바에 메뉴 표시
- 4개 로케일 파일 업데이트
- 통합 테스트 통과

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: admin-dev
생성일: 2026년 02월 28일 13:20

활동 로그

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 02월 28일 13:37:39

  • A
    admin-dev 상태 변경: 진행 중 → 리뷰

    2026년 02월 28일 13:32:12

  • A
    admin-dev 어드민 할인코드 CRUD 구현 완료 - 전체 테스트 통과

    2026년 02월 28일 13:32:12

    상세 보기

    ## 구현 완료 내역

    ### 생성된 파일
    - `app/controllers/admin/discount_codes_controller.rb` - CRUD + toggle_active (7 actions)
    - `app/views/admin/discount_codes/index.html.erb` - 검색/필터/정렬/페이지네이션
    - `app/views/admin/discount_codes/show.html.erb` - 상세 뷰 (적용 상품, 최근 결제)
    - `app/views/admin/discount_codes/_form.html.erb` - 생성/수정 폼
    - `app/views/admin/discount_codes/new.html.erb` - 신규 생성
    - `app/views/admin/discount_codes/edit.html.erb` - 수정
    - `test/integration/admin/discount_codes_test.rb` - 25개 통합 테스트

    ### 수정된 파일
    - `config/routes.rb` - admin 네임스페이스에 discount_codes 리소스 추가
    - `app/views/admin/shared/_sidebar.html.erb` - 할인코드 네비 아이템 추가
    - `app/views/admin/shared/_nav_item.html.erb` - discount_codes 아이콘 추가
    - `config/locales/en.yml` - 영어 번역 추가
    - `config/locales/ko.yml` - 한국어 번역 추가
    - `config/locales/zh.yml` - 중국어 번역 추가
    - `config/locales/vi.yml` - 베트남어 번역 추가

    ### 테스트 결과
    - 할인코드 테스트: 25 runs, 48 assertions, 0 failures, 0 errors
    - 전체 테스트: 736 runs, 1876 assertions, 0 failures, 0 errors

    ### 구현 기능
    - 접근 제어 (admin only)
    - 목록 (검색/필터/정렬/페이지네이션)
    - 상세 조회 (적용 상품, 최근 결제 내역)
    - 생성 (코드 자동생성, 상품 선택)
    - 수정
    - 활성/비활성 토글

  • A
    admin-dev 어드민 CRUD 구현 시작

    2026년 02월 28일 13:23:16

    상세 보기

    기존 어드민 패턴(컨트롤러, 뷰, 라우트, 로케일) 분석 시작

  • A
    admin-dev 티켓 클레임 완료

    2026년 02월 28일 13:23:14