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.
132 lines
3.2 KiB
132 lines
3.2 KiB
package creative |
|
|
|
import ( |
|
"context" |
|
"net/url" |
|
"strconv" |
|
|
|
"go-common/app/interface/main/app-view/conf" |
|
"go-common/app/interface/main/app-view/model/creative" |
|
"go-common/library/ecode" |
|
httpx "go-common/library/net/http/blademaster" |
|
"go-common/library/net/metadata" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_special = "/x/internal/uper/special" |
|
_follow = "/x/internal/uper/switch" |
|
_bgm = "/x/internal/creative/archive/bgm" |
|
_points = "/x/internal/creative/video/viewpoints" |
|
) |
|
|
|
// Dao is space dao |
|
type Dao struct { |
|
client *httpx.Client |
|
special string |
|
follow string |
|
bgm string |
|
points string |
|
} |
|
|
|
// New initial space dao |
|
func New(c *conf.Config) (d *Dao) { |
|
d = &Dao{ |
|
client: httpx.NewClient(c.HTTPClient), |
|
special: c.Host.APICo + _special, |
|
follow: c.Host.APICo + _follow, |
|
bgm: c.Host.APICo + _bgm, |
|
points: c.Host.APICo + _points, |
|
} |
|
return |
|
} |
|
|
|
// FollowSwitch get auto follow switch . |
|
func (d *Dao) FollowSwitch(c context.Context, vmid int64) (s *creative.FollowSwitch, err error) { |
|
params := url.Values{} |
|
params.Set("mid", strconv.FormatInt(vmid, 10)) |
|
params.Set("from", "0") |
|
var res struct { |
|
Code int `json:"code"` |
|
Data *creative.FollowSwitch `json:"data"` |
|
} |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
if err = d.client.Get(c, d.follow, ip, params, &res); err != nil { |
|
return |
|
} |
|
if res.Code != ecode.OK.Code() { |
|
err = errors.Wrap(ecode.Int(res.Code), d.follow+"?"+params.Encode()) |
|
return |
|
} |
|
s = res.Data |
|
return |
|
} |
|
|
|
// Bgm get archive bgm |
|
func (d *Dao) Bgm(c context.Context, aid, cid int64) (bgm []*creative.Bgm, err error) { |
|
params := url.Values{} |
|
params.Set("aid", strconv.FormatInt(aid, 10)) |
|
params.Set("cid", strconv.FormatInt(cid, 10)) |
|
var res struct { |
|
Code int `json:"code"` |
|
Data []*creative.Bgm `json:"data"` |
|
} |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
if err = d.client.Get(c, d.bgm, ip, params, &res); err != nil { |
|
return |
|
} |
|
if res.Code != ecode.OK.Code() { |
|
err = errors.Wrap(ecode.Int(res.Code), d.bgm+"?"+params.Encode()) |
|
return |
|
} |
|
bgm = res.Data |
|
return |
|
} |
|
|
|
// Points get video points |
|
func (d *Dao) Points(c context.Context, aid, cid int64) (points []*creative.Points, err error) { |
|
params := url.Values{} |
|
params.Set("aid", strconv.FormatInt(aid, 10)) |
|
params.Set("cid", strconv.FormatInt(cid, 10)) |
|
var res struct { |
|
Code int `json:"code"` |
|
Data struct { |
|
Points []*creative.Points `json:"points"` |
|
} `json:"data"` |
|
} |
|
ip := metadata.String(c, metadata.RemoteIP) |
|
if err = d.client.Get(c, d.points, ip, params, &res); err != nil { |
|
return |
|
} |
|
if res.Code != ecode.OK.Code() { |
|
err = errors.Wrap(ecode.Int(res.Code), d.points+"?"+params.Encode()) |
|
return |
|
} |
|
points = res.Data.Points |
|
return |
|
} |
|
|
|
// Special is |
|
func (d *Dao) Special(c context.Context) (midsM map[int64]struct{}, err error) { |
|
params := url.Values{} |
|
params.Set("group_id", "20") |
|
var res struct { |
|
Code int `json:"code"` |
|
Data []struct { |
|
Mid int64 `json:"mid"` |
|
} `json:"data"` |
|
} |
|
if err = d.client.Get(c, d.special, "", params, &res); err != nil { |
|
return |
|
} |
|
if res.Code != ecode.OK.Code() { |
|
err = errors.Wrap(ecode.Int(res.Code), d.special+"?"+params.Encode()) |
|
return |
|
} |
|
midsM = make(map[int64]struct{}) |
|
for _, l := range res.Data { |
|
midsM[l.Mid] = struct{}{} |
|
} |
|
return |
|
}
|
|
|