Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"app.go",
"comment.go",
"data.go",
"feed.go",
"http.go",
"location.go",
"notice.go",
"push.go",
"report.go",
"search.go",
"share.go",
"sv.go",
"topic.go",
"upload.go",
"user.go",
],
importpath = "go-common/app/interface/bbq/app-bbq/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/bbq/app-bbq/api/http/v1:go_default_library",
"//app/interface/bbq/app-bbq/conf:go_default_library",
"//app/interface/bbq/app-bbq/model:go_default_library",
"//app/interface/bbq/app-bbq/service:go_default_library",
"//app/interface/bbq/common/auth:go_default_library",
"//app/interface/bbq/common/http:go_default_library",
"//app/service/bbq/notice-service/api/v1:go_default_library",
"//app/service/bbq/topic/api:go_default_library",
"//app/service/bbq/user/api:go_default_library",
"//app/service/bbq/video/api/grpc/v1:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/antispam:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/metadata:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/json-iterator/go:go_default_library",
"//vendor/github.com/pkg/errors:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,49 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
bm "go-common/library/net/http/blademaster"
"strings"
"github.com/json-iterator/go"
)
func appSetting(c *bm.Context) {
args := &v1.AppSettingRequest{}
if err := c.Bind(args); err != nil {
return
}
data, err := srv.AppSetting(c, args)
if err != nil {
c.JSON(nil, err)
return
}
if strings.ToLower(args.Base.Client) == "ios" {
c.JSON(data, err)
return
}
resp := struct {
Code int `json:"code"`
Message string `json:"message"`
TTL int `json:"ttl"`
Data interface{} `json:"data,omitempty"`
}{
Code: 0,
Message: "0",
TTL: 1,
Data: data,
}
str, _ := jsoniter.MarshalToString(resp)
c.String(0, strings.Replace(str, "\\\\", "\\", -1))
}
func appPackage(c *bm.Context) {
args := struct {
Lastest int `json:"lastest" form:"lastest"`
}{}
c.Bind(&args)
c.JSON(srv.AppPackage(c, args.Lastest))
}

View File

@@ -0,0 +1,173 @@
package http
import (
v1 "go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
var (
cmType int64
cmID int64
)
func commentInit(c *bm.Context) {
if cmType = cfg.Comment.Type; cmType == 0 {
cmType = model.DefaultCmType
}
//debug conf
if deid := cfg.Comment.DebugID; deid > 0 {
cmID = deid
}
}
func commentCursor(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &v1.CommentCursorReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
device := dev.(*bm.Device)
if mid != nil {
arg.MID = mid.(int64)
} else {
arg.MID = 0
}
//评论区类型overwrite
arg.Type = cmType
if cmID > 0 {
arg.SvID = cmID
}
c.JSON(srv.CommentCursor(c, arg, device))
}
func commentAdd(c *bm.Context) {
dev, _ := c.Get("device")
arg := &v1.CommentAddReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
if len([]rune(arg.Message)) > 96 {
err := ecode.CommentLengthIllegal
c.JSON(nil, err)
return
}
device := dev.(*bm.Device)
arg.AccessKey = c.Request.Form.Get("access_key")
arg.Type = cmType
if cmID > 0 {
arg.SvID = cmID
}
midVal, _ := c.Get("mid")
resp, err := srv.CommentAdd(c, midVal.(int64), arg, device)
c.JSON(resp, err)
// 埋点
if err != nil {
return
}
ext := &struct {
SVID int64
Root int64
Parent int64
Type int64
}{
SVID: arg.SvID,
Root: arg.Root,
Parent: arg.Parent,
Type: arg.Type,
}
uiLog(c, model.ActionCommentAdd, ext)
}
func commentLike(c *bm.Context) {
dev, _ := c.Get("device")
arg := &v1.CommentLikeReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
arg.AccessKey = c.Request.Form.Get("access_key")
device := dev.(*bm.Device)
arg.Type = cmType
if cmID > 0 {
arg.SvID = cmID
}
mid, _ := c.Get("mid")
err := srv.CommentLike(c, mid.(int64), arg, device)
c.JSON(nil, err)
// 埋点
if err != nil {
return
}
ext := &struct {
SVID int64
RPID int64
Action int16
Type int64
}{
SVID: arg.SvID,
RPID: arg.RpID,
Action: arg.Action,
Type: arg.Type,
}
uiLog(c, model.ActionCommentLike, ext)
}
func commentList(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &v1.CommentListReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
device := dev.(*bm.Device)
if mid != nil {
arg.MID = mid.(int64)
} else {
arg.MID = 0
}
arg.Type = cmType
if cmID > 0 {
arg.SvID = cmID
}
// 这里是转换成评论那边的平台
if device.RawPlatform == "ios" {
arg.Plat = 3
} else if device.RawPlatform == "android" {
arg.Plat = 2
arg.Pn++
}
c.JSON(srv.CommentList(c, arg, device))
}
func commentSubCursor(c *bm.Context) {
dev, _ := c.Get("device")
arg := &v1.CommentSubCursorReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
device := dev.(*bm.Device)
arg.Type = cmType
if cmID > 0 {
arg.SvID = cmID
}
var mid int64
midValue, _ := c.Get("mid")
if midValue != nil {
mid = midValue.(int64)
}
c.JSON(srv.CommentSubCursor(c, mid, arg, device))
}

View File

@@ -0,0 +1,10 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/model"
bm "go-common/library/net/http/blademaster"
)
func videoPlay(c *bm.Context) {
uiLog(c, model.ActionPlay, nil)
}

