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,22 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/app-blink/api/http/v1:all-srcs",
"//app/interface/live/app-blink/cmd:all-srcs",
"//app/interface/live/app-blink/conf:all-srcs",
"//app/interface/live/app-blink/dao:all-srcs",
"//app/interface/live/app-blink/model:all-srcs",
"//app/interface/live/app-blink/server/http:all-srcs",
"//app/interface/live/app-blink/service:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,3 @@
# v1.0.0
1. 上线功能xxx
2. 加个字段

View File

@@ -0,0 +1,11 @@
# Owner
liuzhen
wangyao
# Author
# Reviewer
liuzhen
yangbaibing

View File

@@ -0,0 +1,14 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- liuzhen
- wangyao
labels:
- interface
- interface/live/app-blink
- live
options:
no_parent_owners: true
reviewers:
- liuzhen
- yangbaibing

View File

@@ -0,0 +1,16 @@
# app-blink
# 项目简介
1.项目规范:
(1) dao层 封装各个service层调用代码可公用
(2) service层 封装输出数据,实现接口本身业务逻辑
(3) model层 封装cache/db等基础组件
(4) 示例代码service/v1/room.go
# 编译环境
# 依赖包
# 编译执行

View File

@@ -0,0 +1 @@
# HTTP API文档

View File

@@ -0,0 +1,56 @@
load(
"@io_bazel_rules_go//proto:def.bzl",
"go_proto_library",
)
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["appBlink.bm.go"],
embed = [":v1_go_proto"],
importpath = "go-common/app/interface/live/app-blink/api/http/v1",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/binding:go_default_library",
"@com_github_gogo_protobuf//gogoproto:go_default_library",
"@com_github_gogo_protobuf//proto: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"],
)
proto_library(
name = "v1_proto",
srcs = ["appBlink.proto"],
tags = ["automanaged"],
deps = ["@gogo_special_proto//github.com/gogo/protobuf/gogoproto"],
)
go_proto_library(
name = "v1_go_proto",
compilers = ["@io_bazel_rules_go//proto:gogofast_grpc"],
importpath = "go-common/app/interface/live/app-blink/api/http/v1",
proto = ":v1_proto",
tags = ["automanaged"],
deps = ["@com_github_gogo_protobuf//gogoproto:go_default_library"],
)

View File

