마이그레이션 + 모델 구현 (TDD)

ID: 3236210a-1655-4763-9b1e-a219d2edfe47

높음 완료

## 작업 내용

### 1. 마이그레이션 4개 생성
1. `add_diagnosis_balance_to_user_credits` — diagnosis_balance(integer, default: 0, null: false)
2. `add_credit_type_to_credit_transactions` — credit_type(string, default: "report", null: false) + index
3. `add_referral_code_to_users` — referral_code(string) + unique index
4. `create_referrals` — id:uuid, referrer_id(uuid FK→users), referee_id(uuid FK→users, unique), status(string, default: "pending"), rewarded_at(datetime), diagnosis_session_id(uuid) + index(referrer_id, status)

### 2. 모델 변경
- **UserCredit**: diagnosis_sufficient?(amount), deduct_diagnosis!(amount, description:, diagnosis_session:), add_diagnosis!(amount, description:, payment:)
- **CreditTransaction**: credit_type validation ('report' | 'diagnosis'), transaction_type에 'referral' 추가
- **User**: before_create :generate_referral_code, has_many :referrals_given/:referrals_received, referral_code unique
- **Referral (신규)**: belongs_to referrer/referee, belongs_to diagnosis_session(optional), status validation (pending/completed/rewarded/expired), validates referee_id uniqueness

### 3. TDD
- test/models/user_credit_test.rb 확장 (diagnosis_balance 관련)
- test/models/referral_test.rb 신규
- test/fixtures/referrals.yml 신규
- 기존 user_credit_test.rb 테스트가 깨지지 않는지 확인

### 완료 기준
- 4개 마이그레이션 성공 (가역적)
- 기존 UserCredit.deduct!/add! 동작 변경 없음
- 모든 테스트 통과

첨부 이미지

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

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

담당자: developer-1
생성일: 2026년 03월 26일 05:32

활동 로그

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

    2026년 03월 26일 06:35:46

  • 팀리드 상태 변경: 할 일 → 리뷰

    2026년 03월 26일 05:40:09