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-ucenter/api/http/v1:all-srcs",
"//app/interface/live/app-ucenter/cmd:all-srcs",
"//app/interface/live/app-ucenter/conf:all-srcs",
"//app/interface/live/app-ucenter/dao:all-srcs",
"//app/interface/live/app-ucenter/model:all-srcs",
"//app/interface/live/app-ucenter/server/http:all-srcs",
"//app/interface/live/app-ucenter/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,14 @@
# Owner
liuzhen
yangbaibing
wangyao
wujunchen
xiehaishen
# Author
liuzhen
# Reviewer
liuzhen
yangbaibing

View File

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

View File

@@ -0,0 +1,16 @@
# app-ucenter-interface
# 项目简介
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,62 @@
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 = [
"appUcenter.bm.go",
"service.bm.go",
],
embed = [":v1_go_proto"],
importpath = "go-common/app/interface/live/app-ucenter/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 = [
"appUcenter.proto",
"service.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-ucenter/api/http/v1",
proto = ":v1_proto",
tags = ["automanaged"],
deps = ["@com_github_gogo_protobuf//gogoproto:go_default_library"],
)

View File

@@ -0,0 +1,129 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: appUcenter.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:
appUcenter.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 PathRoomGetInfo = "/live.appucenter.v1.Room/GetInfo"
var PathRoomCreate = "/live.appucenter.v1.Room/Create"
var PathTopicGetTopicList = "/live.appucenter.v1.Topic/GetTopicList"
var PathTopicCheckTopic = "/live.appucenter.v1.Topic/CheckTopic"
// ==============
// 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-ucenter/v1/room/GetInfo", auth, roomGetInfo)
e.POST("/xlive/app-ucenter/v1/room/Create", auth, roomCreate)
}
// RegisterRoomBMServer Register the blademaster route
func RegisterRoomBMServer(e *bm.Engine, server RoomBMServer) {
v1RoomSvc = server
e.GET("/live.appucenter.v1.Room/GetInfo", roomGetInfo)
e.POST("/live.appucenter.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-ucenter/v1/topic/GetTopicList", auth, topicGetTopicList)
e.GET("/xlive/app-ucenter/v1/topic/CheckTopic", auth, topicCheckTopic)
}
// RegisterTopicBMServer Register the blademaster route
func RegisterTopicBMServer(e *bm.Engine, server TopicBMServer) {
v1TopicSvc = server
e.GET("/live.appucenter.v1.Topic/GetTopicList", topicGetTopicList)
e.GET("/live.appucenter.v1.Topic/CheckTopic", topicCheckTopic)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,82 @@
syntax = "proto3";
package live.appucenter.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
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 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.appucenter.v1 -->
- [/xlive/app-ucenter/v1/room/GetInfo](#xliveapp-ucenterv1roomGetInfo) 获取房间基本信息
- [/xlive/app-ucenter/v1/room/Create](#xliveapp-ucenterv1roomCreate) 创建房间
## /xlive/app-ucenter/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-ucenter/v1/room/Create
###创建房间
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|platform|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"room_id": ""
}
}
```

View File

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

View File

@@ -0,0 +1,157 @@
// Code generated by protoc-gen-bm v0.1, DO NOT EDIT.
// source: service.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:
service.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 PathRoomAdminIsAny = "/live.appucenter.v1.RoomAdmin/is_any"
var PathRoomAdminGetByUid = "/live.appucenter.v1.RoomAdmin/get_by_uid"
var PathRoomAdminResign = "/live.appucenter.v1.RoomAdmin/resign"
var PathRoomAdminSearchForAdmin = "/live.appucenter.v1.RoomAdmin/search_for_admin"
var PathRoomAdminGetByAnchor = "/live.appucenter.v1.RoomAdmin/get_by_anchor"
var PathRoomAdminDismiss = "/live.appucenter.v1.RoomAdmin/dismiss"
var PathRoomAdminAppoint = "/live.appucenter.v1.RoomAdmin/appoint"
// ===================
// RoomAdmin Interface
// ===================
// History 相关服务
type RoomAdminBMServer interface {
// 根据登录态获取功能入口是否显示, 需要登录态
// `method:"GET" midware:"auth"`
IsAny(ctx context.Context, req *ShowEntryReq) (resp *ShowEntryResp, err error)
// 获取用户拥有的的所有房管身份
// `method:"GET" midware:"auth"`
GetByUid(ctx context.Context, req *RoomAdminGetByUidReq) (resp *RoomAdminGetByUidResp, err error)
// 辞职房管
// `method:"POST" midware:"auth"`
Resign(ctx context.Context, req *RoomAdminResignRoomAdminReq) (resp *RoomAdminResignRoomAdminResp, err error)
// 查询需要添加的房管
// `method:"POST" midware:"auth"`
SearchForAdmin(ctx context.Context, req *RoomAdminSearchForAdminReq) (resp *RoomAdminSearchForAdminResp, err error)
// 获取主播拥有的的所有房管
// `method:"GET" midware:"auth"`
GetByAnchor(ctx context.Context, req *RoomAdminGetByAnchorReq) (resp *RoomAdminGetByAnchorResp, err error)
// 撤销房管
// `method:"POST" midware:"auth"`
Dismiss(ctx context.Context, req *RoomAdminDismissAdminReq) (resp *RoomAdminDismissAdminResp, err error)
// 任命房管
// `method:"POST" midware:"auth"`
Appoint(ctx context.Context, req *RoomAdminAddReq) (resp *RoomAdminAddResp, err error)
}
var v1RoomAdminSvc RoomAdminBMServer
func roomAdminIsAny(c *bm.Context) {
p := new(ShowEntryReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.IsAny(c, p)
c.JSON(resp, err)
}
func roomAdminGetByUid(c *bm.Context) {
p := new(RoomAdminGetByUidReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.GetByUid(c, p)
c.JSON(resp, err)
}
func roomAdminResign(c *bm.Context) {
p := new(RoomAdminResignRoomAdminReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.Resign(c, p)
c.JSON(resp, err)
}
func roomAdminSearchForAdmin(c *bm.Context) {
p := new(RoomAdminSearchForAdminReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.SearchForAdmin(c, p)
c.JSON(resp, err)
}
func roomAdminGetByAnchor(c *bm.Context) {
p := new(RoomAdminGetByAnchorReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.GetByAnchor(c, p)
c.JSON(resp, err)
}
func roomAdminDismiss(c *bm.Context) {
p := new(RoomAdminDismissAdminReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.Dismiss(c, p)
c.JSON(resp, err)
}
func roomAdminAppoint(c *bm.Context) {
p := new(RoomAdminAddReq)
if err := c.BindWith(p, binding.Default(c.Request.Method, c.Request.Header.Get("Content-Type"))); err != nil {
return
}
resp, err := v1RoomAdminSvc.Appoint(c, p)
c.JSON(resp, err)
}
// RegisterV1RoomAdminService Register the blademaster route with middleware map
// midMap is the middleware map, the key is defined in proto
func RegisterV1RoomAdminService(e *bm.Engine, svc RoomAdminBMServer, midMap map[string]bm.HandlerFunc) {
auth := midMap["auth"]
v1RoomAdminSvc = svc
e.GET("/xlive/app-ucenter/v1/roomAdmin/is_any", auth, roomAdminIsAny)
e.GET("/xlive/app-ucenter/v1/roomAdmin/get_by_uid", auth, roomAdminGetByUid)
e.POST("/xlive/app-ucenter/v1/roomAdmin/resign", auth, roomAdminResign)
e.POST("/xlive/app-ucenter/v1/roomAdmin/search_for_admin", auth, roomAdminSearchForAdmin)
e.GET("/xlive/app-ucenter/v1/roomAdmin/get_by_anchor", auth, roomAdminGetByAnchor)
e.POST("/xlive/app-ucenter/v1/roomAdmin/dismiss", auth, roomAdminDismiss)
e.POST("/xlive/app-ucenter/v1/roomAdmin/appoint", auth, roomAdminAppoint)
}
// RegisterRoomAdminBMServer Register the blademaster route
func RegisterRoomAdminBMServer(e *bm.Engine, server RoomAdminBMServer) {
v1RoomAdminSvc = server
e.GET("/live.appucenter.v1.RoomAdmin/is_any", roomAdminIsAny)
e.GET("/live.appucenter.v1.RoomAdmin/get_by_uid", roomAdminGetByUid)
e.POST("/live.appucenter.v1.RoomAdmin/resign", roomAdminResign)
e.POST("/live.appucenter.v1.RoomAdmin/search_for_admin", roomAdminSearchForAdmin)
e.GET("/live.appucenter.v1.RoomAdmin/get_by_anchor", roomAdminGetByAnchor)
e.POST("/live.appucenter.v1.RoomAdmin/dismiss", roomAdminDismiss)
e.POST("/live.appucenter.v1.RoomAdmin/appoint", roomAdminAppoint)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,186 @@
syntax = "proto3";
package live.appucenter.v1;
option go_package = "v1";
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
// History 相关服务
service RoomAdmin {
// 根据登录态获取功能入口是否显示, 需要登录态
// `method:"GET" midware:"auth"`
rpc is_any (ShowEntryReq) returns (ShowEntryResp);
// 获取用户拥有的的所有房管身份
// `method:"GET" midware:"auth"`
rpc get_by_uid (RoomAdminGetByUidReq) returns (RoomAdminGetByUidResp);
// 辞职房管
// `method:"POST" midware:"auth"`
rpc resign (RoomAdminResignRoomAdminReq) returns (RoomAdminResignRoomAdminResp);
// 查询需要添加的房管
// `method:"POST" midware:"auth"`
rpc search_for_admin (RoomAdminSearchForAdminReq) returns (RoomAdminSearchForAdminResp);
// 获取主播拥有的的所有房管
// `method:"GET" midware:"auth"`
rpc get_by_anchor (RoomAdminGetByAnchorReq) returns (RoomAdminGetByAnchorResp);
// 撤销房管
// `method:"POST" midware:"auth"`
rpc dismiss (RoomAdminDismissAdminReq) returns (RoomAdminDismissAdminResp);
// 任命房管
// `method:"POST" midware:"auth"`
rpc appoint (RoomAdminAddReq) returns (RoomAdminAddResp);
}
// 历史记录请求参数定义
message ShowEntryReq {
}
// 获取接口返回响应
message ShowEntryResp {
// 是否有房管
int64 has_admin = 1;
}
message RoomAdminSearchForAdminReq {
string key_word = 1 [(gogoproto.moretags) = 'form:"key_word" validate:"required"'];
}
message RoomAdminSearchForAdminResp {
repeated Data data = 3 [(gogoproto.jsontag) = "data"];
message Data {
// 用户id
int64 uid = 1 [(gogoproto.jsontag) = "uid"];
// 是否房管
int64 is_admin = 2 [(gogoproto.jsontag) = "is_admin"];
// 用户名
string uname = 4 [(gogoproto.jsontag) = "uname"];
// 用户头像
string face = 5 [(gogoproto.jsontag) = "face"];
// 粉丝勋章名称
string medal_name = 6 [(gogoproto.jsontag) = "medal_name"];
// 粉丝勋章等级
int64 level = 7 [(gogoproto.jsontag) = "level"];
}
}
message RoomAdminResignRoomAdminReq {
// 房间号
int64 roomid = 1 [(gogoproto.moretags) = 'form:"roomid" validate:"required"'];
}
message RoomAdminResignRoomAdminResp {
}
message RoomAdminGetByUidReq {
// 页数
int64 page = 1 [(gogoproto.moretags) = 'form:"page"'];
}
message RoomAdminGetByUidResp {
//
Page page = 1;
//
repeated Data data = 3 [(gogoproto.jsontag) = "data"];
message Data {
// 用户id
int64 uid = 1 [(gogoproto.jsontag) = "uid"];
// 房间号
int64 roomid = 2 [(gogoproto.jsontag) = "roomid"];
// 主播的用户id
int64 anchor_id = 3 [(gogoproto.jsontag) = "anchor_id"];
// 主播用户名
string uname = 4 [(gogoproto.jsontag) = "uname"];
// 主播封面
string anchor_cover = 5 [(gogoproto.jsontag) = "anchor_cover"];
// 上任时间
string ctime = 6 [(gogoproto.jsontag) = "ctime"];
}
message Page {
// 当前页码
int64 page = 1;
// 每页大小
int64 page_size = 2;
// 总页数
int64 total_page = 3;
// 总记录数
int64 total_count = 4;
}
}
message RoomAdminGetByAnchorReq {
// 页数
int64 page = 1 [(gogoproto.moretags) = 'form:"page"'];
}
message RoomAdminGetByAnchorResp {
//
Page page = 1;
//
repeated Data data = 3 [(gogoproto.jsontag) = "data"];
message Data {
// 用户id
int64 uid = 1 [(gogoproto.jsontag) = "uid"];
// 用户名
string uname = 4 [(gogoproto.jsontag) = "uname"];
// 用户头像
string face = 5 [(gogoproto.jsontag) = "face"];
// 上任时间
string ctime = 6 [(gogoproto.jsontag) = "ctime"];
// 粉丝勋章名称
string medal_name = 8 [(gogoproto.jsontag) = "medal_name"];
// 粉丝勋章等级
int64 level = 9 [(gogoproto.jsontag) = "level"];
}
message Page {
// 当前页码
int64 page = 1;
// 每页大小
int64 page_size = 2;
// 总页数
int64 total_page = 3;
// 总记录数
int64 total_count = 4;
}
}
message RoomAdminDismissAdminReq {
// 房管的用户uid
int64 uid = 1 [(gogoproto.moretags) = 'form:"uid" validate:"required"'];
}
message RoomAdminDismissAdminResp {
}
message RoomAdminAddReq {
// 房管的uid
int64 uid = 1 [(gogoproto.moretags) = 'form:"uid" validate:"required"'];
}
message RoomAdminAddResp {
message UI {
// 用户id
int64 uid = 1 [(gogoproto.jsontag) = "uid"];
// 用户名
string uname = 2 [(gogoproto.jsontag) = "uname"];
}
// banner
UI userinfo = 1 [(gogoproto.jsontag) = "userinfo"];
// 房管的用户id
int64 uid = 2 [(gogoproto.jsontag) = "uid"];
// 房间号
int64 roomid = 3 [(gogoproto.jsontag) = "roomid"];
// 创建时间 "2017-07-26 17:12:51"
string ctime = 4 [(gogoproto.jsontag) = "ctime"];
}

View File

@@ -0,0 +1,263 @@
<!-- package=live.appucenter.v1 -->
- [/xlive/app-ucenter/v1/roomAdmin/is_any](#xliveapp-ucenterv1roomAdminis_any) 根据登录态获取功能入口是否显示, 需要登录态
- [/xlive/app-ucenter/v1/roomAdmin/get_by_uid](#xliveapp-ucenterv1roomAdminget_by_uid) 获取用户拥有的的所有房管身份
- [/xlive/app-ucenter/v1/roomAdmin/resign](#xliveapp-ucenterv1roomAdminresign) 辞职房管
- [/xlive/app-ucenter/v1/roomAdmin/search_for_admin](#xliveapp-ucenterv1roomAdminsearch_for_admin) 查询需要添加的房管
- [/xlive/app-ucenter/v1/roomAdmin/get_by_anchor](#xliveapp-ucenterv1roomAdminget_by_anchor) 获取主播拥有的的所有房管
- [/xlive/app-ucenter/v1/roomAdmin/dismiss](#xliveapp-ucenterv1roomAdmindismiss) 撤销房管
- [/xlive/app-ucenter/v1/roomAdmin/appoint](#xliveapp-ucenterv1roomAdminappoint) 任命房管
## /xlive/app-ucenter/v1/roomAdmin/is_any
### 根据登录态获取功能入口是否显示, 需要登录态
> 需要登录
#### 方法GET
#### 请求参数
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// 是否有房管
"has_admin": 0
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/get_by_uid
### 获取用户拥有的的所有房管身份
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|page|否|integer| 页数|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"page": {
// 当前页码
"page": 0,
// 每页大小
"page_size": 0,
// 总页数
"total_page": 0,
// 总记录数
"total_count": 0
},
"data": [
{
// 用户id
"uid": 0,
// 房间号
"roomid": 0,
// 主播的用户id
"anchor_id": 0,
// 主播用户名
"uname": "",
// 主播封面
"anchor_cover": "",
// 上任时间
"ctime": ""
}
]
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/resign
### 辞职房管
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|roomid|是|integer| 房间号|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/search_for_admin
### 查询需要添加的房管
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|key_word|是|string||
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"data": [
{
// 用户id
"uid": 0,
// 是否房管
"is_admin": 0,
// 用户名
"uname": "",
// 用户头像
"face": "",
// 粉丝勋章名称
"medal_name": "",
// 粉丝勋章等级
"level": 0
}
]
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/get_by_anchor
### 获取主播拥有的的所有房管
> 需要登录
#### 方法GET
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|page|否|integer| 页数|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
"page": {
// 当前页码
"page": 0,
// 每页大小
"page_size": 0,
// 总页数
"total_page": 0,
// 总记录数
"total_count": 0
},
"data": [
{
// 用户id
"uid": 0,
// 用户名
"uname": "",
// 用户头像
"face": "",
// 上任时间
"ctime": "",
// 粉丝勋章名称
"medal_name": "",
// 粉丝勋章等级
"level": 0
}
]
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/dismiss
### 撤销房管
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 房管的用户uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
}
}
```
## /xlive/app-ucenter/v1/roomAdmin/appoint
### 任命房管
> 需要登录
#### 方法POST
#### 请求参数
|参数名|必选|类型|描述|
|:---|:---|:---|:---|
|uid|是|integer| 房管的uid|
#### 响应
```javascript
{
"code": 0,
"message": "ok",
"data": {
// banner
"userinfo": {
// 用户id
"uid": 0,
// 用户名
"uname": ""
},
// 房管的用户id
"uid": 0,
// 房间号
"roomid": 0,
// 创建时间 "2017-07-26 17:12:51"
"ctime": ""
}
}
```

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-ucenter/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-ucenter/conf:go_default_library",
"//app/interface/live/app-ucenter/server/http:go_default_library",
"//app/interface/live/app-ucenter/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-ucenter/conf"
"go-common/app/interface/live/app-ucenter/server/http"
"go-common/app/interface/live/app-ucenter/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-ucenter start")
trace.Init(conf.Conf.Tracer)
defer trace.Close()
ecode.Init(conf.Conf.Ecode)
svc := service.New(conf.Conf)
http.Init(conf.Conf)
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-ucenter exit")
time.Sleep(time.Second)
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,20 @@
[app-ucenter]
[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"
[log]
stdout=true

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-ucenter/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
LiveRpc map[string]*liverpc.ClientConfig
GrpcCli *warden.ClientConfig
Auth *auth.Config
HttpClient *bm.ClientConfig
Warden *warden.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-ucenter/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-ucenter/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-ucenter/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,90 @@
package dao
import (
"context"
"net/url"
"strconv"
"time"
"go-common/app/interface/live/app-ucenter/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-ucenter/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,38 @@
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-ucenter/server/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-ucenter/api/http/v1:go_default_library",
"//app/interface/live/app-ucenter/conf:go_default_library",
"//app/interface/live/app-ucenter/service:go_default_library",
"//app/interface/live/app-ucenter/service/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,71 @@
package http
import (
"go-common/library/net/http/blademaster/middleware/auth"
"net/http"
"go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/app/interface/live/app-ucenter/conf"
"go-common/app/interface/live/app-ucenter/service"
spSrv "go-common/app/interface/live/app-ucenter/service/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
roomSrv *spSrv.RoomService
midAuth *auth.Auth
topicSrv *spSrv.TopicService
raSrv *spSrv.RoomAdminService
)
// Init init
func Init(c *conf.Config) {
srv = service.New(c)
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) {
roomSrv = spSrv.NewRoomService(c)
raSrv = spSrv.NewRoomAdminService(c)
midAuth = auth.New(c.Auth)
topicSrv = spSrv.NewTopicService(c)
}
func route(e *bm.Engine) {
e.Ping(ping)
e.Register(register)
g := e.Group("/xlive/app-ucenter/v1")
{
g.GET("/start", vfy.Verify, howToStart)
}
v1.RegisterV1RoomService(e, roomSrv, map[string]bm.HandlerFunc{"auth": midAuth.User})
v1.RegisterV1TopicService(e, topicSrv, map[string]bm.HandlerFunc{"auth": midAuth.User})
v1.RegisterV1RoomAdminService(e, raSrv, 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-ucenter/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-ucenter/conf:go_default_library",
"//app/interface/live/app-ucenter/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-ucenter/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-ucenter/conf"
"go-common/app/interface/live/app-ucenter/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,60 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"roomAdmin_test.go",
"room_test.go",
"topic_test.go",
],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/interface/live/app-ucenter/api/http/v1:go_default_library",
"//app/interface/live/app-ucenter/conf:go_default_library",
"//library/net/metadata:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"room.go",
"roomAdmin.go",
"topic.go",
],
importpath = "go-common/app/interface/live/app-ucenter/service/v1",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/live/app-ucenter/api/http/v1:go_default_library",
"//app/interface/live/app-ucenter/conf:go_default_library",
"//app/interface/live/app-ucenter/dao:go_default_library",
"//app/service/live/xuser/api/grpc/v1:go_default_library",
"//library/ecode:go_default_library",
"//library/log: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"],
)

