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,52 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"black.go",
"follower.go",
"following.go",
"http.go",
"monitor.go",
"relation.go",
"stat.go",
"tag.go",
"whisper.go",
],
importpath = "go-common/app/service/main/relation/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/relation/conf:go_default_library",
"//app/service/main/relation/model:go_default_library",
"//app/service/main/relation/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/antispam:go_default_library",
"//library/net/http/blademaster/middleware/rate:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/net/metadata:go_default_library",
"//library/time: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,81 @@
package http
import (
"go-common/library/ecode"
"strconv"
bm "go-common/library/net/http/blademaster"
)
// Blacks get user's black list.
func blacks(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Blacks(c, mid))
}
// addBlack add black.
func addBlack(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.AddBlack(c, mid, fid, uint8(src), ric))
}
// delBlack del black.
func delBlack(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.DelBlack(c, mid, fid, uint8(src), ric))
}

View File

@ -0,0 +1,70 @@
package http
import (
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// followers get user's follower list.
func followers(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Followers(c, mid))
}
// delFollower del follower.
func delFollower(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
// mid移除粉丝fid对fid对mid的关注状态进行更改
c.JSON(nil, relationSvc.DelFollower(c, fid, mid, uint8(src), ric))
}
// delFollowerCache del follower cache.
func delFollowerCache(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelFollowerCache(c, mid))
}

View File

