package user import ( "cls/internal/domain/purchase" "errors" ) // UserAggregate 用户聚合根 type UserAggregate struct { user *User purchases []*purchase.Purchase } // GetUser 获取用户实体 func (a *UserAggregate) GetUser() *User { return a.user } // GetPurchases 获取购买记录列表 func (a *UserAggregate) GetPurchases() []*purchase.Purchase { return a.purchases } // SetPurchases 设置购买记录列表 func (a *UserAggregate) SetPurchases(purchases []*purchase.Purchase) { a.purchases = purchases } // NewUserAggregate 创建用户聚合根 func NewUserAggregate(user *User) *UserAggregate { return &UserAggregate{ user: user, purchases: make([]*purchase.Purchase, 0), } } // UnlockArticle 解锁文章 func (a *UserAggregate) UnlockArticle(articleId uint64) error { // 1. 验证赠送次数 if a.user.GiftCount <= 0 { return errors.New("赠送次数不足") } // 2. 检查是否已解锁 if a.HasUnlocked(articleId) { return errors.New("文章已解锁") } // 3. 创建购买记录 newPurchase := purchase.NewPurchase( a.user.Id, articleId, purchase.ContentTypeArticle, 0, // 赠送价格为0, 0, //表示永久 ) newPurchase.ContentSource = purchase.ContentSourceGift // 4. 更新状态 a.purchases = append(a.purchases, newPurchase) a.user.GiftCount-- return nil } // HasUnlocked 检查是否已解锁 func (a *UserAggregate) HasUnlocked(articleId uint64) bool { for _, p := range a.purchases { if p.ContentId == articleId { return true } } return false }