@@ -0,0 +1,32 @@
<!-- package=live.appblink.v1 -->
- [/xlive/app-blink/v1/banner/GetBlinkBanner](#xliveapp-blinkv1bannerGetBlinkBanner) 获取banner配置
## /xlive/app-blink/v1/banner/GetBlinkBanner
###获取banner配置
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
|build|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"id": 0,
"title": "",
"jumpPath": "",
"jumpTime": 0,
"jumpPathType": 0,
"imageUrl": ""
}
}
```

View File

@@ -0,0 +1,161 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: appBlink.proto
/*
Package v1 is a generated blademaster stub package.
This code was generated with go-common/app/tool/bmgen/protoc-gen-bm v0.1.
It is generated from these files:
appBlink.proto
*/
package v1
import (
"context"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/binding"
)
// to suppressed 'imported but not used warning'
var _ *bm.Context
var _ context.Context
var _ binding.StructValidator
var PathSplashGetInfo = "/live.appblink.v1.Splash/GetInfo"
var PathBannerGetBlinkBanner = "/live.appblink.v1.Banner/GetBlinkBanner"
var PathRoomGetInfo = "/live.appblink.v1.Room/GetInfo"
var PathRoomCreate = "/live.appblink.v1.Room/Create"
var PathTopicGetTopicList = "/live.appblink.v1.Topic/GetTopicList"
var PathTopicCheckTopic = "/live.appblink.v1.Topic/CheckTopic"
// ================
// Splash Interface
// ================
type SplashBMServer interface {
}
var v1SplashSvc SplashBMServer
// RegisterSplashBMServer Register the blademaster route
func RegisterSplashBMServer(e *bm.Engine, server SplashBMServer) {
v1SplashSvc = server
}
// ================
// Banner Interface
// ================
type BannerBMServer interface {
}
var v1BannerSvc BannerBMServer
// RegisterBannerBMServer Register the blademaster route
func RegisterBannerBMServer(e *bm.Engine, server BannerBMServer) {
v1BannerSvc = server
}
// ==============
// Room Interface
// ==============
type RoomBMServer interface {
// 获取房间基本信息
// `method:"GET" midware:"auth"`
GetInfo(ctx context.Context, req *GetRoomInfoReq) (resp *GetRoomInfoResp, err error)
// 创建房间
// `method:"POST" midware:"auth"`
Create(ctx context.Context, req *CreateReq) (resp *CreateResp, err error)
}
var v1RoomSvc RoomBMServer
func roomGetInfo(c *bm.Context) {
p := new(GetRoomInfoReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomSvc.GetInfo(c, p)
c.JSON(resp, err)
}
func roomCreate(c *bm.Context) {
p := new(CreateReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomSvc.Create(c, p)
c.JSON(resp, err)
}
// RegisterV1RoomService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1RoomService(e *bm.Engine, svc RoomBMServer, midMap map[string]bm.HandlerFunc) {
auth := midMap["auth"]
v1RoomSvc = svc
e.GET("/xlive/app-blink/v1/room/GetInfo", auth, roomGetInfo)
e.POST("/xlive/app-blink/v1/room/Create", auth, roomCreate)
}
// RegisterRoomBMServer Register the blademaster route
func RegisterRoomBMServer(e *bm.Engine, server RoomBMServer) {
v1RoomSvc = server
e.GET("/live.appblink.v1.Room/GetInfo", roomGetInfo)
e.POST("/live.appblink.v1.Room/Create", roomCreate)
}
// ===============
// Topic Interface
// ===============
type TopicBMServer interface {
// 获取话题列表
// `method:"GET" midware:"auth"`
GetTopicList(ctx context.Context, req *GetTopicListReq) (resp *GetTopicListResp, err error)
// 检验话题是否有效
// `method:"GET" midware:"auth"`
CheckTopic(ctx context.Context, req *CheckTopicReq) (resp *CheckTopicResp, err error)
}
var v1TopicSvc TopicBMServer
func topicGetTopicList(c *bm.Context) {
p := new(GetTopicListReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1TopicSvc.GetTopicList(c, p)
c.JSON(resp, err)
}
func topicCheckTopic(c *bm.Context) {
p := new(CheckTopicReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1TopicSvc.CheckTopic(c, p)
c.JSON(resp, err)
}
// RegisterV1TopicService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1TopicService(e *bm.Engine, svc TopicBMServer, midMap map[string]bm.HandlerFunc) {
auth := midMap["auth"]
v1TopicSvc = svc
e.GET("/xlive/app-blink/v1/topic/GetTopicList", auth, topicGetTopicList)
e.GET("/xlive/app-blink/v1/topic/CheckTopic", auth, topicCheckTopic)
}
// RegisterTopicBMServer Register the blademaster route
func RegisterTopicBMServer(e *bm.Engine, server TopicBMServer) {
v1TopicSvc = server
e.GET("/live.appblink.v1.Topic/GetTopicList", topicGetTopicList)
e.GET("/live.appblink.v1.Topic/CheckTopic", topicCheckTopic)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,107 @@
syntax = "proto3";
package live.appblink.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
// 获取当前有效闪屏配置(客户端)
message GetInfoReq {
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];;
string build = 2 [(gogoproto.moretags) = 'form:"build" validate:"required"'];;
}
message GetInfoResp {
int64 id = 1 [(gogoproto.jsontag) = "id"];
string title = 2 [(gogoproto.jsontag) = "title"];
string jumpPath = 3 [(gogoproto.jsontag) = "jumpPath"];
int64 jumpTime = 4 [(gogoproto.jsontag) = "jumpTime"];
int64 jumpPathType = 5 [(gogoproto.jsontag) = "jumpPathType"];
string imageUrl = 6 [(gogoproto.jsontag) = "imageUrl"];
}
message GetRoomInfoResp {
int64 room_id = 1 [(gogoproto.jsontag) = 'room_id'];
int64 uid = 2 [(gogoproto.jsontag) = 'uid'];
string uname = 3 [(gogoproto.jsontag) = 'uname'];
string title = 4 [(gogoproto.jsontag) = 'title'];
string face = 5 [(gogoproto.jsontag) = 'face'];
string try_time = 7 [(gogoproto.jsontag) = 'try_time'];
int64 live_status = 8 [(gogoproto.jsontag) = 'live_status'];
string area_v2_name = 9 [(gogoproto.jsontag) = 'area_v2_name'];
int64 area_v2_id = 10 [(gogoproto.jsontag) = 'area_v2_id'];
int64 master_level = 11 [(gogoproto.jsontag) = 'master_level'];
int64 master_level_color = 12 [(gogoproto.jsontag) = 'master_level_color'];
int64 master_score = 13 [(gogoproto.jsontag) = 'master_score'];
int64 master_next_level = 14 [(gogoproto.jsontag) = 'master_next_level'];
int64 max_level = 15 [(gogoproto.jsontag) = 'max_level'];
int64 fc_num = 16 [(gogoproto.jsontag) = 'fc_num'];
int64 rcost = 17 [(gogoproto.jsontag) = 'rcost'];
int64 medal_status = 18 [(gogoproto.jsontag) = 'medal_status'];
string medal_name = 19 [(gogoproto.jsontag) = 'medal_name'];
int64 medal_rename_status = 20 [(gogoproto.jsontag) = 'medal_rename_status'];
int64 is_medal = 21 [(gogoproto.jsontag) = 'is_medal'];
string full_text = 22 [(gogoproto.jsontag) = 'full_text'];
int64 identify_status = 23 [(gogoproto.jsontag) = 'identify_status'];
int64 lock_status = 24 [(gogoproto.jsontag) = 'lock_status'];
string lock_time = 25 [(gogoproto.jsontag) = 'lock_time'];
int64 open_medal_level = 26 [(gogoproto.jsontag) = 'open_medal_level'];
int64 master_next_level_score = 27 [(gogoproto.jsontag) = 'master_next_level_score'];
int64 parent_id = 28 [(gogoproto.jsontag) = 'parent_id'];
string parent_name = 29 [(gogoproto.jsontag) = 'parent_name'];
}
message GetRoomInfoReq {
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];
}
message CreateResp {
string room_id = 1 [(gogoproto.jsontag) = 'room_id'];
}
message CreateReq {
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];
}
message GetTopicListReq {
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];
}
message GetTopicListResp {
repeated string topic_list = 1 [(gogoproto.jsontag) = 'topic_list'];
}
message CheckTopicReq {
string platform = 1 [(gogoproto.moretags) = 'form:"platform" validate:"required"'];
string topic = 2 [(gogoproto.moretags) = 'form:"topic" validate:"required"'];
}
message CheckTopicResp {
}
service Splash {
//获取有效闪屏配置
//`dynamic:"true"`
rpc GetInfo(GetInfoReq) returns (GetInfoResp);
}
service Banner {
//获取banner配置
//`dynamic:"true"`
rpc GetBlinkBanner(GetInfoReq) returns (GetInfoResp);
}
service Room {
//获取房间基本信息
//`method:"GET" midware:"auth"`
rpc GetInfo(GetRoomInfoReq) returns (GetRoomInfoResp);
//创建房间
//`method:"POST" midware:"auth"`
rpc Create(CreateReq) returns (CreateResp);
}
service Topic {
//获取话题列表
//`method:"GET" midware:"auth"`
rpc GetTopicList(GetTopicListReq) returns (GetTopicListResp);
//检验话题是否有效
//`method:"GET" midware:"auth"`
rpc CheckTopic(CheckTopicReq) returns (CheckTopicResp);
}

View File

@@ -0,0 +1,82 @@
<!-- package=live.appblink.v1 -->
- [/xlive/app-blink/v1/room/GetInfo](#xliveapp-blinkv1roomGetInfo) 获取房间基本信息
- [/xlive/app-blink/v1/room/Create](#xliveapp-blinkv1roomCreate) 创建房间
## /xlive/app-blink/v1/room/GetInfo
###获取房间基本信息
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"room_id": 0,
"uid": 0,
"uname": "",
"title": "",
"face": "",
"try_time": "",
"live_status": 0,
"area_v2_name": "",
"area_v2_id": 0,
"master_level": 0,
"master_level_color": 0,
"master_score": 0,
"master_next_level": 0,
"max_level": 0,
"fc_num": 0,
"rcost": 0,
"medal_status": 0,
"medal_name": "",
"medal_rename_status": 0,
"is_medal": 0,
"full_text": "",
"identify_status": 0,
"lock_status": 0,
"lock_time": "",
"open_medal_level": 0,
"master_next_level_score": 0,
"parent_id": 0,
"parent_name": ""
}
}
```
## /xlive/app-blink/v1/room/Create
###创建房间
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"room_id": ""
}
}
```

View File

@@ -0,0 +1,32 @@
<!-- package=live.appblink.v1 -->
- [/xlive/app-blink/v1/splash/GetInfo](#xliveapp-blinkv1splashGetInfo) 获取有效闪屏配置
## /xlive/app-blink/v1/splash/GetInfo
###获取有效闪屏配置
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
|build|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"id": 0,
"title": "",
"jumpPath": "",
"jumpTime": 0,
"jumpPathType": 0,
"imageUrl": ""
}
}
```

