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,45 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["rpc_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = ["//app/service/main/coin/model:go_default_library"],
)
go_library(
name = "go_default_library",
srcs = ["rpc.go"],
importpath = "go-common/app/service/main/coin/server/gorpc",
tags = ["automanaged"],
deps = [
"//app/service/main/coin/api:go_default_library",
"//app/service/main/coin/conf:go_default_library",
"//app/service/main/coin/model:go_default_library",
"//app/service/main/coin/service: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,237 @@
package rpc
import (
"time"
pb "go-common/app/service/main/coin/api"
"go-common/app/service/main/coin/conf"
coin "go-common/app/service/main/coin/model"
"go-common/app/service/main/coin/service"
"go-common/library/net/rpc"
"go-common/library/net/rpc/context"
)
// RPC define 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
}
// Ping check connection success.
func (r *RPC) Ping(c context.Context, arg *struct{}, res *struct{}) (err error) {
return
}
// AddCoins add coin to archive.
func (r *RPC) AddCoins(c context.Context, ac *coin.ArgAddCoin, res *struct{}) (err error) {
tp, err := r.s.CheckBusiness(ac.Business)
if err != nil {
return
}
if tp > 0 {
ac.AvType = tp
}
if ac.AvType == 0 {
ac.AvType = 1
}
b, err := r.s.GetBusinessName(ac.AvType)
if err != nil {
return
}
arg := &pb.AddCoinReq{
IP: ac.RealIP,
Mid: ac.Mid,
Upmid: ac.UpMid,
MaxCoin: ac.MaxCoin,
Aid: ac.Aid,
Business: b,
Number: ac.Multiply,
Typeid: int32(ac.TypeID),
PubTime: ac.PubTime,
}
_, err = r.s.AddCoin(c, arg)
return
}
// ArchiveUserCoins archive coins.
func (r *RPC) ArchiveUserCoins(c context.Context, m *coin.ArgCoinInfo, res *coin.ArchiveUserCoins) (err error) {
tp, err := r.s.CheckBusiness(m.Business)
if err != nil {
return
}
if tp > 0 {
m.AvType = tp
}
if m.AvType == 0 {
m.AvType = 1
}
b, err := r.s.GetBusinessName(m.AvType)
if err != nil {
return
}
arg := pb.ItemUserCoinsReq{
Mid: m.Mid,
Aid: m.Aid,
Business: b,
}
var rr *pb.ItemUserCoinsReply
if rr, err = r.s.ItemUserCoins(c, &arg); err == nil && rr != nil {
*res = coin.ArchiveUserCoins{Multiply: rr.Number}
}
return
}
// UserCoins get user coins.
func (r *RPC) UserCoins(c context.Context, arg *coin.ArgCoinInfo, res *float64) (err error) {
reply, err := r.s.UserCoins(c, &pb.UserCoinsReq{Mid: arg.Mid})
if reply != nil {
*res = reply.Count
}
return
}
// ModifyCoin modify user coin.
func (r *RPC) ModifyCoin(c context.Context, arg *coin.ArgModifyCoin, res *float64) (err error) {
req := &pb.ModifyCoinsReq{
Mid: arg.Mid,
Count: arg.Count,
Reason: arg.Reason,
IP: arg.IP,
Operator: arg.Operator,
CheckZero: int32(arg.CheckZero),
Ts: time.Now().Unix(),
}
reply, err := r.s.ModifyCoins(c, req)
if err != nil {
return
}
*res = reply.Result
return
}
// List coin added list.
func (r *RPC) List(c context.Context, arg *coin.ArgList, res *[]*coin.List) (err error) {
tp, err := r.s.CheckBusiness(arg.Business)
if err != nil {
return
}
if tp > 0 {
arg.TP = tp
}
b, err := r.s.GetBusinessName(arg.TP)
if err != nil {
return
}
req := &pb.ListReq{
Mid: arg.Mid,
Business: b,
Ts: time.Now().Unix(),
}
reply, err := r.s.List(c, req)
if err != nil {
return
}
lists := []*coin.List{}
for _, r := range reply.List {
lists = append(lists, &coin.List{
Aid: r.Aid,
Multiply: r.Number,
Ts: r.Ts,
IP: r.IP,
})
}
*res = lists
return
}
// UserLog user log
func (r *RPC) UserLog(c context.Context, arg *coin.ArgLog, res *[]*coin.Log) (err error) {
req := &pb.CoinsLogReq{
Mid: arg.Mid,
Recent: arg.Recent,
Translate: arg.Translate,
}
reply, err := r.s.CoinsLog(c, req)
lists := []*coin.Log{}
for _, r := range reply.List {
lists = append(lists, &coin.Log{
From: r.From,
To: r.To,
IP: r.IP,
Desc: r.Desc,
TimeStamp: r.TimeStamp,
})
}
*res = lists
return
}
// AddUserCoinExp add user coin exp for job
func (r *RPC) AddUserCoinExp(c context.Context, arg *coin.ArgAddUserCoinExp, res *struct{}) (err error) {
tp, err := r.s.CheckBusiness(arg.BusinessName)
if err != nil {
return
}
if tp > 0 {
arg.Business = tp
}
b, err := r.s.GetBusinessName(arg.Business)
if err != nil {
return
}
req := &pb.AddUserCoinExpReq{
IP: arg.RealIP,
Mid: arg.Mid,
Business: b,
Number: arg.Number,
}
_, err = r.s.AddUserCoinExp(c, req)
return
}
// UpdateAddCoin update db after add coin for job.
func (r *RPC) UpdateAddCoin(c context.Context, arg *coin.Record, res *struct{}) (err error) {
tp, err := r.s.CheckBusiness(arg.Business)
if err != nil {
return
}
if tp > 0 {
arg.AvType = tp
}
b, err := r.s.GetBusinessName(arg.AvType)
if err != nil {
return
}
req := &pb.UpdateAddCoinReq{
Aid: arg.Aid,
Mid: arg.Mid,
Up: arg.Up,
Timestamp: arg.Timestamp,
Number: arg.Multiply,
Business: b,
IPV6: arg.IPV6,
}
_, err = r.s.UpdateAddCoin(c, req)
return
}
// TodayExp .
func (r *RPC) TodayExp(c context.Context, arg *coin.ArgMid, res *int64) (err error) {
req := &pb.TodayExpReq{
Mid: arg.Mid,
}
reply, err := r.s.TodayExp(c, req)
if reply != nil {
*res = reply.Exp
}
return
}

View File

@@ -0,0 +1,49 @@
package rpc
import (
"net/rpc"
"testing"
coidel "go-common/app/service/main/coin/model"
)
const (
addr = "172.16.12.122:6159"
mid = 23675773
aid = 1
added = 1
ip = "172.16.12.122"
coinInfo = "RPC.ArchiveUserCoins"
addCoin = "RPC.AddCoins"
)
func TestAddCoinsRpc(t *testing.T) {
client, err := rpc.Dial("tcp", addr)
if err != nil {
t.Errorf("rpc.Dial(tcp, (%s)) error(%v)", addr, err)
t.FailNow()
}
x := coidel.ArgAddCoin{Aid: aid, Mid: mid, Multiply: added, RealIP: ip}
cf := &coidel.ArchiveUserCoins{}
if err = client.Call(addCoin, x, cf); err != nil {
t.Logf("call.addMoral error(%v)", err)
}
t.Logf("res: %v", cf.Multiply)
}
func TestArchiveUserCoinsRpc(t *testing.T) {
client, err := rpc.Dial("tcp", addr)
if err != nil {
t.Errorf("rpc.Dial(tcp, (%s)) error(%v)", addr, err)
t.FailNow()
}
x := coidel.ArgCoinInfo{Aid: aid, Mid: mid}
cf := &coidel.ArchiveUserCoins{}
if err = client.Call(coinInfo, x, cf); err != nil {
t.Logf("call.addMoral error(%v)", err)
}
t.Logf("res: %v", cf.Multiply)
}

View File

@@ -0,0 +1,33 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["server.go"],
importpath = "go-common/app/service/main/coin/server/grpc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/coin/api:go_default_library",
"//app/service/main/coin/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,19 @@
// Package server generate by warden_gen
package server
import (
pb "go-common/app/service/main/coin/api"
"go-common/app/service/main/coin/service"
"go-common/library/net/rpc/warden"
)
// New Coin warden rpc server
func New(c *warden.ServerConfig, svr *service.Service) *warden.Server {
ws := warden.NewServer(c)
pb.RegisterCoinServer(ws.Server(), svr)
ws, err := ws.Start()
if err != nil {
panic(err)
}
return ws
}

View File

@@ -0,0 +1,42 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"coin.go",
"http.go",
"usercoin.go",
],
importpath = "go-common/app/service/main/coin/server/http",
tags = ["automanaged"],
deps = [
"//app/service/main/coin/api:go_default_library",
"//app/service/main/coin/conf:go_default_library",
"//app/service/main/coin/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/verify:go_default_library",
"//library/net/metadata: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,216 @@
package http
import (
"strconv"
"time"
pb "go-common/app/service/main/coin/api"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
// addCoin
func addCoin(c *bm.Context) {
var (
tp int64
upid int64
)
params := c.Request.Form
aidStr := params.Get("aid")
tpStr := params.Get("avtype")
multiplyStr := params.Get("multiply")
tpidStr := params.Get("typeid")
maxStr := params.Get("max")
upidStr := params.Get("upid")
mid, _ := strconv.ParseInt(params.Get("mid"), 10, 64)
if mid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil || aid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
multiply, err := strconv.ParseInt(multiplyStr, 10, 64)
if err != nil || multiply <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if business, ok := c.Get("business"); ok {
tp = business.(int64)
} else {
if tpStr != "" {
if tp, err = strconv.ParseInt(tpStr, 10, 64); err != nil || tp < 1 || tp > 3 {
c.JSON(nil, ecode.RequestErr)
return
}
} else {
tp = 1
}
}
if upidStr != "" {
if upid, err = strconv.ParseInt(upidStr, 10, 64); err != nil || upid <= 0 {
c.JSON(nil, ecode.RequestErr)
return
}
}
typeid, _ := strconv.ParseInt(tpidStr, 10, 64)
max, _ := strconv.ParseInt(maxStr, 10, 8)
c.JSON(nil, coinSvc.WebAddCoin(c, mid, upid, max, aid, tp, multiply, int16(typeid)))
}
func list(c *bm.Context) {
params := c.Request.Form
midStr := params.Get("mid")
tpStr := params.Get("tp")
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var tp int64
if business, ok := c.Get("business"); ok {
tp = business.(int64)
} else {
if tp, err = strconv.ParseInt(tpStr, 10, 64); err != nil {
tp = 1
}
}
b, err := coinSvc.GetBusinessName(tp)
if err != nil {
c.JSON(nil, err)
}
arg := &pb.ListReq{Mid: mid, Business: b, Ts: time.Now().Unix()}
c.JSON(coinSvc.List(c, arg))
}
func todayexp(c *bm.Context) {
v := new(pb.TodayExpReq)
if err := c.Bind(v); err != nil {
return
}
res, err := coinSvc.TodayExp(c, v)
c.JSONMap(map[string]interface{}{
"number": res.Exp,
}, err)
}
func updateSettle(c *bm.Context) {
form := c.Request.Form
aidStr := form.Get("aid")
tpStr := form.Get("avtype")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
expSubStr := form.Get("exp_sub")
expSub, err := strconv.ParseInt(expSubStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var tp int64
if business, ok := c.Get("business"); ok {
tp = business.(int64)
} else {
var err error
tp, err = strconv.ParseInt(tpStr, 10, 64)
if err != nil || tp <= 0 {
tp = 1
}
}
c.JSON(nil, coinSvc.UpdateSettle(c, aid, tp, expSub, form.Get("describe")))
}
func coins(c *bm.Context) {
form := c.Request.Form
midStr := form.Get("mid")
upMidStr := form.Get("up_mid")
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
upMid, err := strconv.ParseInt(upMidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(coinSvc.AddedCoins(c, int64(mid), int64(upMid)))
}
func amend(c *bm.Context) {
form := c.Request.Form
aidStr := form.Get("aid")
tpStr := form.Get("avtype")
coinsStr := form.Get("coins")
aid, err := strconv.ParseInt(aidStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
var tp int64
if business, ok := c.Get("business"); ok {
tp = business.(int64)
} else {
var err1 error
tp, err1 = strconv.ParseInt(tpStr, 10, 64)
if err1 != nil || tp <= 0 {
tp = 1
}
}
coins, err := strconv.ParseInt(coinsStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(nil, coinSvc.UpdateItemCoins(c, aid, tp, int64(coins)))
}
func ccounts(c *bm.Context) {
params := new(struct {
Aid int64 `json:"aid" form:"aid" validate:"required,min=1"`
Avtype int64 `json:"avtype" form:"avtype"`
IP string `json:"ip" `
})
if err := c.Bind(params); err != nil {
return
}
if business, ok := c.Get("business"); ok {
params.Avtype = business.(int64)
}
if params.Avtype == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
count, err := coinSvc.ItemCoin(c, params.Aid, params.Avtype)
c.JSON(map[string]interface{}{
"count": count,
}, err)
}
// @params AddCoinReq
// @router get /x/internal/v1/coin/add
// @response AddCoinReply
func internalAddCoin(c *bm.Context) {
v := new(pb.AddCoinReq)
if err := c.Bind(v); err != nil {
return
}
v.IP = metadata.String(c, metadata.RemoteIP)
c.JSON(coinSvc.AddCoin(c, v))
}
// @params ItemUserCoinsReq
// @router get /x/internal/v1/coin/item/coins
// @response ItemUserCoinsReply
func itemCoins(c *bm.Context) {
v := new(pb.ItemUserCoinsReq)
if err := c.Bind(v); err != nil {
return
}
c.JSON(coinSvc.ItemUserCoins(c, v))
}

View File

@@ -0,0 +1,83 @@
package http
import (
"net/http"
"go-common/app/service/main/coin/conf"
"go-common/app/service/main/coin/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/verify"
)
var (
verifySrv *verify.Verify
coinSvc *service.Service
antispamM *antispam.Antispam
)
// Init init http linstening.
func Init(c *conf.Config, s *service.Service) {
coinSvc = s
antispamM = antispam.New(c.Antispam)
verifySrv = verify.New(c.Verify)
// init outer router
engine := bm.DefaultServer(c.BM)
outerRouter(engine)
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// innerRouter init inner router.
func outerRouter(r *bm.Engine) {
r.Ping(ping)
r.Register(register)
cr := r.Group("/x/coin", verifySrv.Verify, Business)
{
cr.POST("/add", antispamM.ServeHTTP, addCoin)
cr.POST("/settle", updateSettle)
cr.GET("/v2/list", list)
cr.GET("/today/exp", todayexp)
}
cr1 := r.Group("/x/internal/v1/coin", verifySrv.Verify, Business)
{
cr1.POST("/add", antispamM.ServeHTTP, internalAddCoin)
cr1.GET("/list", list)
cr1.GET("/coins", coins)
cr1.GET("/item/coins", itemCoins)
cr1.POST("/amend", amend)
cr1.GET("/user/count", userCoins)
cr1.GET("/user/log", coinLog)
cr1.POST("/user/modify", modify)
cr1.GET("/creation/counts", ccounts)
}
}
func ping(c *bm.Context) {
if err := coinSvc.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)
}
// Business set business
func Business(c *bm.Context) {
business := c.Request.Form.Get("business")
if business == "" {
return
}
tp, err := coinSvc.CheckBusiness(business)
if err != nil {
c.JSON(nil, err)
c.Abort()
return
}
c.Set("business", tp)
}

View File

@@ -0,0 +1,44 @@
package http
import (
"time"
pb "go-common/app/service/main/coin/api"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
// @params ModifyCoinsReq
// @router post /x/internal/v1/coin/user/modify
// @response ModifyCoinsReply
func modify(c *bm.Context) {
arg := new(pb.ModifyCoinsReq)
if err := c.Bind(arg); err != nil {
return
}
arg.IP = metadata.String(c, metadata.RemoteIP)
arg.Ts = time.Now().Unix()
c.JSON(coinSvc.ModifyCoins(c, arg))
}
// @params UserCoinsReq
// @router get /x/internal/v1/coin/user/count
// @response UserCoinsReply
func userCoins(c *bm.Context) {
v := new(pb.UserCoinsReq)
if err := c.Bind(v); err != nil {
return
}
c.JSON(coinSvc.UserCoins(c, v))
}
// @params CoinsLogReq
// @router get /x/internal/v1/coin/user/log
// @response CoinsLogReply
func coinLog(c *bm.Context) {
v := new(pb.CoinsLogReq)
if err := c.Bind(v); err != nil {
return
}
c.JSON(coinSvc.CoinsLog(c, v))
}