백로그
0할 일
0진행 중
0리뷰
0완료 (전체)
1Referrals::TrackingService + RewardService TDD 구현
## 작업 내용 ### 1. Referrals::TrackingService (`app/services/referrals/tracking_service.rb`) 신규 가입 시 referral_code로 Referral(pending) 생성. ```ruby module Referrals class TrackingService def self.call(referee:, referral_code:) # 1. referral_code로 referrer 찾기 # 2. 자기 자신 추천 방지 (referrer == referee → skip) # 3. referee에 이미 referral 있으면 무시 # 4. Referral.create!(referrer:, referee:, status: "pending") end end end ``` ### 2. Referrals::RewardService (`app/services/referrals/reward_service.rb`) 강점 진단 완료 시 리퍼럴 보상 지급. ```ruby module Referrals class RewardService def self.call(diagnosis_session:) # 1. diagnosis_session.user의 pending referral 확인 # 2. 진단이 strength 카테고리인지 확인 (strength가 아니면 skip) # 3. referrer의 월간 보상 카운트 확인 (>= 10이면 skip) # 4. referral.update!(status: "rewarded", rewarded_at: Time.current, diagnosis_session:) # 5. referrer의 credit.add_diagnosis!(1, description: "추천 보상 (#{referee.name})") end end end ``` ### 3. TDD **test/services/referrals/tracking_service_test.rb**: - 정상: referral_code로 Referral(pending) 생성 - 자기 추천: referrer == referee → Referral 생성 안 함 - 이미 추천인 있음: referee에 referral 존재 → 무시 - 잘못된 코드: 존재하지 않는 referral_code → 무시 - nil 파라미터 처리 **test/services/referrals/reward_service_test.rb**: - 정상: strength 진단 완료 → referrer diagnosis_balance +1, status=rewarded - strength 아닌 진단: big5 완료 → 보상 안 함 - 월 10개 초과: 11번째 → 보상 안 함 - pending referral 없음: → 아무것도 안 함 - 이미 rewarded: → 중복 보상 안 함 - referrer 크레딧 없음: ensure_credit! 후 +1 ## 완료 기준 - TrackingService: 정상 생성, 자기추천 방지, 중복 방지 - RewardService: 보상 지급, 월 10개 상한, 중복 방지 - 모든 테스트 통과