View File

@@ -0,0 +1,162 @@
package v1
import (
"context"
v1pb "go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/app/interface/live/app-ucenter/conf"
"go-common/app/interface/live/app-ucenter/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,337 @@
package v1
import (
"context"
v1pb "go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/app/interface/live/app-ucenter/conf"
"go-common/app/service/live/xuser/api/grpc/v1"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
)
// RoomAdminService struct
type RoomAdminService struct {
conf *conf.Config
// optionally add other properties here, such as dao
// dao *dao.Dao
conn v1.RoomAdminClient
}
//NewRoomAdminService init
func NewRoomAdminService(c *conf.Config) (s *RoomAdminService) {
s = &RoomAdminService{
conf: c,
}
conn, err := v1.NewXuserRoomAdminClient(conf.Conf.Warden)
if err != nil {
panic(err)
}
s.conn = conn
return s
}
// History 相关服务
// ShowEntry implementation
// 根据登录态获取功能入口是否显示, 需要登录态
// `method:"GET" midware:"auth"`
func (s *RoomAdminService) ShowEntry(ctx context.Context, req *v1pb.ShowEntryReq) (resp *v1pb.ShowEntryResp, err error) {
resp = &v1pb.ShowEntryResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
if mid <= 0 {
err = ecode.NoLogin
return
}
if err != nil {
return
}
ret, err := s.conn.IsAny(ctx, &v1.RoomAdminShowEntryReq{
Uid: mid,
})
log.Info("call IsAny mid(%v) ret(%v)", mid, ret)
resp.HasAdmin = ret.HasAdmin
return
}
// SearchForAdmin implementation
// 查询需要添加的房管
// `method:"POST" midware:"auth"`
func (s *RoomAdminService) SearchForAdmin(ctx context.Context, req *v1pb.RoomAdminSearchForAdminReq) (resp *v1pb.RoomAdminSearchForAdminResp, err error) {
resp = &v1pb.RoomAdminSearchForAdminResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
keyWord := req.GetKeyWord()
if keyWord == "" {
err = ecode.ParamInvalid
return
}
ret, err := s.conn.SearchForAdmin(ctx, &v1.RoomAdminSearchForAdminReq{
Uid: mid,
KeyWord: keyWord,
})
log.Info("call SearchForAdmin mid(%v) keyword (%v) ret(%v)", mid, keyWord, ret)
if err != nil {
return
}
if ret == nil {
log.Info("call SearchForAdmin nil mid(%v) keyword (%v) err (%v)", mid, keyWord, err)
return
}
if ret.Data == nil {
log.Info("SearchForAdmin(%v) return nil (%v)", keyWord, ret)
return
}
for _, v := range ret.Data {
resp.Data = append(resp.Data, &v1pb.RoomAdminSearchForAdminResp_Data{
Uid: v.Uid,
IsAdmin: v.IsAdmin,
Uname: v.Uname,
Face: v.Face,
MedalName: v.MedalName,
Level: v.Level,
})
}
return
}
// IsAny implementation
// 根据登录态获取功能入口是否显示, 需要登录态
// `method:"GET" midware:"auth"`
func (s *RoomAdminService) IsAny(ctx context.Context, req *v1pb.ShowEntryReq) (resp *v1pb.ShowEntryResp, err error) {
resp = &v1pb.ShowEntryResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
if mid <= 0 {
err = ecode.NoLogin
return
}
ret, err := s.conn.IsAny(ctx, &v1.RoomAdminShowEntryReq{
Uid: mid,
})
log.Info("call IsAny mid(%v) ret(%v)", mid, ret)
if err != nil {
return
}
if ret == nil {
log.Info("call IsAny nil mid(%v) err (%v)", mid, err)
return
}
resp.HasAdmin = ret.HasAdmin
return
}
// GetByUid implementation
// 获取用户拥有的的所有房管身份
// `method:"GET" midware:"auth"`
func (s *RoomAdminService) GetByUid(ctx context.Context, req *v1pb.RoomAdminGetByUidReq) (resp *v1pb.RoomAdminGetByUidResp, err error) {
resp = &v1pb.RoomAdminGetByUidResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
page := req.GetPage()
if page <= 0 {
page = 1
}
ret, err := s.conn.GetByUid(ctx, &v1.RoomAdminGetByUidReq{
Uid: mid,
Page: page,
})
log.Info("call GetByUid mid(%v) page (%v) ret(%v)", mid, page, ret)
if err != nil {
return
}
if ret == nil {
log.Info("call GetByUid nil mid(%v) err (%v)", mid, err)
return
}
if nil != ret.Page {
resp.Page = &v1pb.RoomAdminGetByUidResp_Page{
Page: ret.GetPage().GetPage(),
PageSize: ret.GetPage().GetPageSize(),
TotalPage: ret.GetPage().GetTotalPage(),
TotalCount: ret.GetPage().GetTotalCount(),
}
}
if nil != ret.Data {
for _, v := range ret.Data {
resp.Data = append(resp.Data, &v1pb.RoomAdminGetByUidResp_Data{
Uid: v.Uid,
Roomid: v.Roomid,
AnchorId: v.AnchorId,
Uname: v.Uname,
AnchorCover: v.AnchorCover,
Ctime: v.Ctime,
})
}
}
return
}
// Resign implementation
// 辞职房管
// `method:"POST" midware:"auth"`
func (s *RoomAdminService) Resign(ctx context.Context, req *v1pb.RoomAdminResignRoomAdminReq) (resp *v1pb.RoomAdminResignRoomAdminResp, err error) {
resp = &v1pb.RoomAdminResignRoomAdminResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
roomId := req.GetRoomid()
if roomId <= 0 {
err = ecode.ParamInvalid
return
}
ret, err := s.conn.Resign(ctx, &v1.RoomAdminResignRoomAdminReq{
Roomid: roomId,
Uid: mid,
})
log.Info("call Resign mid(%v) room (%v) ret(%v)", mid, roomId, ret)
if err != nil {
return
}
return
}
// GetByAnchor implementation
// 获取主播拥有的的所有房管身份
// `method:"GET" midware:"auth"`
func (s *RoomAdminService) GetByAnchor(ctx context.Context, req *v1pb.RoomAdminGetByAnchorReq) (resp *v1pb.RoomAdminGetByAnchorResp, err error) {
resp = &v1pb.RoomAdminGetByAnchorResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
page := req.GetPage()
if page <= 0 {
page = 1
}
ret, err := s.conn.GetByAnchor(ctx, &v1.RoomAdminGetByAnchorReq{
Page: page,
Uid: mid,
})
log.Info("call GetByAnchor mid(%v) page (%v) ret(%v)", mid, page, ret)
if ret == nil {
log.Info("call GetByAnchor nil mid(%v) err (%v)", mid, err)
return
}
if err != nil {
return
}
if nil != ret.GetPage() {
resp.Page = &v1pb.RoomAdminGetByAnchorResp_Page{
Page: ret.GetPage().GetPage(),
PageSize: ret.GetPage().GetPageSize(),
TotalPage: ret.GetPage().GetTotalPage(),
TotalCount: ret.GetPage().GetTotalCount(),
}
}
if nil != ret.Data {
for _, v := range ret.Data {
resp.Data = append(resp.Data, &v1pb.RoomAdminGetByAnchorResp_Data{
Uid: v.GetUid(),
Uname: v.GetUname(),
Face: v.GetFace(),
Ctime: v.GetCtime(),
MedalName: v.GetMedalName(),
Level: v.GetLevel(),
})
}
}
return
}
// Dismiss implementation
// 撤销房管
// `method:"POST" midware:"auth"`
func (s *RoomAdminService) Dismiss(ctx context.Context, req *v1pb.RoomAdminDismissAdminReq) (resp *v1pb.RoomAdminDismissAdminResp, err error) {
resp = &v1pb.RoomAdminDismissAdminResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
uid := req.GetUid()
if uid <= 0 {
err = ecode.ParamInvalid
return
}
ret, err := s.conn.Dismiss(ctx, &v1.RoomAdminDismissAdminReq{
Uid: uid,
AnchorId: mid,
})
log.Info("call Dismiss mid(%v) user (%v) ret(%v)", mid, uid, ret)
if err != nil {
return
}
return
}
// Appoint implementation
// 添加房管
// `method:"POST" midware:"auth"`
func (s *RoomAdminService) Appoint(ctx context.Context, req *v1pb.RoomAdminAddReq) (resp *v1pb.RoomAdminAddResp, err error) {
resp = &v1pb.RoomAdminAddResp{}
mid, _ := metadata.Value(ctx, "mid").(int64)
uid := req.GetUid()
if uid <= 0 {
err = ecode.ParamInvalid
return
}
ret, err := s.conn.Appoint(ctx, &v1.RoomAdminAddReq{
Uid: uid,
AnchorId: mid,
})
log.Info("call Appoint mid(%v) uid (%v) ret(%v)", mid, uid, ret)
if err != nil {
log.Info("Appoint error statusCode(%v) ret(%v), err(%+v)", ret, err)
}
if nil != ret {
resp = &v1pb.RoomAdminAddResp{
Uid: ret.GetUid(),
Roomid: ret.GetRoomid(),
}
if nil != ret.Userinfo {
userInfo := &v1pb.RoomAdminAddResp_UI{
Uid: ret.GetUserinfo().GetUid(),
Uname: ret.GetUserinfo().GetUname(),
}
resp.Userinfo = userInfo
}
} else {
log.Info("call appoint return nil uid (%v) anchorid (%v)", uid, mid)
}
return
}

View File

@@ -0,0 +1,59 @@
package v1
import (
"context"
"flag"
"go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/app/interface/live/app-ucenter/conf"
"go-common/library/net/metadata"
"testing"
. "github.com/smartystreets/goconvey/convey"
"github.com/smartystreets/goconvey/convey"
)
var roomadmin *RoomAdminService
func init() {
flag.Set("conf", "../../cmd/test.toml")
if err := conf.Init(); err != nil {
panic(err)
}
roomadmin = NewRoomAdminService(conf.Conf)
}
func TestV1ShowEntry(t *testing.T) {
convey.Convey("ShowEntry", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(10000),
})
res, err := roomadmin.ShowEntry(ctx, &v1.ShowEntryReq{})
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}
func TestV1SearchForAdmin(t *testing.T) {
convey.Convey("SearchForAdmin", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(10000),
})
res, err := roomadmin.SearchForAdmin(ctx, &v1.RoomAdminSearchForAdminReq{
KeyWord: "test",
})
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}
func TestV1IsAny(t *testing.T) {
convey.Convey("IsAny", t, func() {
ctx := metadata.NewContext(context.TODO(), metadata.MD{
metadata.Mid: int64(10000),
})
res, err := roomadmin.IsAny(ctx, &v1.ShowEntryReq{})
t.Logf("%v,%s", res, err)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,54 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/library/net/metadata"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/live/app-ucenter/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,59 @@
package v1
import (
"context"
v1pb "go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/app/interface/live/app-ucenter/conf"
"go-common/app/interface/live/app-ucenter/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,53 @@
package v1
import (
"context"
"flag"
"fmt"
"testing"
"go-common/app/interface/live/app-ucenter/api/http/v1"
"go-common/library/net/metadata"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/live/app-ucenter/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)
})
}