View File

@@ -0,0 +1,93 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
// @params FeedListReq
// @router get /bbq/app-bbq/feed/list/
// @response FeedListResponse
func feedList(c *bm.Context) {
arg := &v1.FeedListRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, _ := c.Get("mid")
arg.MID = mid.(int64)
dev, _ := c.Get("device")
arg.Device = dev.(*bm.Device)
b, _ := c.Get("BBQBase")
arg.BUVID = b.(*v1.Base).BUVID
resp, err := srv.FeedList(c, arg)
c.JSON(resp, err)
// 埋点
if err != nil {
return
}
var svidList []int64
for _, v := range resp.List {
svidList = append(svidList, v.SVID)
}
ext := &struct {
Svids []int64
}{
Svids: svidList,
}
uiLog(c, model.ActionFeedList, ext)
}
// @params mid
// @router get /bbq/app-bbq/feed/update_num
// @response FeedUpdateNumResponse
func feedUpdateNum(c *bm.Context) {
mid, _ := c.Get("mid")
c.JSON(srv.FeedUpdateNum(c, mid.(int64)))
}
// @params SpaceSvListRequest
// @router get /bbq/app-bbq/space/sv/list/
// @response SpaceSvListResponse
func spaceSvList(c *bm.Context) {
arg := &v1.SpaceSvListRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, exists := c.Get("mid")
if exists {
arg.MID = mid.(int64)
}
dev, _ := c.Get("device")
arg.Device = dev.(*bm.Device)
arg.Size = model.SpaceListLen
c.JSON(srv.SpaceSvList(c, arg))
}
// @params SpaceSvListRequest
// @router get /bbq/app-bbq/detail/sv/list/
// @response SpaceSvListResponse
func detailSvList(c *bm.Context) {
arg := &v1.SpaceSvListRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, exists := c.Get("mid")
if exists {
arg.MID = mid.(int64)
}
dev, _ := c.Get("device")
arg.Device = dev.(*bm.Device)
// 暂时设置size=3
arg.Size = 3
arg.CursorNext = ""
arg.CursorPrev = ""
c.JSON(srv.SpaceSvList(c, arg))
}

View File

