# v1.6.0 - 推荐奖励系统

## 推荐模型

```sql
CREATE TABLE referrals (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    referrer_id BIGINT NOT NULL,
    referred_id BIGINT NOT NULL,
    status ENUM('pending', 'completed') DEFAULT 'pending',
    reward_amount DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_referred (referred_id)
);
```

## 推荐码生成

```go
func GenerateReferralCode(userID int64) string {
    // 生成短码如: ABC123
    code := base36Encode(userID) + randomString(3)
    return strings.ToUpper(code)
}

func (s *SubscriptionManager) ApplyReferral(ctx context.Context, referredID int64, code string) error {
    referrerID := s.decodeReferralCode(code)
    
    // 创建推荐关系
    s.dao.CreateReferral(ctx, &Referral{
        ReferrerID: referrerID,
        ReferredID: referredID,
        Status:     "pending",
    })
    
    return nil
}

func (s *SubscriptionManager) RewardReferrer(ctx context.Context, referredID int64) error {
    referral, _ := s.dao.GetReferralByReferred(ctx, referredID)
    
    if referral.Status == "pending" {
        // 给推荐人奖励（如：一个月免费）
        s.extendSubscription(referral.ReferrerID, 30*24*time.Hour)
        
        // 标记为已完成
        s.dao.UpdateReferralStatus(ctx, referral.ID, "completed")
    }
    
    return nil
}
```
