Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"rpc.go",
"rpc2.go",
"rpc3.go",
],
importpath = "go-common/app/service/main/archive/server/gorpc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/archive/api:go_default_library",
"//app/service/main/archive/conf:go_default_library",
"//app/service/main/archive/model/archive:go_default_library",
"//app/service/main/archive/service:go_default_library",
"//library/log:go_default_library",
"//library/net/rpc:go_default_library",
"//library/net/rpc/context: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,33 @@
package server
import (
"go-common/app/service/main/archive/conf"
"go-common/app/service/main/archive/service"
"go-common/library/net/rpc"
"go-common/library/net/rpc/context"
)
// RPC rpc.
type RPC struct {
s *service.Service
}
// New new rpc server.
func New(c *conf.Config, s *service.Service) (svr *rpc.Server) {
r := &RPC{s: s}
svr = rpc.NewServer(c.RPCServer)
if err := svr.Register(r); err != nil {
panic(err)
}
return
}
// Auth check connection success.
func (r *RPC) Auth(c context.Context, arg *rpc.Auth, res *struct{}) (err error) {
return
}
// Ping check connection success.
func (r *RPC) Ping(c context.Context, arg *struct{}, res *struct{}) (err error) {
return
}

View File

@@ -0,0 +1,82 @@
package server
import (
"go-common/app/service/main/archive/api"
"go-common/app/service/main/archive/model/archive"
"go-common/library/net/rpc/context"
)
// Types2 get all types
func (r *RPC) Types2(c context.Context, a *struct{}, res *map[int16]*archive.ArcType) (err error) {
*res = r.s.AllTypes(c)
return
}
// Videoshot2 get vidoshot info data.
func (r *RPC) Videoshot2(c context.Context, a *archive.ArgCid2, res *archive.Videoshot) (err error) {
var (
v *archive.Videoshot
)
if v, err = r.s.Videoshot(c, a.Aid, a.Cid); err == nil {
*res = *v
}
return
}
// UpCount2 up count.
func (r *RPC) UpCount2(c context.Context, a *archive.ArgUpCount2, count *int) (err error) {
*count, err = r.s.UpperCount(c, a.Mid)
return
}
// UpsPassed2 ups pass aid and ptime
func (r *RPC) UpsPassed2(c context.Context, a *archive.ArgUpsArcs2, res *map[int64][]*archive.AidPubTime) (err error) {
*res, err = r.s.UppersAidPubTime(c, a.Mids, a.Pn, a.Ps)
return
}
// UpVideo2 up video by aid & cid.
func (r *RPC) UpVideo2(c context.Context, a *archive.ArgVideo2, res *struct{}) (err error) {
return r.s.UpVideo(c, a.Aid, a.Cid)
}
// DelVideo2 delete video by aid & cid.
func (r *RPC) DelVideo2(c context.Context, a *archive.ArgVideo2, res *struct{}) (err error) {
return r.s.DelVideo(c, a.Aid, a.Cid)
}
// Description2 get description by aid.
func (r *RPC) Description2(c context.Context, a *archive.ArgAid, reDes *string) (err error) {
*reDes, err = r.s.Description(c, a.Aid)
return
}
// RanksTopCount2 top region count.
func (r *RPC) RanksTopCount2(c context.Context, a *archive.ArgRankTopsCount2, res *map[int16]int) (err error) {
*res, err = r.s.RegionTopCount(c, a.ReIDs)
return
}
// ArcsStat2 archive stat.
// func (r *RPC) ArcsStat2(c context.Context, a *archive.ArgAids2, res *map[int64]*archive.Stat) (err error) {
// *res, err = r.s.Stats(c, a.Aids)
// return
// }
// ArcCache2 update archive cache.
func (r *RPC) ArcCache2(c context.Context, a *archive.ArgCache2, res *struct{}) (err error) {
err = r.s.CacheUpdate(c, a.Aid, a.Tp, a.OldMid)
return
}
// ArcFieldCache2 update archive by field changed.
func (r *RPC) ArcFieldCache2(c context.Context, a *archive.ArgFieldCache2, res *struct{}) (err error) {
err = r.s.FieldCacheUpdate(c, a.Aid, a.OldTypeID, a.TypeID)
return
}
// SetStat2 set all stat cache(redis)
func (r *RPC) SetStat2(c context.Context, a *api.Stat, res *struct{}) (err error) {
err = r.s.SetStat(c, a)
return
}

