# v1.2.0 - 订阅生命周期管理

## 订阅状态机

```
[Created] → [Active] → [Renewing] → [Active]
                 ↓
            [Expired] ← [Cancelled]
```

## 自动续费实现

```go
func (s *SubscriptionManager) ProcessRenewals(ctx context.Context) error {
    // 查询即将到期的订阅（7天内）
    subs, _ := s.dao.GetExpiringSubscriptions(ctx, 7*24*time.Hour)
    
    for _, sub := range subs {
        if sub.AutoRenew {
            // 尝试扣费
            err := s.chargeSubscription(ctx, sub)
            if err != nil {
                // 扣费失败，发送提醒
                s.notifyRenewalFailed(sub)
            }
        } else {
            // 发送续费提醒
            s.notifyRenewalReminder(sub)
        }
    }
    
    return nil
}
```

## 宽限期处理

```go
func (s *SubscriptionManager) HandleGracePeriod(ctx context.Context, sub *Subscription) {
    // 过期后3天宽限期
    if time.Now().After(time.Unix(sub.ExpiresAt, 0).Add(3*24*time.Hour)) {
        // 降级到免费版
        s.downgradeToFree(sub.UserID)
    }
}
```
