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.
294 lines
8.5 KiB
294 lines
8.5 KiB
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 |
|
}
|
|
|