View File

@@ -0,0 +1,183 @@
package server
import (
"go-common/app/service/main/archive/api"
"go-common/app/service/main/archive/model/archive"
"go-common/library/log"
"go-common/library/net/rpc/context"
)
// 3结尾的方法全都是pb格式的memcache
// MaxAID get max aid
func (r *RPC) MaxAID(c context.Context, a *struct{}, res *int64) (err error) {
*res, err = r.s.MaxAID(c)
return
}
// Archive3 receive aid, then init archive info.
func (r *RPC) Archive3(c context.Context, a *archive.ArgAid2, res *api.Arc) (err error) {
var ar *api.Arc
if ar, err = r.s.Archive3(c, a.Aid); err == nil {
*res = *ar
}
return
}
// Archives3 receive aids, then init archives info.
func (r *RPC) Archives3(c context.Context, a *archive.ArgAids2, res *map[int64]*api.Arc) (err error) {
if len(a.Aids) > 300 {
log.Error("Too many Args aids(%d) caller(%s) arg(%v)", len(a.Aids), c.User(), a.Aids)
}
*res, err = r.s.Archives3(c, a.Aids)
return
}
// View3 view archive.
func (r *RPC) View3(c context.Context, a *archive.ArgAid2, av *archive.View3) (err error) {
var res *api.ViewReply
if res, err = r.s.View3(c, a.Aid); err == nil {
*av = *archive.BuildView3(res.Arc, res.Pages)
}
return
}
// Views3 view archive.
func (r *RPC) Views3(c context.Context, a *archive.ArgAids2, res *map[int64]*archive.View3) (err error) {
if len(a.Aids) > 300 {
log.Error("Too many Args aids(%d) caller(%s)", len(a.Aids), c.User())
}
var views map[int64]*api.ViewReply
if views, err = r.s.Views3(c, a.Aids); err == nil {
var resp = make(map[int64]*archive.View3)
for aid, view := range views {
v := archive.BuildView3(view.Arc, view.Pages)
if v != nil {
resp[aid] = v
}
}
*res = resp
}
return
}
// Stat3 archive stat.
func (r *RPC) Stat3(c context.Context, a *archive.ArgAid2, res *api.Stat) (err error) {
var st *api.Stat
if st, err = r.s.Stat3(c, a.Aid); err == nil {
*res = *st
}
return
}
// Page3 get videos by aid
func (r *RPC) Page3(c context.Context, a *archive.ArgAid2, res *[]*api.Page) (err error) {
*res, err = r.s.Page3(c, a.Aid)
return
}
// Stats3 archive stats.
func (r *RPC) Stats3(c context.Context, a *archive.ArgAids2, res *map[int64]*api.Stat) (err error) {
if len(a.Aids) > 200 {
log.Error("Too many Args aids(%d) caller(%s)", len(a.Aids), c.User())
log.Error("Too many Args aids(%d) caller(%s) arg(%v)", len(a.Aids), c.User(), a.Aids)
}
*res, err = r.s.Stats3(c, a.Aids)
return
}
// Click3 archive click.
func (r *RPC) Click3(c context.Context, a *archive.ArgAid2, res *api.Click) (err error) {
var clk *api.Click
if clk, err = r.s.Click3(c, a.Aid); err == nil {
*res = *clk
}
return
}
// UpArcs3 up archives.
func (r *RPC) UpArcs3(c context.Context, a *archive.ArgUpArcs2, res *[]*api.Arc) (err error) {
*res, err = r.s.UpperPassed3(c, a.Mid, a.Pn, a.Ps)
return
}
// UpsArcs3 ups archives.
func (r *RPC) UpsArcs3(c context.Context, a *archive.ArgUpsArcs2, res *map[int64][]*api.Arc) (err error) {
*res, err = r.s.UppersPassed3(c, a.Mids, a.Pn, a.Ps)
return
}
// Recommend3 from archive_recommend by aid
func (r *RPC) Recommend3(c context.Context, a *archive.ArgAid2, res *[]*api.Arc) (err error) {
*res, err = r.s.UpperReommend(c, a.Aid)
return
}
// RankArcs3 Arcs by rid
func (r *RPC) RankArcs3(c context.Context, a *archive.ArgRank2, res *archive.RankArchives3) (err error) {
if a.Type == 0 {
res.Archives, res.Count, err = r.s.RegionArcs3(c, a.Rid, a.Pn, a.Ps)
} else {
res.Archives, res.Count, err = r.s.RegionOriginArcs3(c, a.Rid, a.Pn, a.Ps)
}
return
}
// ArchivesWithPlayer archives with player info
func (r *RPC) ArchivesWithPlayer(c context.Context, a *archive.ArgPlayer, res *map[int64]*archive.ArchiveWithPlayer) (err error) {
var as map[int64]*archive.ArchiveWithPlayer
if as, err = r.s.ArchivesWithPlayer(c, a, false); err != nil {
return
}
*res = as
return
}
// RanksArcs3 Arcs by rids
func (r *RPC) RanksArcs3(c context.Context, a *archive.ArgRanks2, res *map[int16]*archive.RankArchives3) (err error) {
var (
as []*api.Arc
tmp map[int16]*archive.RankArchives3
count int
)
tmp = make(map[int16]*archive.RankArchives3)
for _, rid := range a.Rids {
if a.Type == 0 {
as, count, err = r.s.RegionArcs3(c, rid, a.Pn, a.Ps)
} else {
as, count, err = r.s.RegionOriginArcs3(c, rid, a.Pn, a.Ps)
}
if err != nil {
return
}
tmp[rid] = &archive.RankArchives3{Archives: as, Count: count}
}
*res = tmp
return
}
// RankTopArcs3 Arcs by reids
func (r *RPC) RankTopArcs3(c context.Context, a *archive.ArgRankTop2, res *[]*api.Arc) (err error) {
*res, err = r.s.RegionTopArcs3(c, a.ReID, a.Pn, a.Ps)
return
}
// RankAllArcs3 left 7 days all Arcs
func (r *RPC) RankAllArcs3(c context.Context, a *archive.ArgRankAll2, res *archive.RankArchives3) (err error) {
var data *archive.RankArchives3
data, err = r.s.RegionAllArcs3(c, a.Pn, a.Ps)
if err == nil {
*res = *data
}
return
}
// Video3 get video by aid & cid.
func (r *RPC) Video3(c context.Context, a *archive.ArgVideo2, res *api.Page) (err error) {
var p *api.Page
p, err = r.s.Video3(c, a.Aid, a.Cid)
if err == nil {
*res = *p
}
return
}

