You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.0 KiB
89 lines
2.0 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"net/url" |
|
|
|
v1 "go-common/app/service/main/account/api" |
|
"go-common/library/ecode" |
|
"go-common/library/net/metadata" |
|
"go-common/library/xstr" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
var ( |
|
_emptyVipInfos3 = map[int64]*v1.VipInfo{} |
|
) |
|
|
|
// RawVip get mid's vip info from account center by vip API. |
|
func (d *Dao) RawVip(c context.Context, mid int64) (vip *v1.VipInfo, err error) { |
|
params := url.Values{} |
|
var res struct { |
|
Code int `json:"code"` |
|
Data struct { |
|
Type int32 `json:"vipType"` |
|
Status int32 `json:"vipStatus"` |
|
DueDate int64 `json:"vipDueDate"` |
|
VipPayType int32 `json:"isAutoRenew"` |
|
} `json:"data"` |
|
} |
|
err = d.httpR.RESTfulGet(c, d.vipInfoURI, metadata.String(c, metadata.RemoteIP), params, &res, mid) |
|
if err != nil { |
|
err = errors.Wrap(err, "dao vip") |
|
return |
|
} |
|
if res.Code != 0 { |
|
err = ecode.Int(res.Code) |
|
err = errors.Wrap(err, "dao vip") |
|
return |
|
} |
|
vip = &v1.VipInfo{ |
|
Type: res.Data.Type, |
|
Status: res.Data.Status, |
|
DueDate: res.Data.DueDate, |
|
VipPayType: res.Data.VipPayType, |
|
} |
|
return |
|
} |
|
|
|
// RawVips get multi mid's vip info from account center by vip API. |
|
func (d *Dao) RawVips(c context.Context, mids []int64) (res map[int64]*v1.VipInfo, err error) { |
|
params := url.Values{} |
|
params.Set("idList", xstr.JoinInts(mids)) |
|
var info struct { |
|
Code int `json:"code"` |
|
Data map[int64]*struct { |
|
Type int32 `json:"vipType"` |
|
Status int32 `json:"vipStatus"` |
|
DueDate int64 `json:"vipDueDate"` |
|
} `json:"data"` |
|
} |
|
err = d.httpR.Get(c, d.vipMultiInfoURI, "", params, &info) |
|
if err != nil { |
|
err = errors.Wrap(err, "dao vip") |
|
return |
|
} |
|
if info.Code != 0 { |
|
err = ecode.Int(info.Code) |
|
err = errors.Wrap(err, "dao vip") |
|
return |
|
} |
|
if len(info.Data) == 0 { |
|
res = _emptyVipInfos3 |
|
return |
|
} |
|
res = make(map[int64]*v1.VipInfo, len(info.Data)) |
|
for mid, v := range info.Data { |
|
if v == nil { |
|
continue |
|
} |
|
vip := &v1.VipInfo{ |
|
Type: v.Type, |
|
Status: v.Status, |
|
DueDate: v.DueDate, |
|
} |
|
res[mid] = vip |
|
} |
|
return |
|
}
|
|
|