50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
![]() |
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,
|
||
|
}
|
||
|
}
|
||
|
}
|