View File

@@ -0,0 +1,36 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"builder.go",
"server.go",
],
importpath = "go-common/app/service/main/archive/server/grpc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/archive/api:go_default_library",
"//app/service/main/archive/service:go_default_library",
"//library/net/rpc/warden: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,92 @@
package grpc
import (
v1 "go-common/app/service/main/archive/api"
)
func (s *server) archive3ToArc(a *v1.Arc) (arc *v1.Arc) {
arc = &v1.Arc{
Aid: a.Aid,
Videos: a.Videos,
TypeID: a.TypeID,
TypeName: a.TypeName,
Copyright: a.Copyright,
Pic: a.Pic,
Title: a.Title,
PubDate: a.PubDate,
Ctime: a.Ctime,
Desc: a.Desc,
State: a.State,
Access: a.Access,
Attribute: a.Attribute,
Duration: a.Duration,
MissionID: a.MissionID,
OrderID: a.OrderID,
RedirectURL: a.RedirectURL,
Forward: a.Forward,
Rights: v1.Rights{
Bp: a.Rights.Bp,
Elec: a.Rights.Elec,
Download: a.Rights.Download,
Movie: a.Rights.Movie,
Pay: a.Rights.Pay,
HD5: a.Rights.HD5,
NoReprint: a.Rights.NoReprint,
Autoplay: a.Rights.Autoplay,
UGCPay: a.Rights.UGCPay,
IsCooperation: a.Rights.IsCooperation,
},
Author: v1.Author{
Mid: a.Author.Mid,
Name: a.Author.Name,
Face: a.Author.Face,
},
Stat: v1.Stat{
Aid: a.Stat.Aid,
View: a.Stat.View,
Danmaku: a.Stat.Danmaku,
Reply: a.Stat.Reply,
Fav: a.Stat.Fav,
Coin: a.Stat.Coin,
Share: a.Stat.Share,
NowRank: a.Stat.NowRank,
HisRank: a.Stat.HisRank,
Like: a.Stat.Like,
DisLike: a.Stat.DisLike,
},
ReportResult: a.ReportResult,
Dynamic: a.Dynamic,
FirstCid: a.FirstCid,
Dimension: v1.Dimension{
Width: a.Dimension.Width,
Height: a.Dimension.Height,
Rotate: a.Dimension.Rotate,
},
}
for _, si := range a.StaffInfo {
if si != nil {
arc.StaffInfo = append(arc.StaffInfo, &v1.StaffInfo{Mid: si.Mid, Title: si.Title})
}
}
return
}
// ChangeToGrpc is
func (s *server) page3ToPage(v *v1.Page) (vg *v1.Page) {
vg = &v1.Page{
Cid: v.Cid,
Page: v.Page,
From: v.From,
Part: v.Part,
Duration: v.Duration,
Vid: v.Vid,
Desc: v.Desc,
WebLink: v.WebLink,
Dimension: v1.Dimension{
Width: v.Dimension.Width,
Height: v.Dimension.Height,
Rotate: v.Dimension.Rotate,
},
}
return
}

