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.
558 lines
15 KiB
558 lines
15 KiB
package http |
|
|
|
import ( |
|
"strconv" |
|
"time" |
|
|
|
cdm "go-common/app/interface/main/app-card/model" |
|
"go-common/app/interface/main/app-card/model/card" |
|
"go-common/app/interface/main/app-card/model/card/ai" |
|
"go-common/app/interface/main/app-card/model/card/operate" |
|
"go-common/app/interface/main/app-feed/model" |
|
"go-common/app/interface/main/app-feed/model/feed" |
|
"go-common/library/ecode" |
|
bm "go-common/library/net/http/blademaster" |
|
) |
|
|
|
const ( |
|
_headerBuvid = "Buvid" |
|
_headerDisplayID = "Display-ID" |
|
_headerDeviceID = "Device-ID" |
|
_androidFnvalBuild = 5325000 |
|
_iosFnvalBuild = 8160 |
|
_iosQnBuildGt = 8170 |
|
_iosQnBuildLt = 8190 |
|
_androidQnBuildLt = 5335000 |
|
_qn480 = 32 |
|
) |
|
|
|
func feedIndex(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
platform := params.Get("platform") |
|
network := params.Get("network") |
|
buildStr := params.Get("build") |
|
idxStr := params.Get("idx") |
|
pullStr := params.Get("pull") |
|
styleStr := params.Get("style") |
|
loginEventStr := params.Get("login_event") |
|
openEvent := params.Get("open_event") |
|
bannerHash := params.Get("banner_hash") |
|
adExtra := params.Get("ad_extra") |
|
qnStr := params.Get("qn") |
|
interest := params.Get("interest") |
|
flushStr := params.Get("flush") |
|
autoplayCard, _ := strconv.Atoi(params.Get("autoplay_card")) |
|
fnver, _ := strconv.Atoi(params.Get("fnver")) |
|
fnval, _ := strconv.Atoi(params.Get("fnval")) |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
if (model.IsAndroid(plat) && build <= _androidFnvalBuild) || (model.IsIOSNormal(plat) && build <= _iosFnvalBuild) { |
|
fnval = 0 |
|
} |
|
style, _ := strconv.Atoi(styleStr) |
|
flush, _ := strconv.Atoi(flushStr) |
|
// get audit data, if check audit hit. |
|
is, ok := feedSvc.Audit(c, mobiApp, plat, build) |
|
if ok { |
|
c.JSON(is, nil) |
|
return |
|
} |
|
buvid := header.Get(_headerBuvid) |
|
disid := header.Get(_headerDisplayID) |
|
dvcid := header.Get(_headerDeviceID) |
|
// page |
|
idx, err := strconv.ParseInt(idxStr, 10, 64) |
|
if err != nil || idx < 0 { |
|
idx = 0 |
|
} |
|
// pull default |
|
pull, err := strconv.ParseBool(pullStr) |
|
if err != nil { |
|
pull = true |
|
} |
|
// login event |
|
loginEvent, err := strconv.Atoi(loginEventStr) |
|
if err != nil { |
|
loginEvent = 0 |
|
} |
|
// qn |
|
qn, _ := strconv.Atoi(qnStr) |
|
now := time.Now() |
|
// index |
|
data, userFeature, isRcmd, newUser, code, feedclean, autoPlayInfoc, err := feedSvc.Index(c, mid, plat, build, buvid, network, mobiApp, device, platform, openEvent, loginEvent, idx, pull, now, bannerHash, adExtra, qn, interest, style, flush, fnver, fnval, autoplayCard) |
|
res := map[string]interface{}{ |
|
"data": data, |
|
"config": map[string]interface{}{ |
|
"feed_clean_abtest": feedclean, |
|
}, |
|
} |
|
c.JSONMap(res, err) |
|
if err != nil { |
|
return |
|
} |
|
// infoc |
|
items := make([]*ai.Item, 0, len(data)) |
|
for _, item := range data { |
|
items = append(items, item.AI) |
|
} |
|
feedSvc.IndexInfoc(c, mid, plat, build, buvid, disid, "/x/feed/index", userFeature, style, code, items, isRcmd, pull, newUser, now, "", dvcid, network, flush, autoPlayInfoc, 0) |
|
} |
|
|
|
func feedUpper(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
midInter, _ := c.Get("mid") |
|
mid = midInter.(int64) |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
// check page |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps < 1 { |
|
ps = 20 |
|
} else if ps > 200 { |
|
ps = 200 |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
now := time.Now() |
|
uas, _ := feedSvc.Upper(c, mid, plat, build, pn, ps, now) |
|
data := map[string]interface{}{} |
|
if len(uas) != 0 { |
|
data["item"] = uas |
|
} else { |
|
data["item"] = []struct{}{} |
|
} |
|
uls, count := feedSvc.UpperLive(c, mid) |
|
if len(uls) != 0 { |
|
data["live"] = struct { |
|
Item []*feed.Item `json:"item"` |
|
Count int `json:"count"` |
|
Conut int `json:"conut"` |
|
}{uls, count, count} |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
func feedUpperArchive(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
midInter, _ := c.Get("mid") |
|
mid = midInter.(int64) |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
// check page |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps < 1 { |
|
ps = 20 |
|
} else if ps > 200 { |
|
ps = 200 |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
now := time.Now() |
|
uas, _ := feedSvc.UpperArchive(c, mid, plat, build, pn, ps, now) |
|
data := map[string]interface{}{} |
|
if len(uas) != 0 { |
|
data["item"] = uas |
|
} else { |
|
data["item"] = []struct{}{} |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
func feedUpperBangumi(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
midInter, _ := c.Get("mid") |
|
mid = midInter.(int64) |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
// check page |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps < 1 { |
|
ps = 20 |
|
} else if ps > 200 { |
|
ps = 200 |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
now := time.Now() |
|
uas, _ := feedSvc.UpperBangumi(c, mid, plat, build, pn, ps, now) |
|
data := map[string]interface{}{} |
|
if len(uas) != 0 { |
|
data["item"] = uas |
|
} else { |
|
data["item"] = []struct{}{} |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
func feedUpperArticle(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
midInter, _ := c.Get("mid") |
|
mid = midInter.(int64) |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
pnStr := params.Get("pn") |
|
psStr := params.Get("ps") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
// check page |
|
pn, err := strconv.Atoi(pnStr) |
|
if err != nil || pn < 1 { |
|
pn = 1 |
|
} |
|
ps, err := strconv.Atoi(psStr) |
|
if err != nil || ps < 1 { |
|
ps = 20 |
|
} else if ps > 200 { |
|
ps = 200 |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
now := time.Now() |
|
uas, _ := feedSvc.UpperArticle(c, mid, plat, build, pn, ps, now) |
|
data := map[string]interface{}{} |
|
if len(uas) != 0 { |
|
data["item"] = uas |
|
} else { |
|
data["item"] = []struct{}{} |
|
} |
|
c.JSON(data, nil) |
|
} |
|
|
|
func feedUnreadCount(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
midInter, _ := c.Get("mid") |
|
mid = midInter.(int64) |
|
// get params |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
total, feedCount, articleCount := feedSvc.UnreadCount(c, mid, plat, build, time.Now()) |
|
c.JSON(struct { |
|
Total int `json:"total"` |
|
Count int `json:"count"` |
|
Article int `json:"article"` |
|
}{total, feedCount, articleCount}, nil) |
|
} |
|
|
|
func feedDislike(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
gt := params.Get("goto") |
|
if gt == "" { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
id, _ := strconv.ParseInt(params.Get("id"), 10, 64) |
|
reasonID, _ := strconv.ParseInt(params.Get("reason_id"), 10, 64) |
|
cmreasonID, _ := strconv.ParseInt(params.Get("cm_reason_id"), 10, 64) |
|
feedbackID, _ := strconv.ParseInt(params.Get("feedback_id"), 10, 64) |
|
upperID, _ := strconv.ParseInt(params.Get("mid"), 10, 64) |
|
rid, _ := strconv.ParseInt(params.Get("rid"), 10, 64) |
|
tagID, _ := strconv.ParseInt(params.Get("tag_id"), 10, 64) |
|
adcb := params.Get("ad_cb") |
|
buvid := header.Get(_headerBuvid) |
|
if buvid == "" && mid == 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(nil, feedSvc.Dislike(c, mid, id, buvid, gt, reasonID, cmreasonID, feedbackID, upperID, rid, tagID, adcb, time.Now())) |
|
} |
|
|
|
func feedDislikeCancel(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
header := c.Request.Header |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
gt := params.Get("goto") |
|
if gt == "" { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
id, _ := strconv.ParseInt(params.Get("id"), 10, 64) |
|
reasonID, _ := strconv.ParseInt(params.Get("reason_id"), 10, 64) |
|
cmreasonID, _ := strconv.ParseInt(params.Get("cm_reason_id"), 10, 64) |
|
feedbackID, _ := strconv.ParseInt(params.Get("feedback_id"), 10, 64) |
|
upperID, _ := strconv.ParseInt(params.Get("mid"), 10, 64) |
|
rid, _ := strconv.ParseInt(params.Get("rid"), 10, 64) |
|
tagID, _ := strconv.ParseInt(params.Get("tag_id"), 10, 64) |
|
adcb := params.Get("ad_cb") |
|
buvid := header.Get(_headerBuvid) |
|
if buvid == "" && mid == 0 { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(nil, feedSvc.DislikeCancel(c, mid, id, buvid, gt, reasonID, cmreasonID, feedbackID, upperID, rid, tagID, adcb, time.Now())) |
|
} |
|
|
|
func feedUpperRecent(c *bm.Context) { |
|
var mid int64 |
|
params := c.Request.Form |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
aidStr := params.Get("param") |
|
aid, err := strconv.ParseInt(aidStr, 10, 64) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
upperStr := params.Get("vmid") |
|
upperID, err := strconv.ParseInt(upperStr, 10, 64) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
c.JSON(struct { |
|
Item []*feed.Item `json:"item"` |
|
}{feedSvc.UpperRecent(c, mid, upperID, aid, time.Now())}, nil) |
|
} |
|
|
|
func feedIndexTab(c *bm.Context) { |
|
var ( |
|
id int64 |
|
items []*feed.Item |
|
isBnj bool |
|
bnjDays int |
|
cover string |
|
err error |
|
mid int64 |
|
) |
|
params := c.Request.Form |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
now := time.Now() |
|
idStr := params.Get("id") |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
buildStr := params.Get("build") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
if id, _ = strconv.ParseInt(idStr, 10, 64); id <= 0 { |
|
c.JSON(struct { |
|
Tab []*operate.Menu `json:"tab"` |
|
}{feedSvc.Menus(c, plat, build, now)}, nil) |
|
return |
|
} |
|
items, cover, isBnj, bnjDays, err = feedSvc.Actives(c, id, mid, now) |
|
c.JSON(struct { |
|
Cover string `json:"cover"` |
|
IsBnj bool `json:"is_bnj,omitempty"` |
|
BnjDays int `json:"bnj_days,omitempty"` |
|
Item []*feed.Item `json:"item"` |
|
}{cover, isBnj, bnjDays, items}, err) |
|
} |
|
|
|
func feedIndex2(c *bm.Context) { |
|
var mid int64 |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
header := c.Request.Header |
|
buvid := header.Get(_headerBuvid) |
|
disid := header.Get(_headerDisplayID) |
|
dvcid := header.Get(_headerDeviceID) |
|
param := &feed.IndexParam{} |
|
// get params |
|
if err := c.Bind(param); err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
_, ok := cdm.Columnm[param.Column] |
|
if !ok { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
// 兼容老的style逻辑,3为新单列 |
|
style := int(cdm.Columnm[param.Column]) |
|
if style == 1 { |
|
style = 3 |
|
} |
|
// check params |
|
plat := model.Plat(param.MobiApp, param.Device) |
|
// get audit data, if check audit hit. |
|
if data, ok := feedSvc.Audit2(c, param.MobiApp, plat, param.Build, param.Column); ok { |
|
c.JSON(struct { |
|
Item []card.Handler `json:"items"` |
|
}{Item: data}, nil) |
|
return |
|
} |
|
if (model.IsAndroid(plat) && param.Build <= _androidFnvalBuild) || (model.IsIOSNormal(plat) && param.Build <= _iosFnvalBuild) { |
|
param.Fnval = 0 |
|
} |
|
if (model.IsAndroid(plat) && param.Build > _androidFnvalBuild && param.Build < _androidQnBuildLt) || (model.IsIOSNormal(plat) && param.Build > _iosQnBuildGt && param.Build <= _iosQnBuildLt) || param.Qn <= 0 { |
|
param.Qn = _qn480 |
|
} |
|
now := time.Now() |
|
// index |
|
plat = model.PlatAPPBuleChange(plat) |
|
data, config, infc, err := feedSvc.Index2(c, buvid, mid, plat, param, style, now) |
|
c.JSON(struct { |
|
Item []card.Handler `json:"items"` |
|
Config *feed.Config `json:"config"` |
|
}{Item: data, Config: config}, err) |
|
if err != nil { |
|
return |
|
} |
|
// infoc |
|
items := make([]*ai.Item, 0, len(data)) |
|
for _, item := range data { |
|
items = append(items, item.Get().Rcmd) |
|
} |
|
feedSvc.IndexInfoc(c, mid, plat, param.Build, buvid, disid, "/x/feed/index", infc.UserFeature, style, infc.Code, items, infc.IsRcmd, param.Pull, infc.NewUser, now, "", dvcid, param.Network, param.Flush, infc.AutoPlayInfoc, param.DeviceType) |
|
} |
|
|
|
func feedIndexTab2(c *bm.Context) { |
|
var ( |
|
id int64 |
|
items []card.Handler |
|
isBnj bool |
|
bnjDays int |
|
cover string |
|
err error |
|
mid int64 |
|
) |
|
params := c.Request.Form |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
now := time.Now() |
|
idStr := params.Get("id") |
|
mobiApp := params.Get("mobi_app") |
|
device := params.Get("device") |
|
forceHost, _ := strconv.Atoi(params.Get("force_host")) |
|
buildStr := params.Get("build") |
|
// check params |
|
build, err := strconv.Atoi(buildStr) |
|
if err != nil { |
|
c.JSON(nil, ecode.RequestErr) |
|
return |
|
} |
|
plat := model.Plat(mobiApp, device) |
|
if id, _ = strconv.ParseInt(idStr, 10, 64); id <= 0 { |
|
c.JSON(struct { |
|
Tab []*operate.Menu `json:"tab"` |
|
}{feedSvc.Menus(c, plat, build, now)}, nil) |
|
return |
|
} |
|
items, cover, isBnj, bnjDays, err = feedSvc.Actives2(c, id, mid, mobiApp, plat, build, forceHost, now) |
|
c.JSON(struct { |
|
Cover string `json:"cover"` |
|
IsBnj bool `json:"is_bnj,omitempty"` |
|
BnjDays int `json:"bnj_days,omitempty"` |
|
Item []card.Handler `json:"items"` |
|
}{cover, isBnj, bnjDays, items}, err) |
|
} |
|
|
|
func feedIndexConverge(c *bm.Context) { |
|
var ( |
|
mid int64 |
|
title string |
|
cover string |
|
uri string |
|
) |
|
if midInter, ok := c.Get("mid"); ok { |
|
mid = midInter.(int64) |
|
} |
|
param := &feed.ConvergeParam{} |
|
if err := c.Bind(param); err != nil { |
|
return |
|
} |
|
plat := model.Plat(param.MobiApp, param.Device) |
|
if (model.IsAndroid(plat) && param.Build <= _androidFnvalBuild) || (model.IsIOSNormal(plat) && param.Build <= _iosFnvalBuild) { |
|
param.Fnval = 0 |
|
} |
|
data, converge, err := feedSvc.Converge(c, mid, plat, param, time.Now()) |
|
if converge != nil { |
|
title = converge.Title |
|
cover = converge.Cover |
|
uri = converge.URI |
|
} |
|
c.JSON(struct { |
|
Items []card.Handler `json:"items,omitempty"` |
|
Title string `json:"title,omitempty"` |
|
Cover string `json:"cover,omitempty"` |
|
Param string `json:"param,omitempty"` |
|
URI string `json:"uri,omitempty"` |
|
}{Items: data, Title: title, Cover: cover, Param: strconv.FormatInt(param.ID, 10), URI: uri}, err) |
|
}
|
|
|