package payment import ( "SciencesServer/app/api/website/model" model2 "SciencesServer/app/common/model" "gorm.io/gorm" "time" ) // Vip 会员信息 type Vip struct { uid, vipID uint64 effectTime int } type VipCallback func(uid, vipID uint64, effectTime int) *Vip func (c *Vip) grant(tx *gorm.DB) error { mUserInstance := model.NewUserInstance() isExist, err := model2.FirstField(mUserInstance.UserInstance, []string{"id", "vip", "vip_deadline"}, model2.NewWhere("uuid", c.uid)) if err != nil { return err } else if isExist { if mUserInstance.VipStatus() { mUserInstance.Vip = c.vipID mUserInstance.VipDeadline = mUserInstance.VipDeadline.AddDate(0, c.effectTime, 0) } else { mUserInstance.Vip = c.vipID mUserInstance.VipDeadline = time.Now().AddDate(0, c.effectTime, 0) } if err = model2.Updates(mUserInstance.UserInstance, map[string]interface{}{ "vip": mUserInstance.Vip, "vip_deadline": mUserInstance.VipDeadline, "updated_at": time.Now(), }, tx); err != nil { return err } } return nil } func NewVip() VipCallback { return func(uid, vipID uint64, effectTime int) *Vip { return &Vip{ uid: uid, vipID: vipID, effectTime: effectTime, } } }