View File

@@ -0,0 +1,177 @@
package grpc
import (
"context"
v1 "go-common/app/service/main/archive/api"
"go-common/app/service/main/archive/service"
"go-common/library/net/rpc/warden"
)
type server struct {
srv *service.Service
}
// New grpc server
func New(cfg *warden.ServerConfig, srv *service.Service) (wsvr *warden.Server, err error) {
wsvr = warden.NewServer(cfg)
v1.RegisterArchiveServer(wsvr.Server(), &server{srv: srv})
wsvr, err = wsvr.Start()
return
}
// Types get all types
func (s *server) Types(c context.Context, noArg *v1.NoArgRequest) (resp *v1.TypesReply, err error) {
types := s.srv.AllTypes(c)
resp = new(v1.TypesReply)
resp.Types = make(map[int32]*v1.Tp)
for _, tp := range types {
resp.Types[int32(tp.ID)] = &v1.Tp{
ID: int32(tp.ID),
Pid: int32(tp.Pid),
Name: tp.Name,
}
}
return
}
// Arc get archive
func (s *server) Arc(c context.Context, req *v1.ArcRequest) (resp *v1.ArcReply, err error) {
resp = new(v1.ArcReply)
a, err := s.srv.Archive3(c, req.Aid)
if err != nil {
return
}
resp.Arc = a
return
}
// Arcs get archives
func (s *server) Arcs(c context.Context, req *v1.ArcsRequest) (resp *v1.ArcsReply, err error) {
resp = new(v1.ArcsReply)
resp.Arcs = make(map[int64]*v1.Arc)
as, err := s.srv.Archives3(c, req.Aids)
if err != nil {
return
}
if len(as) == 0 {
return
}
for aid, a := range as {
resp.Arcs[aid] = a
}
return
}
// View get archive and page
func (s *server) View(c context.Context, req *v1.ViewRequest) (resp *v1.ViewReply, err error) {
resp = new(v1.ViewReply)
v, err := s.srv.View3(c, req.Aid)
if err != nil {
return
}
resp = v
return
}
// Views get archives and pages
func (s *server) Views(c context.Context, req *v1.ViewsRequest) (resp *v1.ViewsReply, err error) {
resp = new(v1.ViewsReply)
resp.Views = make(map[int64]*v1.ViewReply)
vs, err := s.srv.Views3(c, req.Aids)
if err != nil {
return
}
if len(vs) == 0 {
return
}
resp.Views = vs
return
}
func (s *server) Stat(c context.Context, req *v1.StatRequest) (resp *v1.StatReply, err error) {
resp = new(v1.StatReply)
stat, err := s.srv.Stat3(c, req.Aid)
if err != nil {
return
}
resp.Stat = stat
return
}
func (s *server) Stats(c context.Context, req *v1.StatsRequest) (resp *v1.StatsReply, err error) {
resp = new(v1.StatsReply)
resp.Stats = make(map[int64]*v1.Stat)
stats, err := s.srv.Stats3(c, req.Aids)
if err != nil {
return
}
resp.Stats = stats
return
}
func (s *server) Click(c context.Context, req *v1.ClickRequest) (resp *v1.ClickReply, err error) {
resp = new(v1.ClickReply)
resp.Click, err = s.srv.Click3(c, req.Aid)
return
}
func (s *server) Page(c context.Context, req *v1.PageRequest) (resp *v1.PageReply, err error) {
resp = new(v1.PageReply)
resp.Pages, err = s.srv.Page3(c, req.Aid)
return
}
func (s *server) Recommend(c context.Context, req *v1.RecommendRequest) (resp *v1.RecommendReply, err error) {
resp = new(v1.RecommendReply)
resp.Arcs, err = s.srv.UpperReommend(c, req.Aid)
return
}
func (s *server) Video(c context.Context, req *v1.VideoRequest) (resp *v1.VideoReply, err error) {
resp = new(v1.VideoReply)
resp.Page, err = s.srv.Video3(c, req.Aid, req.Cid)
return
}
func (s *server) MaxAid(c context.Context, req *v1.NoArgRequest) (resp *v1.MaxAidReply, err error) {
resp = new(v1.MaxAidReply)
resp.Aid, err = s.srv.MaxAID(c)
return
}
func (s *server) ArcFieldCache(c context.Context, req *v1.ArcFieldCacheRequest) (resp *v1.NoReply, err error) {
resp = new(v1.NoReply)
err = s.srv.FieldCacheUpdate(c, req.Aid, int16(req.OldTypeID), int16(req.TypeID))
return
}
func (s *server) ArcCache(c context.Context, req *v1.ArcCacheRequest) (resp *v1.NoReply, err error) {
resp = new(v1.NoReply)
err = s.srv.CacheUpdate(c, req.Aid, req.Tp, req.OldMid)
return
}
func (s *server) DelVideoCache(c context.Context, req *v1.DelVideoCacheRequest) (resp *v1.NoReply, err error) {
resp = new(v1.NoReply)
err = s.srv.DelVideo(c, req.Aid, req.Cid)
return
}
func (s *server) UpVideoCache(c context.Context, req *v1.UpVideoCacheRequest) (resp *v1.NoReply, err error) {
resp = new(v1.NoReply)
err = s.srv.UpVideo(c, req.Aid, req.Cid)
return
}
func (s *server) Description(c context.Context, req *v1.DescriptionRequest) (resp *v1.DescriptionReply, err error) {
resp = new(v1.DescriptionReply)
resp.Desc, err = s.srv.Description(c, req.Aid)
return
}
func (s *server) SetStat(c context.Context, req *v1.SetStatRequest) (resp *v1.NoReply, err error) {
resp = new(v1.NoReply)
err = s.srv.SetStat(c, req.Stat)
return
}