@@ -0,0 +1,258 @@
package http
import (
"fmt"
"go-common/library/ecode"
"go-common/library/net/http/blademaster/middleware/antispam"
"net/http"
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/conf"
"go-common/app/interface/bbq/app-bbq/service"
xauth "go-common/app/interface/bbq/common/auth"
chttp "go-common/app/interface/bbq/common/http"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/trace"
)
var (
srv *service.Service
vfy *verify.Verify
authSrv *xauth.BannedAuth
cfg *conf.Config
logger *chttp.UILog
likeAntiSpam *antispam.Antispam
relationAntiSpam *antispam.Antispam
replyAntiSpam *antispam.Antispam
uploadAntiSpam *antispam.Antispam
reportAntiSpam *antispam.Antispam
)
// Init init
func Init(c *conf.Config) {
cfg = c
initAntiSpam(c)
logger = chttp.New(c.Infoc)
srv = service.New(c)
vfy = verify.New(c.Verify)
authSrv = xauth.NewBannedAuth(c.Auth, c.MySQL)
engine := bm.DefaultServer(c.BM)
route(engine)
if err := engine.Start(); err != nil {
log.Error("bm Start error(%v)", err)
panic(err)
}
}
func initAntiSpam(c *conf.Config) {
var antiConfig *antispam.Config
var exists bool
if antiConfig, exists = c.AntiSpam["like"]; !exists {
panic("lose like anti_spam config")
}
relationAntiSpam = antispam.New(antiConfig)
if antiConfig, exists = c.AntiSpam["relation"]; !exists {
panic("lose relation anti_spam config")
}
likeAntiSpam = antispam.New(antiConfig)
if antiConfig, exists = c.AntiSpam["reply"]; !exists {
panic("lose reply anti_spam config")
}
replyAntiSpam = antispam.New(antiConfig)
if antiConfig, exists = c.AntiSpam["upload"]; !exists {
panic("lose upload anti_spam config")
}
uploadAntiSpam = antispam.New(antiConfig)
if antiConfig, exists = c.AntiSpam["report"]; !exists {
panic("lose report anti_spam config")
}
reportAntiSpam = antispam.New(antiConfig)
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/bbq/app-bbq", wrapBBQ)
{
//用户登录
g.GET("/user/login", authSrv.User, login)
g.POST("/user/logout", authSrv.Guest, bm.Mobile(), pushLogout)
//用户相关
g.GET("/user/base", authSrv.User, userBase)
// 所有字段都需要携带修改
g.POST("/user/base/edit", authSrv.User, userBaseEdit)
g.POST("/user/like/add", authSrv.User, likeAntiSpam.ServeHTTP, addUserLike)
g.POST("/user/like/cancel", authSrv.User, likeAntiSpam.ServeHTTP, cancelUserLike)
g.GET("/user/like/list", userLikeList)
g.POST("/user/unlike", authSrv.User, likeAntiSpam.ServeHTTP, userUnLike)
g.GET("/user/follow/list", authSrv.Guest, userFollowList)
g.GET("/user/fan/list", authSrv.Guest, userFanList)
g.GET("/user/black/list", authSrv.User, userBlackList)
g.POST("/user/relation/modify", authSrv.User, relationAntiSpam.ServeHTTP, userRelationModify)
g.GET("/search/hot/word", hotWord)
// feed关注列表页
g.GET("/feed/list", authSrv.User, feedList)
// feed关注页红点
g.GET("/feed/update_num", authSrv.User, feedUpdateNum)
// space发布列表页
g.GET("/space/sv/list", authSrv.Guest, spaceSvList)
// space 用户详情况主/客
g.GET("/space/user/profile", authSrv.Guest, spaceUserProfile)
// 详情页up主发布列表
g.GET("/detail/sv/list", authSrv.Guest, detailSvList)
//视频相关
g.GET("/sv/list", authSrv.Guest, bm.Mobile(), svList)
g.GET("/sv/playlist", authSrv.Guest, bm.Mobile(), svPlayList) // playurl过期时候请求
g.GET("/sv/detail", authSrv.Guest, svDetail)
g.GET("/sv/stat", authSrv.Guest, bm.Mobile(), svStatistics)
g.GET("/sv/relate", authSrv.Guest, svRelList)
g.POST("/sv/del", authSrv.User, svDel)
//搜索相关
g.GET("/search/sv", authSrv.Guest, videoSearch)
g.GET("/search/user", authSrv.Guest, userSearch)
g.GET("/search/sug", authSrv.Guest, sug)
g.GET("/search/topic", authSrv.Guest, topicSearch)
//发现页
g.GET("/discovery", authSrv.Guest, discoveryList)
//话题详情页
g.GET("/topic/detail", authSrv.Guest, topicDetail)
// 用户location
g.GET("/location/all", authSrv.User, locationAll)
g.GET("/location", authSrv.User, location)
//图片上传
g.POST("/img/upload", authSrv.User, uploadAntiSpam.ServeHTTP, upload)
// 客户端分享链接
g.GET("/share", authSrv.Guest, shareURL)
g.GET("/share/callback", authSrv.Guest, shareCallback)
// 邀请函接口(内测版,公测删除)内测取消
// g.GET("/invitation/download", invitationDownload)
// App全局设置接口
g.GET("/setting", appSetting)
g.GET("/package", appPackage)
}
//评论组
r := e.Group("/bbq/app-bbq/reply", wrapBBQ, commentInit)
{
//评论相关
r.GET("/cursor", commentCloseRead, authSrv.Guest, commentCursor)
r.POST("/add", commentCloseWrite, authSrv.User, phoneCheck, replyAntiSpam.ServeHTTP, commentAdd)
r.POST("/action", commentCloseWrite, authSrv.User, likeAntiSpam.ServeHTTP, commentLike)
r.GET("/", commentCloseRead, authSrv.Guest, commentList)
r.GET("/reply/cursor", commentCloseRead, authSrv.Guest, commentSubCursor)
}
// 举报接口
report := e.Group("/bbq/app-bbq/report", wrapBBQ)
{
report.GET("/config", authSrv.Guest, bm.Mobile(), reportConfig)
report.POST("/report", authSrv.Guest, bm.Mobile(), reportAntiSpam.ServeHTTP, reportReport)
}
// 播放数据收集
d := e.Group("/bbq/app-bbq/data", wrapBBQ)
{
d.GET("/collect", authSrv.Guest, bm.Mobile(), videoPlay)
}
// 通知中心,需要登录
p := e.Group("/bbq/app-bbq/notice/center", authSrv.User, wrapBBQ)
{
p.GET("/num", noticeNum)
p.GET("/overview", noticeOverview)
p.GET("/list", noticeList)
}
// 推送相关
push := e.Group("/bbq/app-bbq/push", wrapBBQ, authSrv.Guest, bm.Mobile())
{
push.POST("/register", pushRegister)
push.GET("/callback", pushCallback)
}
//视频上传相关
upload := e.Group("/bbq/app-bbq/upload/sv", authSrv.Guest)
{
upload.POST("/preupload", perUpload)
upload.POST("/callback", callBack)
upload.GET("/check", authSrv.User, uploadCheck)
upload.POST("/homeimg", authSrv.User, homeimg)
}
}
func commentCloseWrite(ctx *bm.Context) {
if conf.Conf.Comment.CloseWrite {
ctx.JSON(struct{}{}, ecode.OK)
ctx.Abort()
}
}
func commentCloseRead(ctx *bm.Context) {
if conf.Conf.Comment.CloseRead {
ctx.JSON(struct{}{}, ecode.OK)
ctx.Abort()
}
}
//wrapRes 为返回头添加BBQ自定义字段
func wrapBBQ(ctx *bm.Context) {
chttp.WrapHeader(ctx)
// Base params
req := ctx.Request
base := new(v1.Base)
ctx.Bind(base)
base.BUVID = req.Header.Get("Buvid")
ctx.Set("BBQBase", base)
// QueryID
qid := base.QueryID
if base.QueryID == "" {
tracer, _ := trace.FromContext(ctx.Context)
qid = fmt.Sprintf("%s", tracer)
}
ctx.Set("QueryID", qid)
}
// phoneCheck 进行手机校验
func phoneCheck(ctx *bm.Context) {
midValue, exists := ctx.Get("mid")
if !exists {
ctx.JSON(nil, ecode.NoLogin)
ctx.Abort()
return
}
mid := midValue.(int64)
err := srv.PhoneCheck(ctx, mid)
if err != nil {
ctx.JSON(nil, err)
ctx.Abort()
return
}
}
func ping(c *bm.Context) {
if err := srv.Ping(c); err != nil {
log.Error("ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
func register(c *bm.Context) {
c.JSON(map[string]interface{}{}, nil)
}
func uiLog(ctx *bm.Context, action int, ext interface{}) {
logger.Infoc(ctx, action, ext)
}

View File

@@ -0,0 +1,27 @@
package http
import (
http "go-common/app/interface/bbq/app-bbq/api/http/v1"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func locationAll(c *bm.Context) {
arg := new(http.LocationRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.GetLocaitonAll(c, arg))
}
func location(c *bm.Context) {
arg := new(http.LocationRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.GetLocationChild(c, arg))
}

View File

@@ -0,0 +1,49 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func noticeNum(c *bm.Context) {
var mid int64
midValue, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
mid = midValue.(int64)
c.JSON(srv.GetNoticeNum(c, mid))
}
func noticeOverview(c *bm.Context) {
var mid int64
midValue, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
mid = midValue.(int64)
c.JSON(srv.NoticeOverview(c, mid))
}
func noticeList(c *bm.Context) {
var mid int64
midValue, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
mid = midValue.(int64)
req := &v1.NoticeListRequest{}
if err := c.Bind(req); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
req.Mid = mid
c.JSON(srv.NoticeList(c, req))
}

View File

@@ -0,0 +1,66 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
notice "go-common/app/service/bbq/notice-service/api/v1"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func pushRegister(c *bm.Context) {
args := &v1.PushRegisterRequest{}
if err := c.Bind(args); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
var mid int64
if tmp, ok := c.Get("mid"); ok {
mid = tmp.(int64)
}
buvid := c.Request.Header.Get("Buvid")
req := &notice.UserPushDev{
Mid: mid,
RegisterId: args.RegID,
Buvid: buvid,
Platform: 1,
Sdk: 1,
}
if args.Platform == "ios" {
req.Platform = 2
}
c.JSON(srv.PushRegister(c, req))
// 埋点
uiLog(c, model.ActionPushRegister, args)
}
func pushLogout(c *bm.Context) {
args := &notice.UserPushDev{}
var mid int64
if tmp, ok := c.Get("mid"); ok {
mid = tmp.(int64)
}
args.Mid = mid
buvid := c.Request.Header.Get("Buvid")
args.Buvid = buvid
c.JSON(srv.PushLogout(c, args))
}
func pushCallback(c *bm.Context) {
args := &v1.PushCallbackRequest{}
if err := c.Bind(args); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
var mid int64
if tmp, ok := c.Get("mid"); ok {
mid = tmp.(int64)
}
buvid := c.Request.Header.Get("Buvid")
c.JSON(srv.PushCallback(c, args, mid, buvid))
// 埋点
uiLog(c, model.ActionPushCallback, args)
}

View File

@@ -0,0 +1,38 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func reportConfig(c *bm.Context) {
arg := new(v1.Base)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
res := &v1.ReportConfigResponse{
Report: model.Reports,
Reasons: model.Reasons,
}
c.JSON(res, nil)
}
func reportReport(c *bm.Context) {
arg := new(v1.ReportRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
accessKey := c.Request.Form.Get("access_key")
c.JSON(srv.Report(c, arg, mid.(int64), accessKey))
}

View File

@@ -0,0 +1,105 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
const (
qn1080 = 80
)
//hotWord .
func hotWord(c *bm.Context) {
arg := new(v1.HotWordRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.HotWord(c, arg))
}
func videoSearch(c *bm.Context) {
arg := new(v1.BaseSearchReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
if arg.Qn == 0 {
arg.Qn = qn1080
}
if arg.PageSize == 0 || arg.PageSize > 20 {
arg.PageSize = 20
}
res, err := srv.VideoSearch(c, arg)
c.JSON(res, err)
// 埋点
if err != nil {
return
}
svidList := make([]int64, len(res.List))
for i, v := range res.List {
svidList[i] = v.SVID
}
ext := struct {
Request *v1.BaseSearchReq
Svid []int64
}{
Request: arg,
Svid: svidList,
}
uiLog(c, model.ActionVideoSearch, ext)
}
func userSearch(c *bm.Context) {
arg := new(v1.BaseSearchReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, _ := c.Get("mid")
if mid == nil {
mid = int64(0)
}
if arg.Qn == 0 {
arg.Qn = qn1080
}
if arg.PageSize == 0 || arg.PageSize > 20 {
arg.PageSize = 20
}
res, err := srv.UserSearch(c, mid.(int64), arg)
c.JSON(res, err)
// 埋点
if err != nil {
return
}
midList := make([]int64, len(res.List))
for i, v := range res.List {
midList[i] = v.Mid
}
ext := struct {
Request *v1.BaseSearchReq
MID []int64
}{
Request: arg,
MID: midList,
}
uiLog(c, model.ActionUserSearch, ext)
}
func sug(c *bm.Context) {
arg := new(v1.SugReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
if arg.PageSize == 0 || arg.PageSize > 20 {
arg.PageSize = 20
}
c.JSON(srv.BBQSug(c, arg))
}

View File

@@ -0,0 +1,56 @@
package http
import (
http "go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func shareURL(c *bm.Context) {
var device *bm.Device
if dev, _ := c.Get("device"); dev != nil {
device = dev.(*bm.Device)
}
mid := int64(0)
if v, _ := c.Get("mid"); v != nil {
mid = v.(int64)
}
arg := &http.ShareRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.GetShareURL(c, mid, device, arg))
}
func shareCallback(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
if mid == nil {
mid = int64(0)
}
arg := &http.ShareCallbackRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
resp, err := srv.ShareCallback(c, mid.(int64), dev.(*bm.Device), arg)
c.JSON(resp, err)
// 埋点
if err != nil {
return
}
ext := struct {
Svid int64
Channel int32
}{
Svid: arg.Svid,
Channel: arg.Channel,
}
uiLog(c, model.ActionShare, ext)
}

View File

@@ -0,0 +1,166 @@
package http
import (
"strconv"
"strings"
v1 "go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
video "go-common/app/service/bbq/video/api/grpc/v1"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// @params SvListReq
// @router get /bbq/app-bbq/sv/list/
// @response VideoResponse
func svList(c *bm.Context) {
b, _ := c.Get("BBQBase")
mid, _ := c.Get("mid")
arg := &v1.SvListReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
arg.Base = b.(*v1.Base)
if mid != nil {
arg.MID = mid.(int64)
} else {
arg.MID = 0
}
//获取deviceID
deviceID := c.Request.Form.Get("device_id")
log.Info("sv list Context [%+v]", c.Request.Header)
log.Info("sv list Base [%+v]", arg.Base)
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
resp, err := srv.SvList(c, arg.PageSize, arg.MID, arg.Base, deviceID)
c.JSON(resp, err)
// 埋点
if err != nil {
return
}
var svidList []int64
for _, v := range resp {
svidList = append(svidList, v.SVID)
}
ext := struct {
Svids []int64 `json:"svid_list"`
}{
Svids: svidList,
}
uiLog(c, model.ActionRecommend, ext)
}
func svDetail(c *bm.Context) {
mid := int64(0)
if res, ok := c.Get("mid"); ok {
mid = res.(int64)
}
arg := &v1.SvDetailReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.SvDetail(c, arg.SVID, mid))
}
//svStatistics 视频互动数据
func svStatistics(c *bm.Context) {
arg := new(model.ParamStatistic)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
ids := strings.Split(arg.SVIDs, ",")
if len(ids) == 0 {
err := ecode.RequestErr
errors.Wrap(err, "svid解析为空")
return
}
var svids []int64
for _, v := range ids {
id, err := strconv.ParseInt(v, 10, 64)
if err != nil {
errors.Wrap(err, "svid解析错误")
return
}
svids = append(svids, id)
}
var mid int64
if res, ok := c.Get("mid"); ok {
mid = res.(int64)
}
c.JSON(srv.SvStatistics(c, mid, svids))
}
func svPlayList(c *bm.Context) {
dev, _ := c.Get("device")
mid, _ := c.Get("mid")
arg := &v1.PlayListReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
arg.Device = dev.(*bm.Device)
if mid != nil {
arg.MID = mid.(int64)
} else {
arg.MID = 0
}
arg.RemoteIP = metadata.String(c, metadata.RemoteIP)
cidStr := strings.Split(arg.CIDs, ",")
var cids []int64
for _, v := range cidStr {
cid, err := strconv.ParseInt(v, 10, 64)
if err != nil {
errors.Wrap(err, "cid解析错误")
return
}
cids = append(cids, cid)
}
c.JSON(srv.SvCPlays(c, cids, arg.MID))
}
func svRelList(c *bm.Context) {
b, _ := c.Get("BBQBase")
mid, _ := c.Get("mid")
arg := &v1.SvRelReq{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
base := b.(*v1.Base)
if mid != nil {
arg.MID = mid.(int64)
} else {
arg.MID = 0
}
arg.BUVID = base.BUVID
arg.APP = base.App
arg.APPVersion = base.Version
arg.QueryID = base.QueryID
arg.Limit = 15
arg.Offset = 0
c.JSON(srv.SvRelRec(c, arg))
}
func svDel(c *bm.Context) {
arg := new(video.VideoDeleteRequest)
if err := c.Bind(arg); err != nil {
return
}
if mid, _ := c.Get("mid"); mid != nil {
arg.UpMid = mid.(int64)
} else {
arg.UpMid = 0
}
c.JSON(srv.SvDel(c, arg))
}

View File

@@ -0,0 +1,50 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
topic "go-common/app/service/bbq/topic/api"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
func topicDetail(c *bm.Context) {
arg := new(topic.TopicVideosReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid := int64(0)
midValue, exists := c.Get("mid")
if exists {
mid = midValue.(int64)
}
c.JSON(srv.TopicDetail(c, mid, arg))
}
func discoveryList(c *bm.Context) {
arg := new(v1.DiscoveryReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid := int64(0)
midValue, exists := c.Get("mid")
if exists {
mid = midValue.(int64)
}
c.JSON(srv.Discovery(c, mid, arg))
}
func topicSearch(c *bm.Context) {
arg := new(v1.TopicSearchReq)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.TopicSearch(c, arg))
}

View File

@@ -0,0 +1,73 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func upload(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(v1.ImgUploadRequest)
if err := c.Bind(arg); err != nil {
c.JSON(nil, ecode.ReqParamErr)
return
}
c.JSON(srv.Upload(c, mid.(int64), arg.Type))
}
func perUpload(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
req := new(v1.PreUploadRequest)
if err := c.Bind(req); err != nil {
log.Errorw(c, "event", "bind param err")
return
}
c.JSON(srv.PreUpload(c, req, mid.(int64)))
}
func callBack(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
req := new(v1.CallBackRequest)
if err := c.Bind(req); err != nil {
log.Errorw(c, "event", "bind param err", err, "err")
return
}
c.JSON(srv.CallBack(c, req, mid.(int64)))
}
func uploadCheck(c *bm.Context) {
tmp, exists := c.Get("mid")
if !exists || tmp.(int64) == 0 {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(srv.VideoUploadCheck(c, tmp.(int64)))
}
func homeimg(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
req := new(v1.HomeImgRequest)
if err := c.Bind(req); err != nil {
log.Errorw(c, "event", "bind param err", err, "err")
return
}
c.JSON(srv.HomeImg(c, req, mid.(int64)))
}

View File

@@ -0,0 +1,229 @@
package http
import (
"go-common/app/interface/bbq/app-bbq/api/http/v1"
"go-common/app/interface/bbq/app-bbq/model"
user "go-common/app/service/bbq/user/api"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
//userBase .
func userBase(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
c.JSON(srv.UserBase(c, mid.(int64)))
}
//spaceUserProfile ...
func spaceUserProfile(c *bm.Context) {
arg := new(v1.SpaceUserProfileRequest)
mid := int64(0)
midValue, exists := c.Get("mid")
if exists {
mid = midValue.(int64)
}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.SpaceUserProfile(c, mid, arg.Upmid))
}
//userEdit
func userBaseEdit(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(user.UserBase)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
arg.Mid = mid.(int64)
c.JSON(srv.UserEdit(c, arg))
}
//addUserLike .
func addUserLike(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(v1.UserLikeAddRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
resp, err := srv.AddUserLike(c, mid.(int64), arg.SVID)
c.JSON(resp, err)
// 埋点
if err == nil {
uiLog(c, model.ActionLike, nil)
}
}
//cancelUserLike .
func cancelUserLike(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(v1.UserLikeCancelRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
resp, err := srv.CancelUserLike(c, mid.(int64), arg.SVID)
c.JSON(resp, err)
// 埋点
if err == nil {
uiLog(c, model.ActionCancelLike, nil)
}
}
//userLikeList .
func userLikeList(c *bm.Context) {
arg := &v1.SpaceSvListRequest{}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
mid, exists := c.Get("mid")
if exists {
arg.MID = mid.(int64)
}
dev, _ := c.Get("device")
arg.Device = dev.(*bm.Device)
arg.Size = model.SpaceListLen
c.JSON(srv.UserLikeList(c, arg))
}
//userFollowList .
func userFollowList(c *bm.Context) {
arg := new(user.ListRelationUserInfoReq)
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.UserFollowList(c, arg))
}
//userFanList .
func userFanList(c *bm.Context) {
arg := new(user.ListRelationUserInfoReq)
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.UserFanList(c, arg))
}
//userBlackList .
func userBlackList(c *bm.Context) {
arg := new(user.ListRelationUserInfoReq)
mid, exists := c.Get("mid")
if exists {
arg.Mid = mid.(int64)
}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
c.JSON(srv.UserBlackList(c, arg))
}
//userRelationModify .
func userRelationModify(c *bm.Context) {
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(v1.UserRelationRequest)
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
var reportAction int
switch arg.Action {
case user.FollowAdd:
reportAction = model.ActionFollow
case user.FollowCancel:
reportAction = model.ActionCancelFollow
case user.BlackAdd:
reportAction = model.ActionBlack
case user.BlackCancel:
reportAction = model.ActionCancelBlack
default:
errors.Wrap(ecode.ReqParamErr, "参数验证失败")
return
}
res, err := srv.ModifyRelation(c, mid.(int64), arg.UPMID, arg.Action)
c.JSON(res, err)
// 埋点
if err == nil && reportAction != 0 {
ext := struct {
UPMID int64 `json:"up_mid"`
}{
UPMID: arg.UPMID,
}
uiLog(c, reportAction, ext)
}
}
//login 登陆
func login(c *bm.Context) {
arg := new(user.UserBase)
mid, exists := c.Get("mid")
if !exists {
c.JSON(nil, ecode.NoLogin)
return
}
if err := c.Bind(arg); err != nil {
errors.Wrap(err, "参数验证失败")
return
}
arg.Mid = mid.(int64)
c.JSON(srv.Login(c, arg))
}
// userUnLike 不感兴趣
func userUnLike(c *bm.Context) {
tmp, exists := c.Get("mid")
if !exists || tmp == nil {
c.JSON(nil, ecode.NoLogin)
return
}
arg := new(v1.UnLikeReq)
if err := c.Bind(arg); err != nil {
return
}
arg.MID = tmp.(int64)
c.JSON(new(interface{}), nil)
// 埋点
uiLog(c, model.ActionUserUnLike, arg)
}