[리퍼럴 PR1] DB 레이어 — 크레딧 확장 + Referral 테이블

ID: 2b4ebfa8-5102-47d8-ac38-de03910fc0f8

높음 완료

## 설명
진단 크레딧 + 리퍼럴 보상 시스템의 DB 기반 구축.

### 마이그레이션
1. `add_diagnosis_balance_to_user_credits` — diagnosis_balance(integer, default: 0)
2. `add_credit_type_to_credit_transactions` — credit_type(string, default: "report")
3. `add_referral_code_to_users` — referral_code(string, unique index)
4. `create_referrals` — referrer_id, referee_id, status, rewarded_at, diagnosis_session_id

### 모델 변경
- `UserCredit`: diagnosis_balance 관련 메서드 (deduct_diagnosis!, add_diagnosis!, diagnosis_sufficient?)
- `CreditTransaction`: credit_type validation ('report' | 'diagnosis'), transaction_type에 'referral' 추가
- `User`: referral_code 생성, has_many :referrals_given/received
- `Referral` (신규): belongs_to referrer/referee, status 관리

## 완료 기준
- [ ] 4개 마이그레이션 성공 (가역적)
- [ ] UserCredit diagnosis_balance 메서드 동작 (deduct/add/sufficient)
- [ ] Referral 모델 CRUD + 유효성 검증 (중복 방지)
- [ ] 기존 UserCredit.deduct!/add! 동작 변경 없음
- [ ] 테스트 통과

## 의존성
없음 (첫 번째 PR)

첨부 이미지

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

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

담당자: 팀리드
생성일: 2026년 03월 26일 05:27

활동 로그

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

    2026년 03월 26일 06:35:31

  • 팀리드 팀 작업 완료 - [리퍼럴 PR1] DB 레이어

    2026년 03월 26일 05:40:26

    상세 보기

    ## 수정된 기능
    - UserCredit에 diagnosis_balance 컬럼 추가 (진단 크레딧)
    - CreditTransaction에 credit_type 컬럼 추가 (report/diagnosis 구분)
    - User에 referral_code 컬럼 추가 (공유 URL용)
    - Referral 모델 신규 생성 (리퍼럴 추적)

    ## 테스트 결과
    - 57 runs, 103 assertions, 0 failures (관련 테스트)
    - 기존 테스트 영향 없음

    ## 마이그레이션
    - 4개 모두 가역적, rollback 검증 완료

    ## 남은 이슈
    - 기존 유저의 referral_code는 nil (필요 시 별도 마이그레이션으로 채울 수 있음)

  • 팀리드 상태 변경: 진행 중 → 리뷰

    2026년 03월 26일 05:40:21

  • 팀리드 위임: developer-1에게 '마이그레이션 + 모델 구현 (TDD)' 작업 배정

    2026년 03월 26일 05:32:33

  • 팀리드 작업 시작 - [리퍼럴 PR1] DB 레이어

    2026년 03월 26일 05:32:16

    상세 보기

    ## 작업 계획
    - 목표: 진단 크레딧 + 리퍼럴 보상 시스템의 DB 기반 구축
    - 접근 방식: 마이그레이션 4개 + 모델 변경/생성을 developer-1에게 위임, QA 검증 후 완료

    ## 현재 상태
    - 보드 현황: backlog 8 / todo 11 / in_progress 1 / review 4 / done 147
    - 관련 기존 작업: UserCredit, CreditTransaction 모델 기존 존재

  • 팀리드 티켓 클레임 완료

    2026년 03월 26일 05:32:08

  • 팀리드 기능 계획 수립 - 공유 리퍼럴 크레딧 시스템

    2026년 03월 26일 05:28:42

    상세 보기

    ## 기능 개요
    - 카카오톡/링크 공유로 유입된 신규 회원이 강점 진단 완료 시 공유자에게 진단 크레딧 +1 보상
    - 진단 크레딧으로 Big5/성장 마인드셋/행복도 진단 가능 (1크레딧=1검사)
    - 진단 크레딧 개인 구매 가능 (3,000원/개)
    - 리포트 크레딧(기존 18,000원)과 분리 운영

    ## 분석 결과
    - 영향 범위: UserCredit, CreditTransaction, User, DiagnosisSession, 결제 플로우
    - 기존 패턴: ReportPurchaseService, CreditPurchaseService(워크스페이스), share_token 공유

    ## 생성된 티켓
    - [리퍼럴 PR1] DB 레이어 (priority: high)
    - [리퍼럴 PR2] 비즈니스 로직 (priority: high)
    - [리퍼럴 PR3] 컨트롤러 (priority: high)
    - [리퍼럴 PR4] 진단 크레딧 구매 (priority: medium)
    - [리퍼럴 PR5] 뷰/UI (priority: medium)

    ## 핵심 설계 결정
    - UserCredit에 diagnosis_balance 컬럼 추가 (별도 모델 X)
    - Referral 모델 신규 생성 (referrer/referee 추적)
    - 공유 URL에 ?ref=referral_code 파라미터
    - 월 10개 보상 상한, 1인 1추천인

  • 팀리드 상태 변경: 할 일 → 백로그

    2026년 03월 26일 05:28:17