go-common/app/interface/main/app-feed/http/feed.go

559 lines
15 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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)
}