@ -0,0 +1,148 @@
package http
import (
"strconv"
"go-common/app/service/main/relation/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/time"
)
// followings get user's following list.
func followings(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Followings(c, mid))
}
// addFollowing add following.
func addFollowing(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.AddFollowing(c, mid, fid, uint8(src), ric))
}
// delFollowing del following.
func delFollowing(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.DelFollowing(c, mid, fid, uint8(src), ric))
}
// delFollowingCache del following cache.
func delFollowingCache(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelFollowingCache(c, mid))
}
// updateFollowingCache update following cache.
func updateFollowingCache(c *bm.Context) {
var (
err error
mid, fid int64
na uint64
mts int64
following *model.Following
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
naStr = params.Get("attribute")
mtStr = params.Get("mtime")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if na, err = strconv.ParseUint(naStr, 10, 32); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mts, err = strconv.ParseInt(mtStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
following = &model.Following{
Mid: fid,
Attribute: uint32(na),
MTime: time.Time(mts),
}
c.JSON(nil, relationSvc.UpdateFollowingCache(c, mid, following))
}
func sameFollowings(c *bm.Context) {
arg := new(model.ArgSameFollowing)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(relationSvc.SameFollowings(c, arg))
}

View File

@ -0,0 +1,141 @@
package http
import (
"net/http"
"go-common/app/service/main/relation/conf"
"go-common/app/service/main/relation/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/antispam"
"go-common/library/net/http/blademaster/middleware/rate"
v "go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/metadata"
)
var (
anti *antispam.Antispam
relationSvc *service.Service
verify *v.Verify
addFollowingRate *rate.Limiter
)
// Init init http sever instance.
func Init(c *conf.Config, s *service.Service) {
relationSvc = s
verify = v.New(c.Verify)
anti = antispam.New(c.Antispam)
addFollowingRate = rate.New(c.AddFollowingRate)
// init inner router
engine := bm.DefaultServer(c.BM)
setupInnerEngine(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start() error(%v)", err)
panic(err)
}
}
// innerRouter init inner router.
func setupInnerEngine(e *bm.Engine) {
// health check
e.Ping(ping)
e.Register(register)
//new defined api lists
g := e.Group("/x/internal/relation", verify.Verify)
// relation
g.GET("", relation)
g.GET("/relations", relations)
// stat
g.GET("/stat", stat)
g.GET("/stats", stats)
// private api
g.POST("/stat/set", setStat)
g.POST("/tag/cache/del", delTagCache)
g.GET("/tag/special", special)
// following group
following := g.Group("/following")
following.GET("/followings", followings)
following.GET("/same/followings", sameFollowings)
following.POST("/add", addFollowingRate.Handler(), anti.ServeHTTP, addFollowing)
following.POST("/del", anti.ServeHTTP, delFollowing)
// whisper group
whisper := g.Group("/whisper")
whisper.GET("/whispers", whispers)
whisper.POST("/add", anti.ServeHTTP, addWhisper)
whisper.POST("/del", anti.ServeHTTP, delWhisper)
// black group
black := g.Group("/black")
black.GET("/blacks", blacks)
black.POST("/add", anti.ServeHTTP, addBlack)
black.POST("/del", anti.ServeHTTP, delBlack)
// follower group
follower := g.Group("/follower")
follower.GET("/followers", followers)
follower.POST("/del", anti.ServeHTTP, delFollower)
// recommend group
// recommend := g.Group("/recommend")
// recommend.GET("/global/hot", globalHot)
// cache group
cache := g.Group("/cache")
cache.POST("/following/del", delFollowingCache)
cache.POST("/following/update", updateFollowingCache)
cache.POST("/follower/del", delFollowerCache)
cache.POST("/stat/del", delStatCache)
// cache group
admin := g.Group("/admin")
admin.POST("/monitor/add", addMonitor)
admin.POST("/monitor/del", delMonitor)
admin.GET("/monitor/load", loadMonitor)
}
// ping check server ok.
func ping(c *bm.Context) {
if err := relationSvc.Ping(c); err != nil {
log.Error("service ping error(%v)", err)
c.Writer.WriteHeader(http.StatusServiceUnavailable)
}
}
// register check server ok.
func register(c *bm.Context) {
c.JSON(map[string]struct{}{}, nil)
}
func infocArg(c *bm.Context) (arg map[string]string) {
var (
ua string
referer string
sid string
req = c.Request
)
ua = req.Header.Get(service.RelInfocUA)
referer = req.Header.Get(service.RelInfocReferer)
sidCookie, err := req.Cookie(service.RelInfocSid)
if err != nil {
log.Warn("relation infoc get sid failed error(%v)", err)
} else {
sid = sidCookie.Value
}
buvid := req.Header.Get(service.RelInfocHeaderBuvid)
if buvid == "" {
buvidCookie, _ := req.Cookie(service.RelInfocCookieBuvid)
if buvidCookie != nil {
buvid = buvidCookie.Value
}
}
arg = map[string]string{
service.RelInfocIP: metadata.String(c, metadata.RemoteIP),
service.RelInfocReferer: referer,
service.RelInfocSid: sid,
service.RelInfocBuvid: buvid,
service.RelInfocUA: ua,
}
return
}

View File

@ -0,0 +1,51 @@
package http
import (
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// addMonitor
func addMonitor(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.AddMonitor(c, mid))
}
// delMonitor
func delMonitor(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelMonitor(c, mid))
}
// loadMonitor
func loadMonitor(c *bm.Context) {
c.JSON(nil, relationSvc.LoadMonitor(c))
}

View File

@ -0,0 +1,54 @@
package http
import (
"strconv"
"strings"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// relation get relation between mid and fid.
func relation(c *bm.Context) {
var (
err error
mid, fid int64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Relation(c, mid, fid))
}
// relations get relations between mid and fids.
func relations(c *bm.Context) {
var (
err error
mid, fid int64
fids []int64
params = c.Request.Form
midStr = params.Get("mid")
fidsStr = params.Get("fids")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
fidsStrArr := strings.Split(fidsStr, ",")
for _, v := range fidsStrArr {
if fid, err = strconv.ParseInt(v, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
fids = append(fids, fid)
}
c.JSON(relationSvc.Relations(c, mid, fids))
}

View File

@ -0,0 +1,113 @@
package http
import (
"strconv"
"go-common/app/service/main/relation/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/xstr"
)
// stat get stat.
func stat(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Stat(c, mid))
}
// stat get user's follower list.
func stats(c *bm.Context) {
var (
err error
params = c.Request.Form
midsStr = params.Get("mids")
)
mids, err := xstr.SplitInts(midsStr)
if err != nil || len(mids) > 20 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Stats(c, mids))
}
// setStat set stat.
func setStat(c *bm.Context) {
var (
err error
mid int64
f, w, b, fr int64
st *model.Stat
params = c.Request.Form
midStr = params.Get("mid")
fStr = params.Get("following")
wStr = params.Get("whisper")
bStr = params.Get("black")
frStr = params.Get("follower")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fStr == "" {
f = -1
} else {
if f, err = strconv.ParseInt(fStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if wStr == "" {
w = -1
} else {
if w, err = strconv.ParseInt(wStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if bStr == "" {
b = -1
} else {
if b, err = strconv.ParseInt(bStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
if frStr == "" {
fr = -1
} else {
if fr, err = strconv.ParseInt(frStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
st = &model.Stat{Following: f, Whisper: w, Black: b, Follower: fr}
if st.Following == -1 && st.Whisper == -1 && st.Black == -1 && st.Follower == -1 {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.SetStat(c, mid, st))
}
// delStatCache del stat cache.
func delStatCache(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelStatCache(c, mid))
}

View File

@ -0,0 +1,36 @@
package http
import (
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
func delTagCache(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, relationSvc.DelTagCache(c, mid))
}
func special(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Special(c, mid))
}

View File

@ -0,0 +1,85 @@
package http
import (
"strconv"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// whispers get user's whisper list.
func whispers(c *bm.Context) {
var (
err error
mid int64
params = c.Request.Form
midStr = params.Get("mid")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(relationSvc.Whispers(c, mid))
}
// addWhisper add whisper.
func addWhisper(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.AddWhisper(c, mid, fid, uint8(src), ric))
}
// delWhisper del whisper.
func delWhisper(c *bm.Context) {
var (
err error
mid, fid int64
src uint64
params = c.Request.Form
midStr = params.Get("mid")
fidStr = params.Get("fid")
srcStr = params.Get("src")
)
if mid, err = strconv.ParseInt(midStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if fid, err = strconv.ParseInt(fidStr, 10, 64); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
if mid <= 0 || fid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if src, err = strconv.ParseUint(srcStr, 10, 8); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
ric := infocArg(c)
c.JSON(nil, relationSvc.DelWhisper(c, mid, fid, uint8(src), ric))
}