go-common/app/interface/main/creative/dao/medal/dao.go
2019-04-22 18:49:16 +08:00

295 lines
8.5 KiB
Go

package medal
import (
"context"
"net/http"
"net/url"
"strconv"
"strings"
"go-common/app/interface/main/creative/conf"
"go-common/app/interface/main/creative/model/medal"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
)
const (
_checkStatus = "/fans_medal/v1/medal/if_can_open"
_openMedal = "/fans_medal/v1/medal/open"
_getMedal = "/fans_medal/v1/medal/get"
_recentFans = "/fans_medal/v1/fans_medal/get_recent_fans_list"
_checkMedal = "/fans_medal/v1/medal/check_open"
_fansRank = "/fans_medal/v1/medal/top_medal_fans_list"
_rename = "/fans_medal/v1/medal/rename"
)
// Dao define
type Dao struct {
c *conf.Config
// http
client *httpx.Client
// uri
checkStatusURI string
openMedalURI string
getMedalURI string
recentFansURI string
checkMedalURI string
fansRankURI string
renameURI string
}
// New init dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
client: httpx.NewClient(c.HTTPClient.Slow),
checkStatusURI: c.Host.Live + _checkStatus,
openMedalURI: c.Host.Live + _openMedal,
getMedalURI: c.Host.Live + _getMedal,
recentFansURI: c.Host.Live + _recentFans,
checkMedalURI: c.Host.Live + _checkMedal,
fansRankURI: c.Host.Live + _fansRank,
renameURI: c.Host.Live + _rename,
}
return
}
// Status check if up can open medal
func (d *Dao) Status(c context.Context, mid int64) (st *medal.Status, err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("source", "2")
if req, err = http.NewRequest("GET", d.checkStatusURI+"?"+params.Encode(), nil); err != nil {
log.Error("Status url(%s) error(%v)", d.checkStatusURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data *medal.Status `json:"data"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("d.Status url(%s) res(%+v) err(%v)", d.checkStatusURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("Status url(%s) res(%v)", d.checkStatusURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
st = res.Data
return
}
// OpenMedal open medal for up
func (d *Dao) OpenMedal(c context.Context, mid int64, name string) (err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("medal_name", name)
params.Set("source", "2")
if req, err = http.NewRequest("POST", d.openMedalURI, strings.NewReader(params.Encode())); err != nil {
log.Error("OpenMedal url(%s) error(%v)", d.openMedalURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
var res struct {
Code int `json:"code"`
Msg string `json:"msg"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("d.OpenMedal url(%s) res(%+v) err(%v)", d.openMedalURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("OpenMedal url(%s) res(%v)", d.openMedalURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
return
}
// CheckMedal check medal name for up
func (d *Dao) CheckMedal(c context.Context, mid int64, name string) (valid int, err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("medal_name", name)
params.Set("source", "2")
if req, err = http.NewRequest("POST", d.checkMedalURI, strings.NewReader(params.Encode())); err != nil {
log.Error("checkMedalURI url(%s) error(%v)", d.checkMedalURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
var res struct {
Code int `json:"code"`
Data struct {
Enable bool `json:"enable"`
} `json:"data"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("d.checkMedalURI url(%s) res(%+v) err(%v)", d.checkMedalURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("checkMedalURI url(%s) res(%v)", d.checkMedalURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
if !res.Data.Enable {
valid = 1
}
return
}
//Medal get medal
func (d *Dao) Medal(c context.Context, mid int64) (mdl *medal.Medal, err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("source", "2")
if req, err = http.NewRequest("GET", d.getMedalURI+"?"+params.Encode(), nil); err != nil {
log.Error("Medal url(%s) error(%v)", d.getMedalURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data *medal.Medal `json:"data"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("Medal url(%s) response(%+v) error(%v)", d.getMedalURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("Medal url(%s) res(%v)", d.getMedalURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
mdl = res.Data
return
}
//RecentFans get a list of recent fans
func (d *Dao) RecentFans(c context.Context, mid int64) (fans []*medal.RecentFans, err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("source", "2")
params.Set("size", "10")
if req, err = http.NewRequest("GET", d.recentFansURI+"?"+params.Encode(), nil); err != nil {
log.Error("RecentFans url(%s) error(%v)", d.recentFansURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data []*medal.RecentFans `json:"data"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("RecentFans url(%s) response(%+v) error(%v)", d.recentFansURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("RecentFans url(%s) res(%v)", d.recentFansURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
fans = res.Data
return
}
//Rank get fans rank list
func (d *Dao) Rank(c context.Context, mid int64) (rank []*medal.FansRank, err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
if req, err = http.NewRequest("GET", d.fansRankURI+"?"+params.Encode(), nil); err != nil {
log.Error("Rank url(%s) error(%v)", d.fansRankURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data []*medal.FansRank `json:"data"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("Rank url(%s) response(%+v) error(%v)", d.fansRankURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("Rank url(%s) res(%v)", d.fansRankURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
rank = res.Data
return
}
//Rename rename medal name
func (d *Dao) Rename(c context.Context, mid int64, name, ak, ck string) (err error) {
var (
req *http.Request
params = url.Values{}
)
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("medal_name", name)
params.Set("source", "2")
if ak != "" {
params.Set("access_key", ak)
params.Set("platform", "ios")
} else {
params.Set("platform", "pc")
}
if req, err = http.NewRequest("POST", d.renameURI, strings.NewReader(params.Encode())); err != nil {
log.Error("Rename url(%s) error(%v)", d.renameURI+"?"+params.Encode(), err)
err = ecode.CreativeFansMedalErr
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", ck)
var res struct {
Code int `json:"code"`
}
if err = d.client.Do(c, req, &res); err != nil {
log.Error("Rename url(%s) response(%+v) error(%v)", d.renameURI+"?"+params.Encode(), res, err)
err = ecode.CreativeFansMedalErr
return
}
if res.Code != 0 {
log.Error("Rename url(%s) res(%v)", d.renameURI+"?"+params.Encode(), res)
err = ecode.Int(res.Code)
return
}
return
}