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,44 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"favorite.go",
"http.go",
"video.go",
],
importpath = "go-common/app/interface/main/playlist/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/playlist/conf:go_default_library",
"//app/interface/main/playlist/model:go_default_library",
"//app/interface/main/playlist/service:go_default_library",
"//app/service/main/favorite/model: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/auth:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/xstr: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,360 @@
package http
import (
"strconv"
"go-common/app/interface/main/playlist/conf"
"go-common/app/interface/main/playlist/model"
favmdl "go-common/app/service/main/favorite/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func whiteList(c *bm.Context) {
var (
err error
vmid, mid int64
)
params := c.Request.Form
if midStr, ok := c.Get("mid"); ok {
mid = midStr.(int64)
}
vmidStr := params.Get("vmid")
if vmidStr != "" {
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if mid == 0 && vmid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if vmid > 0 {
mid = vmid
}
c.JSON(plSvc.White(c, mid))
}
func add(c *bm.Context) {
var (
err error
mid, pid, public int64
name, description, cover string
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
publicStr := params.Get("public")
if publicStr != "" {
if public, err = strconv.ParseInt(publicStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
name = params.Get("name")
if name == "" || len([]rune(name)) > conf.Conf.Rule.MaxNameLimit {
c.JSON(nil, ecode.RequestErr)
return
}
description = params.Get("description")
if description != "" {
if len([]rune(description)) > conf.Conf.Rule.MaxPlDescLimit {
c.JSON(nil, ecode.PlDescTooLong)
return
}
}
cover = params.Get("cover")
if pid, err = plSvc.Add(c, mid, int8(public), name, description, cover, c.Request.Header.Get("Cookie"), params.Get("access_key")); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
data := make(map[string]interface{}, 1)
data["pid"] = pid
c.JSON(data, nil)
}
func del(c *bm.Context) {
var (
err error
mid, pid int64
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, switchCode(plSvc.Del(c, mid, pid), favmdl.TypePlayVideo))
}
func update(c *bm.Context) {
var (
err error
mid, pid, public int64
name, description, cover string
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
publicStr := params.Get("public")
if publicStr != "" {
if public, err = strconv.ParseInt(publicStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
name = params.Get("name")
if name == "" || len([]rune(name)) > conf.Conf.Rule.MaxNameLimit {
c.JSON(nil, ecode.RequestErr)
return
}
description = params.Get("description")
if description != "" {
if len([]rune(description)) > conf.Conf.Rule.MaxPlDescLimit {
c.JSON(nil, ecode.RequestErr)
return
}
}
cover = params.Get("cover")
c.JSON(nil, switchCode(plSvc.Update(c, mid, pid, int8(public), name, description, cover, c.Request.Header.Get("Cookie"), params.Get("access_key")), favmdl.TypePlayVideo))
}
func info(c *bm.Context) {
var (
err error
pid, mid int64
list *model.Playlist
)
params := c.Request.Form
if midStr, ok := c.Get("mid"); ok {
mid = midStr.(int64)
}
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if list, err = plSvc.Info(c, mid, pid); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
c.JSON(list, nil)
}
func report(c *bm.Context) {
var (
err error
pid, aid int64
)
params := c.Request.Form
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
aidStr := params.Get("aid")
if aidStr != "" {
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil || aid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
c.JSON(true, plSvc.PubView(c, pid, aid))
}
func reportShare(c *bm.Context) {
var (
err error
pid, aid int64
)
params := c.Request.Form
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
aidStr := params.Get("aid")
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil || aid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(true, plSvc.PubShare(c, pid, aid))
}
func list(c *bm.Context) {
var (
err error
vmid, mid int64
pn, ps, sort, total int
list []*model.Playlist
)
params := c.Request.Form
if midStr, ok := c.Get("mid"); ok {
mid = midStr.(int64)
}
vmidStr := params.Get("vmid")
if vmidStr != "" {
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if mid == 0 && vmid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if vmid > 0 {
mid = vmid
}
pnStr := params.Get("pn")
if pn, err = strconv.Atoi(pnStr); err != nil || pn < 1 {
pn = 1
}
psStr := params.Get("ps")
if ps, err = strconv.Atoi(psStr); err != nil || ps < 1 || ps > conf.Conf.Rule.MaxPlsPageSize {
ps = conf.Conf.Rule.MaxPlsPageSize
}
sortStr := params.Get("sort")
if sortStr != "" {
if sort, err = strconv.Atoi(sortStr); err != nil || sort < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
if list, total, err = plSvc.List(c, mid, pn, ps, sort); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
data := make(map[string]interface{}, 2)
page := map[string]int{
"num": pn,
"size": ps,
"total": total,
}
data["page"] = page
data["list"] = list
c.JSON(data, nil)
}
func addFavorite(c *bm.Context) {
var (
err error
mid, pid int64
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, switchCode(plSvc.AddFavorite(c, mid, pid), favmdl.TypePlayList))
}
func delFavorite(c *bm.Context) {
var (
err error
mid, pid int64
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, switchCode(plSvc.DelFavorite(c, mid, pid), favmdl.TypePlayList))
}
func listFavorite(c *bm.Context) {
var (
err error
mid, vmid int64
pn, ps, sort, total int
list []*model.Playlist
)
params := c.Request.Form
if midStr, ok := c.Get("mid"); ok {
mid = midStr.(int64)
}
vmidStr := params.Get("vmid")
if vmidStr != "" {
if vmid, err = strconv.ParseInt(vmidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
pnStr := params.Get("pn")
if pn, err = strconv.Atoi(pnStr); err != nil || pn < 1 {
pn = 1
}
psStr := params.Get("ps")
if ps, err = strconv.Atoi(psStr); err != nil || ps < 1 || ps > conf.Conf.Rule.MaxPlsPageSize {
ps = conf.Conf.Rule.MaxPlsPageSize
}
sortStr := params.Get("sort")
if sortStr != "" {
if sort, err = strconv.Atoi(sortStr); err != nil || sort < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
if list, total, err = plSvc.ListFavorite(c, mid, vmid, pn, ps, sort); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayList))
return
}
data := make(map[string]interface{}, 2)
page := map[string]int{
"num": pn,
"size": ps,
"total": total,
}
data["page"] = page
data["list"] = list
c.JSON(data, nil)
}
func switchCode(err error, tp int8) error {
if err == nil {
return err
}
switch ecode.Cause(err) {
case ecode.FavNameTooLong:
err = ecode.PlNameTooLong
case ecode.FavFolderExist:
err = ecode.PlExist
case ecode.FavMaxFolderCount:
err = ecode.PlMaxCount
case ecode.FavCanNotDelDefault:
err = ecode.PlCanNotDelDefault
case ecode.FavFloderAlreadyDel:
err = ecode.PlAlreadyDel
case ecode.FavResourceOverflow:
err = ecode.PlVideoOverflow
case ecode.FavResourceAlreadyDel:
if tp == favmdl.TypePlayVideo {
err = ecode.PlVideoAlreadyDel
} else if tp == favmdl.TypePlayList {
err = ecode.PlFavAlreadyDel
}
case ecode.FavResourceExist:
if tp == favmdl.TypePlayVideo {
err = ecode.PlVideoExist
} else if tp == favmdl.TypePlayList {
err = ecode.PlFavExist
}
case ecode.FavFolderNotExist:
err = ecode.PlNotExist
}
return err
}

View File

@@ -0,0 +1,92 @@
package http
import (
"net/http"
"go-common/app/interface/main/playlist/conf"
"go-common/app/interface/main/playlist/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
plSvc *service.Service
authSvr *auth.Auth
vfySvr *verify.Verify
)
// Init init http server
func Init(c *conf.Config, s *service.Service) {
authSvr = auth.New(c.Auth)
vfySvr = verify.New(c.Verify)
plSvc = s
engine := bm.DefaultServer(c.HTTPServer)
outerRouter(engine)
internalRouter(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// outerRouter init outer router api path.
func outerRouter(e *bm.Engine) {
// init api
e.Ping(ping)
group := e.Group("/x/playlist", bm.CORS())
{
group.GET("/whitelist", authSvr.Guest, whiteList)
group.GET("/report", report)
group.GET("/share/report", reportShare)
group.GET("", authSvr.Guest, list)
group.GET("/info", authSvr.Guest, info)
group.POST("/add", authSvr.User, add)
group.POST("/del", authSvr.User, del)
group.POST("/update", authSvr.User, update)
videoGroup := group.Group("/video")
{
videoGroup.GET("", videoList)
videoGroup.POST("/check", authSvr.User, check)
videoGroup.GET("/toview", authSvr.Guest, toView)
videoGroup.POST("/add", authSvr.User, addVideo)
videoGroup.POST("/del", authSvr.User, delVideo)
videoGroup.POST("/sort", authSvr.User, sortVideo)
videoGroup.POST("/desc/edit", authSvr.User, editVideoDesc)
videoGroup.GET("/search", authSvr.User, searchVideo)
}
favGroup := group.Group("/fav")
{
favGroup.GET("", authSvr.Guest, listFavorite)
favGroup.POST("/add", authSvr.User, addFavorite)
favGroup.POST("/del", authSvr.User, delFavorite)
}
}
}
func internalRouter(e *bm.Engine) {
group := e.Group("/x/internal/playlist")
{
group.GET("/whitelist", vfySvr.Verify, whiteList)
group.GET("/report", vfySvr.Verify, report)
group.GET("/share/report", vfySvr.Verify, reportShare)
group.GET("", vfySvr.Verify, list)
group.GET("/info", vfySvr.Verify, info)
videoGroup := group.Group("/video")
{
videoGroup.GET("", vfySvr.Verify, videoList)
videoGroup.GET("/toview", vfySvr.Verify, toView)
videoGroup.GET("/search", vfySvr.Verify, searchVideo)
}
favGroup := group.Group("/fav")
{
favGroup.GET("", vfySvr.Verify, listFavorite)
}
}
}
func ping(c *bm.Context) {
if err := plSvc.Ping(c); err != nil {
log.Error("playlist interface ping error")
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}

View File

@@ -0,0 +1,267 @@
package http
import (
"strconv"
"go-common/app/interface/main/playlist/conf"
"go-common/app/interface/main/playlist/model"
favmdl "go-common/app/service/main/favorite/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
func videoList(c *bm.Context) {
var (
pid int64
pn, ps int
err error
list *model.ArcList
)
params := c.Request.Form
pidStr := params.Get("pid")
pnStr := params.Get("pn")
psStr := params.Get("ps")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if pn, err = strconv.Atoi(pnStr); err != nil || pn < 1 {
pn = 1
}
if ps, err = strconv.Atoi(psStr); err != nil || ps < 1 || ps > conf.Conf.Rule.MaxPlArcsPs {
ps = conf.Conf.Rule.MaxPlArcsPs
}
if list, err = plSvc.Videos(c, pid, pn, ps); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
c.JSON(list, nil)
}
func toView(c *bm.Context) {
var (
pid, mid int64
err error
list *model.ToView
)
params := c.Request.Form
if midStr, ok := c.Get("mid"); ok {
mid = midStr.(int64)
}
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if list, err = plSvc.ToView(c, mid, pid); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
c.JSON(list, nil)
}
func check(c *bm.Context) {
var (
err error
mid, pid int64
aids []int64
videos model.Videos
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
aidStr := params.Get("aids")
if aidStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if aids, err = xstr.SplitInts(aidStr); err != nil || len(aids) == 0 || len(aids) > conf.Conf.Rule.MaxArcChangeLimit {
c.JSON(nil, ecode.RequestErr)
return
}
aidMap := make(map[int64]int64, len(aids))
for _, aid := range aids {
aidMap[aid] = aid
}
if len(aidMap) < len(aids) {
c.JSON(nil, ecode.RequestErr)
return
}
pidStr := params.Get("pid")
if pidStr != "" {
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
if videos, err = plSvc.CheckVideo(c, mid, pid, aids); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
c.JSON(videos, nil)
}
func addVideo(c *bm.Context) {
var (
err error
mid, pid int64
aids []int64
videos model.Videos
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
aidStr := params.Get("aids")
if aidStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if aids, err = xstr.SplitInts(aidStr); err != nil || len(aids) == 0 || len(aids) > conf.Conf.Rule.MaxArcChangeLimit {
c.JSON(nil, ecode.RequestErr)
return
}
aidMap := make(map[int64]int64, len(aids))
for _, aid := range aids {
aidMap[aid] = aid
}
if len(aidMap) < len(aids) {
c.JSON(nil, ecode.RequestErr)
return
}
pidStr := params.Get("pid")
if pidStr != "" {
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
if videos, err = plSvc.AddVideo(c, mid, pid, aids); err != nil {
c.JSON(nil, switchCode(err, favmdl.TypePlayVideo))
return
}
c.JSON(videos, nil)
}
func delVideo(c *bm.Context) {
var (
err error
mid, pid int64
aids []int64
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
aidStr := params.Get("aids")
if aidStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
if aids, err = xstr.SplitInts(aidStr); err != nil || len(aids) == 0 || len(aids) > conf.Conf.Rule.MaxArcChangeLimit {
c.JSON(nil, ecode.RequestErr)
return
}
aidMap := make(map[int64]int64, len(aids))
for _, aid := range aids {
aidMap[aid] = aid
}
if len(aidMap) < len(aids) {
c.JSON(nil, ecode.RequestErr)
return
}
pidStr := params.Get("pid")
if pidStr != "" {
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid < 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
c.JSON(nil, switchCode(plSvc.DelVideo(c, mid, pid, aids), favmdl.TypePlayVideo))
}
func sortVideo(c *bm.Context) {
var (
mid, pid, aid, sort int64
err error
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
aidStr := params.Get("aid")
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil || aid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
sortStr := params.Get("sort")
if sort, err = strconv.ParseInt(sortStr, 10, 64); err != nil || sort <= 0 || sort > int64(conf.Conf.Rule.MaxVideoCnt) {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, switchCode(plSvc.SortVideo(c, mid, pid, aid, sort), favmdl.TypePlayVideo))
}
func editVideoDesc(c *bm.Context) {
var (
err error
mid, pid, aid int64
)
params := c.Request.Form
midStr, _ := c.Get("mid")
mid = midStr.(int64)
pidStr := params.Get("pid")
if pid, err = strconv.ParseInt(pidStr, 10, 64); err != nil || pid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
aidStr := params.Get("aid")
if aid, err = strconv.ParseInt(aidStr, 10, 64); err != nil || aid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
desc := params.Get("desc")
if len([]rune(desc)) > conf.Conf.Rule.MaxVideoDescLimit {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, plSvc.EditVideoDesc(c, mid, pid, aid, desc))
}
func searchVideo(c *bm.Context) {
var (
err error
pn, ps, count int
list []*model.SearchArc
)
params := c.Request.Form
pnStr := params.Get("pn")
if pn, err = strconv.Atoi(pnStr); err != nil || pn < 1 {
pn = 1
}
psStr := params.Get("ps")
if ps, err = strconv.Atoi(psStr); err != nil || ps < 1 || ps > conf.Conf.Rule.MaxSearchArcPs {
ps = conf.Conf.Rule.MaxSearchArcPs
}
query := params.Get("keyword")
if query == "" || len([]rune(query)) > conf.Conf.Rule.MaxSearchLimit {
c.JSON(nil, ecode.RequestErr)
return
}
if list, count, err = plSvc.SearchVideos(c, pn, ps, query); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
data := make(map[string]interface{}, 2)
page := map[string]int{
"num": pn,
"size": ps,
"count": count,
}
data["page"] = page
data["list"] = list
c.JSON(data, nil)
}