View File

@@ -0,0 +1,57 @@
<!-- package=live.appblink.v1 -->
- [/xlive/app-blink/v1/topic/GetTopicList](#xliveapp-blinkv1topicGetTopicList) 获取话题列表
- [/xlive/app-blink/v1/topic/CheckTopic](#xliveapp-blinkv1topicCheckTopic) 检验话题是否有效
## /xlive/app-blink/v1/topic/GetTopicList
###获取话题列表
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"topic_list": [
""
]
}
}
```
## /xlive/app-blink/v1/topic/CheckTopic
###检验话题是否有效
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
|topic|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
}
}
```

View File

@@ -0,0 +1,44 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_binary",
"go_library",
)
go_binary(
name = "cmd",
embed = [":go_default_library"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = ["main.go"],
data = ["test.toml"],
importpath = "go-common/app/interface/live/app-blink/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-blink/conf:go_default_library",
"//app/interface/live/app-blink/server/http:go_default_library",
"//app/interface/live/app-blink/service:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/net/trace: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,47 @@
package main
import (
"flag"
"os"
"os/signal"
"syscall"
"time"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/interface/live/app-blink/server/http"
"go-common/app/interface/live/app-blink/service"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/net/trace"
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
log.Init(conf.Conf.Log)
defer log.Close()
log.Info("app-blink-interface start")
trace.Init(conf.Conf.Tracer)
defer trace.Close()
ecode.Init(conf.Conf.Ecode)
svc := service.New(conf.Conf)
http.Init(conf.Conf, svc)
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
s := <-c
log.Info("get a signal %s", s.String())
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
svc.Close()
log.Info("app-blink-interface exit")
time.Sleep(time.Second)
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,17 @@
[blink]
[httpClient]
key = "fb06a25c6338edbc"
secret = "fd10bd177559780c2e4a44f1fa47fa83"
dial = "100ms"
timeout = "5s"
keepAlive = "60s"
[httpClient.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[warden]
dial = "1s"
timeout = "1s"

View File

@@ -0,0 +1,40 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["conf.go"],
importpath = "go-common/app/interface/live/app-blink/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/conf:go_default_library",
"//library/ecode/tip: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/net/rpc/liverpc:go_default_library",
"//library/net/rpc/warden:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/BurntSushi/toml: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 conf
import (
"errors"
"flag"
"github.com/BurntSushi/toml"
"go-common/library/conf"
ecode "go-common/library/ecode/tip"
"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"
"go-common/library/net/rpc/liverpc"
"go-common/library/net/rpc/warden"
"go-common/library/net/trace"
)
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config .
type Config struct {
Log *log.Config
BM *bm.ServerConfig
Verify *verify.Config
Tracer *trace.Config
Ecode *ecode.Config
ResourceClient *warden.ClientConfig
LiveRpc map[string]*liverpc.ClientConfig
GrpcCli *warden.ClientConfig
Auth *auth.Config
HttpClient *bm.ClientConfig
}
func init() {
flag.StringVar(&confPath, "conf", "", "default config path")
}
// Init init conf
func Init() error {
if confPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
if load() != nil {
log.Error("config reload error (%v)", err)
}
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}
const (
// APPKey to call main site api
APPKey = "fb06a25c6338edbc"
)

View File

@@ -0,0 +1,56 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"fansMedal.go",
"mainAccount.go",
"mainFilter.go",
"relation.go",
"resource.go",
"room.go",
"user.go",
],
importpath = "go-common/app/interface/live/app-blink/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-blink/conf:go_default_library",
"//app/service/live/fans_medal/api/liverpc:go_default_library",
"//app/service/live/fans_medal/api/liverpc/v1:go_default_library",
"//app/service/live/relation/api/liverpc:go_default_library",
"//app/service/live/relation/api/liverpc/v1:go_default_library",
"//app/service/live/resource/api/grpc/v1:go_default_library",
"//app/service/live/room/api/liverpc:go_default_library",
"//app/service/live/room/api/liverpc/v1:go_default_library",
"//app/service/live/user/api/liverpc:go_default_library",
"//app/service/live/user/api/liverpc/v3:go_default_library",
"//app/service/main/member/api:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
"//library/net/rpc/liverpc: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,69 @@
package dao
import (
"context"
"go-common/app/interface/live/app-blink/conf"
fans_medal_api "go-common/app/service/live/fans_medal/api/liverpc"
relation_api "go-common/app/service/live/relation/api/liverpc"
resource_cli "go-common/app/service/live/resource/api/grpc/v1"
room_api "go-common/app/service/live/room/api/liverpc"
user_api "go-common/app/service/live/user/api/liverpc"
member_cli "go-common/app/service/main/member/api"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/rpc/liverpc"
)
// Dao dao
type Dao struct {
c *conf.Config
RoomApi *room_api.Client
UserApi *user_api.Client
RelationApi *relation_api.Client
FansMedalApi *fans_medal_api.Client
memberCli member_cli.MemberClient
titansCli resource_cli.TitansClient
HttpCli *bm.Client
}
// New init mysql db
func New(c *conf.Config) (dao *Dao) {
dao = &Dao{
c: c,
RoomApi: room_api.New(getConf("room")),
UserApi: user_api.New(getConf("user")),
RelationApi: relation_api.New(getConf("relation")),
FansMedalApi: fans_medal_api.New(getConf("fans_medal")),
HttpCli: bm.NewClient(c.HttpClient),
}
MemberCli, err := member_cli.NewClient(c.GrpcCli)
if err != nil {
panic(err)
}
dao.memberCli = MemberCli
TitansCli, errTitans := resource_cli.NewClient(c.GrpcCli)
if errTitans != nil {
panic(err)
}
dao.titansCli = TitansCli
return
}
// Close close the resource.
func (d *Dao) Close() {
}
// Ping dao ping
func (d *Dao) Ping(c context.Context) error {
// TODO: if you need use mc,redis, please add
return nil
}
func getConf(appName string) *liverpc.ClientConfig {
c := conf.Conf.LiveRpc
if c != nil {
return c[appName]
}
return nil
}

View File

@@ -0,0 +1,30 @@
package dao
import (
"context"
"go-common/app/service/live/fans_medal/api/liverpc/v1"
"go-common/library/log"
)
//OpenFansMealLevel 开启粉丝勋章的主播等级
const OpenFansMealLevel = 10
// GetFansMedalInfo 获取粉丝勋章信息
func (d *Dao) GetFansMedalInfo(c context.Context, uid int64) (resp *v1.MedalQueryResp_Data, err error) {
reply, err := d.FansMedalApi.V1Medal.Query(c, &v1.MedalQueryReq{Uid: uid, Source: 1})
if err != nil {
log.Error("fansMedal_getFansMedalInfo_error:%v", err)
return
}
if reply.Code != 0 {
log.Error("fansMedal_getFansMedalInfo_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
log.Info("fansMedal_getFansMedalInfo:%d,%s,$v", reply.Code, reply.Msg, reply.Data)
if reply.Data.IsNull {
resp = nil
}
resp = reply.Data
return
}

View File

@@ -0,0 +1,20 @@
package dao
import (
"context"
v12 "go-common/app/service/main/member/api"
"go-common/library/log"
)
// GetIdentityStatus 获取身份申请信息
func (d *Dao) GetIdentityStatus(c context.Context, mid int64) (resp int8, err error) {
reply, err := d.memberCli.RealnameApplyStatus(c, &v12.MemberMidReq{Mid: mid})
if err != nil {
log.Error("main_member_GetIdentityStatus_error:%v", err)
return
}
log.Info("main_member_GetIdentityStatus:%v", reply)
resp = reply.Status
return
}

View File

@@ -0,0 +1,91 @@
package dao
import (
"context"
"net/url"
"strconv"
"time"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/service/live/room/api/liverpc/v1"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
)
//FILTER_MPOST_URL 主站屏蔽词url
const FILTER_MPOST_URL = "http://api.bilibili.co/x/internal/filter/mpost"
//CheckMsgIsLegal ...
//area值:"live_danmu";"live_biaoti";"live_tag";"live_jianjie",;"live_xuyuanping"
func (d *Dao) CheckMsgIsLegal(c context.Context, msg string, area string, roomId int64) (resp bool, err error) {
if msg == "" || area == "" {
log.Error("checkMsgIsLegal_params_error:msg=%s;area=%s", msg, area)
return
}
uid, _ := metadata.Value(c, metadata.Mid).(int64)
filterReply, err := d.FilterSite(c, msg, area)
if err != nil {
err = ecode.CallMainFilterError
return
}
areaMap := map[string]int{"live_biaoti": 2, "live_tag": 3, "live_jianjie": 4, "live_xuyuanping": 5}
historyData := &v1.RoomMngSaveHistoryReq_List{}
historyDatas := &v1.RoomMngSaveHistoryReq{}
resp = false
for _, filterInfo := range filterReply {
level := filterInfo.Level
hit := filterInfo.Hit
msg := filterInfo.Msg
if level >= 20 {
resp = true
}
if roomId > 0 && level == 15 && hit != nil && areaMap[area] > 0 {
historyData.Area = int64(areaMap[area])
historyData.Uid = uid
historyData.Roomid = roomId
historyData.Content = msg
historyData.Status = 0
historyData.Oname = ""
}
historyDatas.List = append(historyDatas.List, historyData)
}
//保存命中审核的数据
d.RoomApi.V1RoomMng.SaveHistory(c, historyDatas)
return
}
type mpostData struct {
Level int `json:"level"`
Limit int `json:"limit"`
Hit map[string]interface{} `json:"hit"`
Msg string `json:"msg"`
}
//FilterSite 主站12月初grpc接口上线可以替换
func (d *Dao) FilterSite(c context.Context, msg string, area string) (resp []*mpostData, err error) {
var (
params = url.Values{}
ip = metadata.String(c, metadata.RemoteIP)
)
params.Set("appkey", conf.APPKey)
params.Set("msg", msg)
params.Set("ts", strconv.FormatInt(time.Now().Unix(), 10))
params.Set("area", area)
var res struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data []*mpostData `json:"data"`
}
if d.HttpCli.Post(c, FILTER_MPOST_URL, ip, params, &res); err != nil {
log.Error("filterSite:%v;params:%v;code:%d;msg:%s", err, params, res.Code, res.Msg)
return
}
if res.Code != 0 {
log.Error("filterSite:%v;code:%d;msg:%s", err, res.Code, res.Msg)
}
//接入sla
resp = res.Data
return
}

View File

@@ -0,0 +1,32 @@
package dao
import (
"context"
"github.com/pkg/errors"
"go-common/app/service/live/relation/api/liverpc/v1"
"go-common/library/log"
)
//GetUserFc 获取用户关注数
func (d *Dao) GetUserFc(c context.Context, uid int64) (res *v1.FeedGetUserFcResp_Data, err error) {
reply, err := d.RelationApi.V1Feed.GetUserFc(c, &v1.FeedGetUserFcReq{Follow: uid})
if err != nil {
log.Error("relation_GetUserFc_error:%v", err)
return
}
if reply.Code != 0 {
err = errors.New("code error")
log.Error("relation_gGetUserFc_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
if reply.Data == nil {
err = errors.New("data error")
log.Error("relation_gGetUserFc_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
log.Info("relation_gGetUserFc:%d,%s,$v", reply.Code, reply.Msg, reply.Data)
res = reply.Data
return
}

View File

@@ -0,0 +1,32 @@
package dao
import (
"context"
"encoding/json"
"go-common/app/service/live/resource/api/grpc/v1"
"go-common/library/log"
)
//TitansTeam 话题team值
const TitansTeam = 40
//TitansKeyword 话题标签值
const TitansKeyword = "topic"
//GetTopicList 获取话题列表
func (d *Dao) GetTopicList(c context.Context) (resp []string, err error) {
reply, err := d.titansCli.GetConfigByKeyword(c, &v1.GetConfigReq{Team: TitansTeam, Keyword: TitansKeyword})
if err != nil {
log.Error("main_member_GetIdentityStatus_error:%v", err)
return
}
log.Info("main_member_GetIdentityStatus:%v", reply)
resp = make([]string, 0)
e := json.Unmarshal([]byte(reply.Value), &resp)
if e != nil {
log.Error("GetTopicList_json_error:%v,res=%v,", e, reply.Value)
return
}
return
}

View File

@@ -0,0 +1,50 @@
package dao
import (
"context"
"go-common/app/service/live/room/api/liverpc/v1"
"go-common/library/log"
)
//PERMANENT_LOCK_TIME 永久封禁时间
const PERMANENT_LOCK_TIME = "2037-01-01 00:00:00"
//GetRoomInfosByUids ...
func (d *Dao) GetRoomInfosByUids(c context.Context, uid []int64) (res map[int64]*v1.RoomGetStatusInfoByUidsResp_RoomInfo, err error) {
reply, err := d.RoomApi.V1Room.GetStatusInfoByUids(c, &v1.RoomGetStatusInfoByUidsReq{
Uids: uid,
FilterOffline: 0,
ShowHidden: 1,
FilterIndexBlack: 0,
FilterVideo: 0,
NeedBroadcastType: 0,
})
if err != nil {
log.Error("room_getRoomInfosByUids_error:%v", err)
return
}
if reply.Code != 0 {
log.Error("room_getRoomInfosByUids_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
log.Info("room_getRoomInfosByUids:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
res = reply.Data
return
}
//CreateRoom ...
func (d *Dao) CreateRoom(c context.Context, uid int64) (res *v1.RoomMngCreateRoomResp_Data, err error) {
reply, err := d.RoomApi.V1RoomMng.CreateRoom(c, &v1.RoomMngCreateRoomReq{Uid: uid})
if err != nil {
log.Error("room_createRoom_error:%v", err)
return
}
if reply.Code != 0 {
log.Error("room_createRoom_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
log.Info("room_createRoom:%d,%s,$v", reply.Code, reply.Msg, reply.Data)
res = reply.Data
return
}

View File

@@ -0,0 +1,27 @@
package dao
import (
"context"
"go-common/app/service/live/user/api/liverpc/v3"
"go-common/library/log"
)
//GetUserInfo 获取用户信息
func (d *Dao) GetUserInfo(c context.Context, uid []int64) (res map[int64]*v3.UserGetMultipleResp_UserInfo, err error) {
reply, err := d.UserApi.V3User.GetMultiple(c, &v3.UserGetMultipleReq{
Uids: uid,
Attributes: []string{"exp", "info"},
})
if err != nil {
log.Error("%v", err)
return
}
if reply.Code != 0 {
log.Error("user_getUserInfo_error:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
return
}
log.Info("user_getUserInfo:%d,%s,%v", reply.Code, reply.Msg, reply.Data)
res = reply.Data
return
}

View File

@@ -0,0 +1,28 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["model.go"],
importpath = "go-common/app/interface/live/app-blink/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
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 @@
package model

View File

@@ -0,0 +1,39 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["http.go"],
importpath = "go-common/app/interface/live/app-blink/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-blink/api/http/v1:go_default_library",
"//app/interface/live/app-blink/conf:go_default_library",
"//app/interface/live/app-blink/service:go_default_library",
"//app/interface/live/app-blink/service/v1:go_default_library",
"//app/service/live/resource/api/grpc/v1: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",
],
)
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,94 @@
package http
import (
"net/http"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/app/interface/live/app-blink/api/http/v1"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/interface/live/app-blink/service"
spSrv "go-common/app/interface/live/app-blink/service/v1"
resRpc "go-common/app/service/live/resource/api/grpc/v1"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/verify"
)
var (
srv *service.Service
vfy *verify.Verify
slSrv *spSrv.SplashService
bnSrv *spSrv.BannerService
roomSrv *spSrv.RoomService
midAuth *auth.Auth
topicSrv *spSrv.TopicService
)
// Init init
func Init(c *conf.Config, svc *service.Service) {
srv = svc
vfy = verify.New(c.Verify)
initService(c)
engine := bm.DefaultServer(c.BM)
route(engine)
if err := engine.Start(); err != nil {
log.Error("bm Start error(%v)", err)
panic(err)
}
}
func initService(c *conf.Config) {
slSrv = spSrv.NewSplashService(c)
bnSrv = spSrv.NewBannerService(c)
roomSrv = spSrv.NewRoomService(c)
midAuth = auth.New(c.Auth)
topicSrv = spSrv.NewTopicService(c)
}
func getInfo(ctx *bm.Context) {
p := new(resRpc.GetInfoReq)
if err := ctx.Bind(p); err != nil {
return
}
resp, err := slSrv.GetInfo(ctx, p)
ctx.JSON(resp, err)
}
func getBlinkBanner(ctx *bm.Context) {
p := new(resRpc.GetInfoReq)
if err := ctx.Bind(p); err != nil {
return
}
resp, err := bnSrv.GetBlinkBanner(ctx, p)
ctx.JSON(resp, err)
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/xlive/app-blink/v1")
{
g.GET("/start", vfy.Verify, howToStart)
}
g.GET("/splash/getInfo", getInfo)
g.GET("/banner/getBlinkBanner", getBlinkBanner)
v1.RegisterV1RoomService(e, roomSrv, map[string]bm.HandlerFunc{"auth": midAuth.User})
v1.RegisterV1TopicService(e, topicSrv, map[string]bm.HandlerFunc{"auth": midAuth.User})
}
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)
}
// example for http request handler
func howToStart(c *bm.Context) {
c.String(0, "Golang 大法好 !!!")
}

View File

@@ -0,0 +1,35 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["service.go"],
importpath = "go-common/app/interface/live/app-blink/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-blink/conf:go_default_library",
"//app/interface/live/app-blink/dao:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/live/app-blink/service/v1:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,33 @@
package service
import (
"context"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/interface/live/app-blink/dao"
)
// Service struct
type Service struct {
c *conf.Config
dao *dao.Dao
}
// New init
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
}
return s
}
// Ping Service
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Close Service
func (s *Service) Close() {
s.dao.Close()
}

View File

@@ -0,0 +1,63 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"banner.go",
"room.go",
"splash.go",
"topic.go",
],
importpath = "go-common/app/interface/live/app-blink/service/v1",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-blink/api/http/v1:go_default_library",
"//app/interface/live/app-blink/conf:go_default_library",
"//app/interface/live/app-blink/dao:go_default_library",
"//app/service/live/resource/api/grpc/v1:go_default_library",
"//library/ecode:go_default_library",
"//library/net/metadata:go_default_library",
"//library/sync/errgroup: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"],
)
go_test(
name = "go_default_test",
srcs = [
"banner_test.go",
"room_test.go",
"splash_test.go",
"topic_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/live/app-blink/api/http/v1:go_default_library",
"//app/interface/live/app-blink/conf:go_default_library",
"//app/service/live/resource/api/grpc/v1:go_default_library",
"//library/net/metadata:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)

View File

@@ -0,0 +1,39 @@
package v1
import (
"context"
"go-common/app/interface/live/app-blink/conf"
rspb "go-common/app/service/live/resource/api/grpc/v1"
)
// BannerService struct
type BannerService struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
rsCli *rspb.Client
}
//NewBannerService init
func NewBannerService(c *conf.Config) (s *BannerService) {
s = &BannerService{
conf: c,
}
var svc *rspb.Client
var err error
if svc, err = rspb.NewClient(s.conf.ResourceClient); err != nil {
panic(err)
}
s.rsCli = svc
return s
}
// GetBlinkBanner implementation
// 获取banner配置
// `dynamic:"true"`
func (s *BannerService) GetBlinkBanner(ctx context.Context, req *rspb.GetInfoReq) (resp *rspb.GetInfoResp, err error) {
resp, err = s.rsCli.GetBlinkBanner(ctx, req)
return
}

View File

@@ -0,0 +1,36 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-blink/conf"
rspb "go-common/app/service/live/resource/api/grpc/v1"
. "github.com/smartystreets/goconvey/convey"
)
var s *BannerService
func init() {
flag.Set("conf", "../../cmd/test.toml")
if err := conf.Init(); err != nil {
panic(err)
}
s = NewBannerService(conf.Conf)
}
// DEPLOY_ENV=uat go test -run TestBannerService_GetBlinkBanner
func TestBannerService_GetBlinkBanner(t *testing.T) {
Convey("TestGetBlinkBanner", t, func() {
res, err := s.GetBlinkBanner(context.TODO(), &rspb.GetInfoReq{
Platform: "android",
Build: 53100,
})
fmt.Println(res, err)
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,162 @@
package v1
import (
"context"
v1pb "go-common/app/interface/live/app-blink/api/http/v1"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/interface/live/app-blink/dao"
"go-common/library/ecode"
"go-common/library/net/metadata"
"go-common/library/sync/errgroup"
)
// RoomService struct
type RoomService struct {
conf *conf.Config
// optionally add other properties here, such as dao
dao *dao.Dao
}
//NewRoomService init
func NewRoomService(c *conf.Config) (s *RoomService) {
s = &RoomService{
conf: c,
dao: dao.New(c),
}
return s
}
// GetInfo implementation
// 获取房间基本信息
// `method:"GET" midware:"auth"`
func (s *RoomService) GetInfo(ctx context.Context, req *v1pb.GetRoomInfoReq) (resp *v1pb.GetRoomInfoResp, err error) {
uid, ok := metadata.Value(ctx, metadata.Mid).(int64)
if uid <= 0 || !ok {
err = ecode.UidError
return
}
uidArr := make([]int64, 0)
uidArr = append(uidArr, uid)
resp = &v1pb.GetRoomInfoResp{}
resp.Uid = uid
resp.FullText = "V等级5级或UP等级10级才能开通粉丝勋章哦~加油!"
resp.OpenMedalLevel = dao.OpenFansMealLevel
resp.MaxLevel = 40
eg := errgroup.Group{}
eg.Go(func() (err error) {
room, err := s.dao.GetRoomInfosByUids(ctx, uidArr)
if err != nil {
err = ecode.CallRoomError
return
}
roomInfo := room[uid]
if roomInfo == nil {
return
}
LockStatus := 0
//if roomInfo.LockTill >= dao.PERMANENT_LOCK_TIME {
// LockStatus = 1
//}
resp.RoomId = roomInfo.RoomId
resp.Title = roomInfo.Title
resp.LiveStatus = roomInfo.LiveStatus
resp.AreaV2Id = roomInfo.AreaV2Id
resp.AreaV2Name = roomInfo.AreaV2Name
resp.LockTime = roomInfo.LockTill
resp.LockStatus = int64(LockStatus)
resp.ParentId = roomInfo.AreaV2ParentId
resp.ParentName = roomInfo.AreaV2ParentName
return
})
eg.Go(func() (err error) {
user, err := s.dao.GetUserInfo(ctx, uidArr)
if err != nil {
err = ecode.CallUserError
return
}
if user == nil {
err = ecode.UserNotFound
return
}
userInfo, ok := user[uid]
if !ok {
err = ecode.UserNotFound
return
}
resp.Face = userInfo.GetInfo().GetFace()
resp.Uname = userInfo.GetInfo().GetUname()
if userInfo.Exp != nil {
resp.MasterScore = userInfo.Exp.Rcost / 100
if userInfo.Exp.MasterLevel != nil {
masterLevel := userInfo.Exp.MasterLevel.Level
masterNextLevel := masterLevel + 1
if masterNextLevel > 40 {
masterNextLevel = 40
}
resp.MasterLevel = masterLevel
resp.MasterLevelColor = userInfo.Exp.MasterLevel.Color
resp.MasterNextLevel = masterNextLevel
if len(userInfo.Exp.MasterLevel.Next) >= 2 {
resp.MasterNextLevelScore = userInfo.Exp.MasterLevel.Next[1]
}
}
}
return
})
eg.Go(func() (err error) {
relation, err := s.dao.GetUserFc(ctx, uid)
if err != nil {
err = ecode.CallRelationError
return
}
resp.FcNum = relation.Fc
return
})
eg.Go(func() (err error) {
fansMedal, err := s.dao.GetFansMedalInfo(ctx, uid)
if err != nil {
err = ecode.CallFansMedalError
return
}
if fansMedal == nil {
return
}
resp.IsMedal = fansMedal.MasterStatus
resp.MedalName = fansMedal.MedalName
resp.MedalRenameStatus = fansMedal.RenameStatus
resp.MedalStatus = fansMedal.Status
return
})
eg.Go(func() (err error) {
identifyStatus, err := s.dao.GetIdentityStatus(ctx, uid)
if err != nil {
err = ecode.CallMainMemberError
return
}
resp.IdentifyStatus = int64(identifyStatus)
return
})
err = eg.Wait()
return
}
// Create implementation
// 创建房间
// `method:"POST" midware:"auth"`
func (s *RoomService) Create(ctx context.Context, req *v1pb.CreateReq) (resp *v1pb.CreateResp, err error) {
uid, ok := metadata.Value(ctx, metadata.Mid).(int64)
if uid <= 0 || !ok {
err = ecode.UidError
return
}
resp = &v1pb.CreateResp{}
room, err := s.dao.CreateRoom(ctx, uid)
if err != nil {
err = ecode.CallRoomError
return
}
resp.RoomId = room.Roomid
return
}

View File

@@ -0,0 +1,55 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-blink/api/http/v1"
"go-common/library/net/metadata"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/live/app-blink/conf"
)
var room *RoomService
func init() {
flag.Set("conf", "../../cmd/test.toml")
if err := conf.Init(); err != nil {
panic(err)
}
room = NewRoomService(conf.Conf)
}
// group=qa01 DEPLOY_ENV=uat go test -run TestGetRoomInfo
func TestGetRoomInfo(t *testing.T) {
Convey("TestNewRoomService", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(16299525),
})
res, err := room.GetInfo(ctx, &v1.GetRoomInfoReq{
Platform: "ios",
})
fmt.Println(1111, res, err, 22222)
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}
func TestCreate(t *testing.T) {
Convey("TestNewRoomService", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(16299525),
})
res, err := room.Create(ctx, &v1.CreateReq{
Platform: "ios",
})
fmt.Println(1111, res, err, 22222)
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,39 @@
package v1
import (
"context"
"go-common/app/interface/live/app-blink/conf"
rspb "go-common/app/service/live/resource/api/grpc/v1"
)
// SplashService struct
type SplashService struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
rsCli *rspb.Client
}
//NewSplashService init
func NewSplashService(c *conf.Config) (s *SplashService) {
s = &SplashService{
conf: c,
}
var svc *rspb.Client
var err error
if svc, err = rspb.NewClient(s.conf.ResourceClient); err != nil {
panic(err)
}
s.rsCli = svc
return s
}
// GetInfo implementation
// 获取有效闪屏配置
// `dynamic:"true"`
func (s *SplashService) GetInfo(ctx context.Context, req *rspb.GetInfoReq) (resp *rspb.GetInfoResp, err error) {
resp, err = s.rsCli.GetInfo(ctx, req)
return
}

View File

@@ -0,0 +1,36 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-blink/conf"
rspb "go-common/app/service/live/resource/api/grpc/v1"
. "github.com/smartystreets/goconvey/convey"
)
var sp *SplashService
func init() {
flag.Set("conf", "../../cmd/test.toml")
if err := conf.Init(); err != nil {
panic(err)
}
sp = NewSplashService(conf.Conf)
}
// DEPLOY_ENV=uat go test -run TestNewSplashService
func TestNewSplashService(t *testing.T) {
Convey("TestNewSplashService", t, func() {
res, err := sp.GetInfo(context.TODO(), &rspb.GetInfoReq{
Platform: "android",
Build: 53100,
})
fmt.Println(res, err)
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,59 @@
package v1
import (
"context"
v1pb "go-common/app/interface/live/app-blink/api/http/v1"
"go-common/app/interface/live/app-blink/conf"
"go-common/app/interface/live/app-blink/dao"
"go-common/library/ecode"
)
// TopicService struct
type TopicService struct {
conf *conf.Config
// optionally add other properties here, such as dao
dao *dao.Dao
}
//NewTopicService init
func NewTopicService(c *conf.Config) (s *TopicService) {
s = &TopicService{
conf: c,
dao: dao.New(c),
}
return s
}
// GetTopicList implementation
// 获取话题列表
// `method:"GET" midware:"auth"`
func (s *TopicService) GetTopicList(ctx context.Context, req *v1pb.GetTopicListReq) (resp *v1pb.GetTopicListResp, err error) {
reply, err := s.dao.GetTopicList(ctx)
if err != nil {
err = ecode.CallResourceError
return
}
resp = &v1pb.GetTopicListResp{}
resp.TopicList = reply
return
}
// CheckTopic implementation
// 检验话题是否有效
// `method:"GET" midware:"auth"`
func (s *TopicService) CheckTopic(ctx context.Context, req *v1pb.CheckTopicReq) (resp *v1pb.CheckTopicResp, err error) {
msg := req.Topic
area := "live_biaoti"
reply, err := s.dao.CheckMsgIsLegal(ctx, msg, area, 0)
if err != nil {
err = ecode.Error(ecode.CallMainFilterError, "出错啦,再试试吧")
return
}
resp = &v1pb.CheckTopicResp{}
if reply {
err = ecode.Error(ecode.FILTERNOTPASS, "当前输入的话题里面包含敏感内容~请修改~")
return
}
return
}

View File

@@ -0,0 +1,55 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-blink/api/http/v1"
"go-common/library/net/metadata"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/live/app-blink/conf"
)
var topic *TopicService
func init() {
flag.Set("conf", "../../cmd/test.toml")
if err := conf.Init(); err != nil {
panic(err)
}
topic = NewTopicService(conf.Conf)
}
// group=qa01 DEPLOY_ENV=uat go test -run TestGetTopicList
func TestGetTopicList(t *testing.T) {
Convey("TestGetTopicList", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(16299525),
})
res, err := topic.GetTopicList(ctx, &v1.GetTopicListReq{
Platform: "ios",
})
fmt.Println(1111, res, err, 22222)
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}
func TestCheckTopic(t *testing.T) {
Convey("TestCheckTopic", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(16299525),
})
res, err := topic.CheckTopic(ctx, &v1.CheckTopicReq{
Platform: "ios",
Topic: "我是习",
})
fmt.Println(1111, res, err, 22222)
t.Logf("%v,%s", res, err)
})
}