View File

@@ -0,0 +1,63 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["http_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/service/main/archive/conf:go_default_library",
"//app/service/main/archive/service:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"http.go",
"local.go",
"region.go",
"shot.go",
"stat.go",
"upper.go",
"video.go",
],
importpath = "go-common/app/service/main/archive/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/archive/api:go_default_library",
"//app/service/main/archive/conf:go_default_library",
"//app/service/main/archive/model/archive:go_default_library",
"//app/service/main/archive/service: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/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,95 @@
package http
import (
"strconv"
"go-common/app/service/main/archive/model/archive"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
// arcInfo write the archive data.
func arcInfo(c *bm.Context) {
var (
err error
aid int64
)
params := c.Request.Form
aidStr := params.Get("aid")
// check params
aid, err = strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Archive3(c, aid))
}
// archives write the archives data.
func archives(c *bm.Context) {
params := c.Request.Form
aidsStr := params.Get("aids")
// check params
aids, err := xstr.SplitInts(aidsStr)
if err != nil {
log.Error("query aids(%s) split error(%v)", aidsStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
if params.Get("appkey") == "fb06a25c6338edbc" && len(aids) > 50 {
c.JSON(nil, ecode.RequestErr)
return
}
if len(aids) > 50 {
log.Error("Too many Args aids(%d) caller(%s)", len(aids), params.Get("appkey"))
}
c.JSON(arcSvc.Archives3(c, aids))
}
// archivesWithPlayer write the archives data.
func archivesWithPlayer(c *bm.Context) {
params := c.Request.Form
aidsStr := params.Get("aids")
qnStr := params.Get("qn")
pt := params.Get("platform")
ip := params.Get("ip")
fnver, _ := strconv.Atoi(params.Get("fnver"))
fnval, _ := strconv.Atoi(params.Get("fnval"))
forceHost, _ := strconv.Atoi(params.Get("force_host"))
session := params.Get("session")
containsPGC, _ := strconv.Atoi(params.Get("contains_pgc"))
build, _ := strconv.Atoi(params.Get("build"))
// check params
aids, err := xstr.SplitInts(aidsStr)
if err != nil {
log.Error("query aids(%s) split error(%v)", aidsStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
if len(aids) > 50 {
c.JSON(nil, ecode.RequestErr)
return
}
qn, _ := strconv.Atoi(qnStr)
c.JSON(arcSvc.ArchivesWithPlayer(c, &archive.ArgPlayer{
Aids: aids,
Qn: qn,
Platform: pt,
Build: build,
RealIP: ip,
Fnval: fnval,
Fnver: fnver,
Session: session,
ForceHost: forceHost,
}, containsPGC == 1))
}
func typelist(c *bm.Context) {
c.JSON(arcSvc.AllTypes(c), nil)
}
func maxAID(c *bm.Context) {
c.JSON(arcSvc.MaxAID(c))
}

View File

@@ -0,0 +1,80 @@
package http
import (
"go-common/app/service/main/archive/conf"
"go-common/app/service/main/archive/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
idfSvc *verify.Verify
arcSvc *service.Service
)
// Init init http router.
func Init(c *conf.Config, s *service.Service) {
arcSvc = s
idfSvc = verify.New(nil)
// init internal router
en := bm.DefaultServer(c.BM.Inner)
innerRouter(en)
// init internal server
if err := en.Start(); err != nil {
log.Error("xhttp.Serve error(%v)", err)
panic(err)
}
// init external router
enlocal := bm.DefaultServer(c.BM.Local)
localRouter(enlocal)
// init external server
if err := enlocal.Start(); err != nil {
log.Error("xhttp.Serve error(%v)", err)
panic(err)
}
}
// innerRouter init inner router.
func innerRouter(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
archive := e.Group("/x/internal/v2/archive", bm.CORS())
{
archive.GET("", idfSvc.Verify, arcInfo)
archive.GET("/view", idfSvc.Verify, arcView)
archive.GET("/views", idfSvc.Verify, arcViews)
archive.GET("/page", idfSvc.Verify, arcPage)
archive.GET("/video", idfSvc.Verify, video)
archive.GET("/archives", idfSvc.Verify, archives)
archive.GET("/archives/playurl", idfSvc.Verify, archivesWithPlayer)
archive.GET("/typelist", idfSvc.Verify, typelist)
archive.GET("/description", idfSvc.Verify, description)
archive.GET("/maxAid", idfSvc.Verify, maxAID)
regionGp := archive.Group("/region")
{
regionGp.GET("", idfSvc.Verify, regionArcs)
}
videoshotGp := archive.Group("/videoshot")
{
videoshotGp.GET("", idfSvc.Verify, videoshot)
}
statGp := archive.Group("/stat")
{
statGp.GET("", idfSvc.Verify, arcStat)
statGp.GET("/stats", idfSvc.Verify, arcStats)
}
upGp := archive.Group("/up")
{
upGp.GET("/count/batch", idfSvc.Verify, uppersCount)
upGp.GET("/count", idfSvc.Verify, upperCount)
upGp.GET("/passed", idfSvc.Verify, upperPassed)
upGp.GET("/cache", idfSvc.Verify, upperCache)
}
}
}
// localRouter init local router.
func localRouter(e *bm.Engine) {
e.GET("/archive-service/rank/init", addRegionArc)
}

View File

@@ -0,0 +1,123 @@
package http
import (
"context"
"encoding/json"
"flag"
"net/url"
"path/filepath"
"testing"
"go-common/app/service/main/archive/conf"
"go-common/app/service/main/archive/service"
ghttp "go-common/library/net/http/blademaster"
. "github.com/smartystreets/goconvey/convey"
)
var (
s *service.Service
client *ghttp.Client
)
func init() {
dir, _ := filepath.Abs("../cmd/archive-service-test.toml")
flag.Set("conf", dir)
conf.Init()
s = service.New(conf.Conf)
Init(conf.Conf, s)
client = ghttp.NewClient(conf.Conf.PlayerClient)
}
func Test_Archive(t *testing.T) {
Convey("/x/internal/v2/archive", t, func() {
p := url.Values{}
p.Set("aid", "10098813")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Get(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}
func Test_ArchiveView(t *testing.T) {
Convey("/x/internal/v2/archive/view", t, func() {
p := url.Values{}
p.Set("aid", "10098813")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Get(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive/view", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}
func Test_ArchiveViews(t *testing.T) {
Convey("/x/internal/v2/archive/views", t, func() {
p := url.Values{}
p.Set("aids", "10098813,10098825,10098813")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Get(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive/views", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}
func Test_RegionArcs(t *testing.T) {
Convey("/x/internal/v2/archive/region", t, func() {
p := url.Values{}
p.Set("rid", "182")
p.Set("ps", "20")
p.Set("pn", "1")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Get(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive/region", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}
func Test_ShareAdd(t *testing.T) {
Convey("/x/internal/v2/archive/share/add", t, func() {
p := url.Values{}
p.Set("aid", "5463554")
p.Set("mid", "1684013")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Post(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive/share/add", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}
func Test_UpCount(t *testing.T) {
Convey("/x/internal/v2/archive/up/count", t, func() {
p := url.Values{}
p.Set("mid", "27515232")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
err := client.Get(context.TODO(), "http://0.0.0.0:6081/x/internal/v2/archive/up/count", "", p, &res)
So(err, ShouldBeNil)
So(res.Code, ShouldBeZeroValue)
Printf("code(%d) data(%s)\n", res.Code, res.Data)
})
}

View File

@@ -0,0 +1,20 @@
package http
import (
"net/http"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// ping check server ok.
func ping(c *bm.Context) {
if err := arcSvc.Ping(c); err != nil {
log.Error("archive service ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
func register(c *bm.Context) {
c.JSON(nil, nil)
}

View File

@@ -0,0 +1,75 @@
package http
import (
"strconv"
"go-common/app/service/main/archive/api"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// regionArcs.
func regionArcs(c *bm.Context) {
params := c.Request.Form
ridStr := params.Get("rid")
tpStr := params.Get("type")
pnStr := params.Get("pn")
psStr := params.Get("ps")
// check params
rid, err := strconv.ParseInt(ridStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var tp int64
if tpStr != "" {
if tp, err = strconv.ParseInt(tpStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
pn, err := strconv.Atoi(pnStr)
if err != nil || pn < 1 {
pn = 1
}
ps, err := strconv.Atoi(psStr)
if err != nil || ps < 1 || ps > 100 {
ps = 20
}
// service
var (
as []*api.Arc
count int
)
if tp == 0 {
as, count, err = arcSvc.RegionArcs3(c, int16(rid), pn, ps)
} else {
as, count, err = arcSvc.RegionOriginArcs3(c, int16(rid), pn, ps)
}
if err != nil {
c.JSON(nil, err)
return
}
var res struct {
Archives []*api.Arc `json:"archives"`
Page struct {
Count int `json:"count"`
Num int `json:"num"`
Size int `json:"size"`
} `json:"page"`
}
res.Archives = as
res.Page.Num = pn
res.Page.Size = ps
res.Page.Count = count
c.JSON(res, nil)
}
// addRegionArc.
func addRegionArc(c *bm.Context) {
params := c.Request.Form
ridStr := params.Get("rid")
// check params
rid, _ := strconv.ParseInt(ridStr, 10, 64)
c.JSON(nil, arcSvc.AddRegionArcs(c, int16(rid)))
}

View File

@@ -0,0 +1,27 @@
package http
import (
"strconv"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func videoshot(c *bm.Context) {
params := c.Request.Form
cidStr := params.Get("cid")
aidStr := params.Get("aid")
// check params
cid, err := strconv.ParseInt(cidStr, 10, 64)
if err != nil || cid == 0 {
log.Warn("query (cid) must be number and > 0 but (%s) error(%v)", cidStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil || aid == 0 {
log.Warn("videoshot aid(%s) error", aidStr)
}
c.JSON(arcSvc.Videoshot(c, aid, cid))
}

View File

@@ -0,0 +1,37 @@
package http
import (
"strconv"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
// arcStat get archive stat.
func arcStat(c *bm.Context) {
params := c.Request.Form
aidStr := params.Get("aid")
// check params
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Stat3(c, aid))
}
// arcStats get archives stat.
func arcStats(c *bm.Context) {
params := c.Request.Form
aidsStr := params.Get("aids")
// check params
aids, err := xstr.SplitInts(aidsStr)
if err != nil {
log.Error("query aids(%s) split error(%v)", aidsStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Stats3(c, aids))
}

View File

@@ -0,0 +1,102 @@
package http
import (
"strconv"
"context"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
func upperPassed(c *bm.Context) {
params := c.Request.Form
midStr := params.Get("mid")
pnStr := params.Get("pn")
psStr := params.Get("ps")
// check params
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
log.Error("strconv.ParseInt(%s) error(%v)", midStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
// deal
pn, err := strconv.Atoi(pnStr)
if err != nil || pn < 1 {
pn = 1
}
ps, err := strconv.Atoi(psStr)
if err != nil || ps < 1 || ps > 100 {
ps = 20
}
as, err := arcSvc.UpperPassed3(c, mid, pn, ps)
if err != nil {
if ec := ecode.Cause(err); ec != ecode.NothingFound {
log.Error("arcSvc.UpperPassed(%d) error(%d)", mid, err)
}
c.JSON(nil, err)
return
}
c.JSON(as, err)
}
// upperCount write the count of archives of Up.
func upperCount(c *bm.Context) {
params := c.Request.Form
midStr := params.Get("mid")
// check params
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
log.Error("strconv.ParseInt(%s) error(%v)", midStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
count, err := arcSvc.UpperCount(c, mid)
if err != nil {
c.JSON(nil, err)
log.Error("arcSvc.UpperCount(%d) error(%d)", mid, err)
return
}
var res struct {
Count int `json:"count"`
}
res.Count = count
c.JSON(res, nil)
}
// uppersCount uppers count
func uppersCount(c *bm.Context) {
params := c.Request.Form
midsStr := params.Get("mids")
// check params
mids, err := xstr.SplitInts(midsStr)
if err != nil {
log.Error("query mids(%s) split error(%v)", midsStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
if len(mids) > 20 {
log.Error("query mids(%s) too long", midsStr)
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.UppersCount(c, mids))
}
// upperCache delete user cache.
func upperCache(c *bm.Context) {
params := c.Request.Form
midStr := params.Get("mid")
action := params.Get("modifiedAttr")
// check params
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if action == "updateUname" || action == "updateFace" || action == "updateByAdmin" {
c.JSON(nil, arcSvc.UpperCache(context.TODO(), mid, action))
}
}

View File

@@ -0,0 +1,87 @@
package http
import (
"strconv"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
// arcView archive with page info.
func arcView(c *bm.Context) {
params := c.Request.Form
// check params
aidStr := params.Get("aid")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.View3(c, aid))
}
// arcViews archives with page info by aids
func arcViews(c *bm.Context) {
params := c.Request.Form
aidsStr := params.Get("aids")
// check params
aids, err := xstr.SplitInts(aidsStr)
if err != nil {
log.Error("query aids(%s) split error(%v)", aidsStr, err)
c.JSON(nil, ecode.RequestErr)
return
}
if len(aids) > 20 {
log.Error("query aids(%s) too long, appkey(%s)", aidsStr, params.Get("appkey"))
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Views3(c, aids))
}
// arcPage get pages by aid
func arcPage(c *bm.Context) {
params := c.Request.Form
// check params
aidStr := params.Get("aid")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Page3(c, aid))
}
// video get video by aid & cid.
func video(c *bm.Context) {
params := c.Request.Form
// check params
aidStr := params.Get("aid")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
cidStr := params.Get("cid")
cid, err := strconv.ParseInt(cidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Video3(c, aid, cid))
}
// description get description by aid & cid.
func description(c *bm.Context) {
params := c.Request.Form
// check params
aidStr := params.Get("aid")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(arcSvc.Description(c, aid))
}