Initial commit

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

View File

@@ -0,0 +1,54 @@
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/interface/main/app-interface/cmd:all-srcs",
"//app/interface/main/app-interface/conf:all-srcs",
"//app/interface/main/app-interface/dao/account:all-srcs",
"//app/interface/main/app-interface/dao/archive:all-srcs",
"//app/interface/main/app-interface/dao/article:all-srcs",
"//app/interface/main/app-interface/dao/audio:all-srcs",
"//app/interface/main/app-interface/dao/bangumi:all-srcs",
"//app/interface/main/app-interface/dao/bplus:all-srcs",
"//app/interface/main/app-interface/dao/coin:all-srcs",
"//app/interface/main/app-interface/dao/community:all-srcs",
"//app/interface/main/app-interface/dao/elec:all-srcs",
"//app/interface/main/app-interface/dao/favorite:all-srcs",
"//app/interface/main/app-interface/dao/history:all-srcs",
"//app/interface/main/app-interface/dao/live:all-srcs",
"//app/interface/main/app-interface/dao/location:all-srcs",
"//app/interface/main/app-interface/dao/mall:all-srcs",
"//app/interface/main/app-interface/dao/member:all-srcs",
"//app/interface/main/app-interface/dao/pay:all-srcs",
"//app/interface/main/app-interface/dao/relation:all-srcs",
"//app/interface/main/app-interface/dao/resource:all-srcs",
"//app/interface/main/app-interface/dao/search:all-srcs",
"//app/interface/main/app-interface/dao/shop:all-srcs",
"//app/interface/main/app-interface/dao/sidebar:all-srcs",
"//app/interface/main/app-interface/dao/sp:all-srcs",
"//app/interface/main/app-interface/dao/space:all-srcs",
"//app/interface/main/app-interface/dao/tag:all-srcs",
"//app/interface/main/app-interface/dao/thumbup:all-srcs",
"//app/interface/main/app-interface/dao/ticket:all-srcs",
"//app/interface/main/app-interface/dao/topic:all-srcs",
"//app/interface/main/app-interface/http:all-srcs",
"//app/interface/main/app-interface/model:all-srcs",
"//app/interface/main/app-interface/service/account:all-srcs",
"//app/interface/main/app-interface/service/dataflow:all-srcs",
"//app/interface/main/app-interface/service/display:all-srcs",
"//app/interface/main/app-interface/service/favorite:all-srcs",
"//app/interface/main/app-interface/service/history:all-srcs",
"//app/interface/main/app-interface/service/relation:all-srcs",
"//app/interface/main/app-interface/service/search:all-srcs",
"//app/interface/main/app-interface/service/space:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
# Owner
peiyifei
liweijia
# Author
xiequan
haoguanwei
# Reviewer
peiyifei
haoguanwei

View File

@@ -0,0 +1,17 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- haoguanwei
- liweijia
- peiyifei
- xiequan
labels:
- interface
- interface/main/app-interface
- main
options:
no_parent_owners: true
reviewers:
- haoguanwei
- peiyifei
- xiequan

View File

@@ -0,0 +1,43 @@
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 = ["app-interface-test.toml"],
importpath = "go-common/app/interface/main/app-interface/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/http: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,449 @@
tick = "1m"
roundTick ="30m"
localCache = false
[searchBuildLimit]
PGCHighlightIOS = 9999
PGCHighlightAndroid = 9999999
PGCALLIOS = 8229
PGCALLAndroid = 9999999
SpecialerGuideIOS = 9999
SpecialerGuideAndroid = 9999999
SearchArticleIOS = 9999
SearchArticleAndroid = 9999999
ComicIOS = 8229
ComicAndroid = 9999999
ChannelIOS = 8229
ChannelAndroid = 9999999
CooperationIOS = 9999
CooperationAndroid = 9999999
QueryCorIOS = 9999
QueryCorAndroid = 9999999
SugDetailIOS = 9999
SugDetailAndroid = 9999999
NewTwitterIOS = 9999
NewTwitterAndroid = 9999999
[searchDynamicSwitch]
isUP = true
isCount = true
[xlog]
dir = "/data/log/app-interface"
[Infoc]
taskID = "001723"
proto = "tcp"
addr = "172.18.33.124:15140"
chanSize = 10240
[useractPub]
key = "0QNB0ZgFozbKUCQhbTq8"
secret = "0QNB0ZgFozbKUCQhbTq9"
group = "RecUseract-App-P"
topic = "RecUseract-T"
action = "pub"
name = "app-interface/useract"
proto = "tcp"
addr = "172.18.33.50:6205"
active = 1
idle = 1
dialTimeout = "1s"
readTimeout = "1s"
writeTimeout = "1s"
idleTimeout = "10s"
[dislikePub]
key = "0QNB0ZgFozbKUCQhbTq8"
secret= "0QNB0ZgFozbKUCQhbTq9"
group= "TagDislike-SkyHorse-P"
topic= "Dislike-T"
action="pub"
name = "app-feed/dislike"
proto = "tcp"
addr = "172.18.33.50:6205"
active = 100
idle = 50
dialTimeout = "50ms"
readTimeout = "200ms"
writeTimeout = "200ms"
idleTimeout = "80s"
[host]
account = "http://uat-account.bilibili.com"
bangumi = "http://uat-bangumi.bilibili.com"
apiCo = "http://uat-api.bilibili.co"
apiCom = "http://uat-api.bilibili.com"
im9 = "http://www.im9.com"
space = "http://uat-space.bilibili.com"
search = "http://uat-s.search.bilibili.co"
game = "http://interface.biligame.com"
live = "http://uat-live.bilibili.com"
elec = "http://uat-elec.bilibili.com"
ad = "http://uat-cm.bilibili.co"
vc = "http://uat-api.vc.bilibili.co"
apiLiveCo = "http://api.live.bilibili.co"
show = "http://show.bilibili.co"
www = "http://uat-www.bilibili.com"
pay = "http://pay.bilibili.co"
member = "http://member.bilibili.co"
mall = "http://fat1-mall.bilibili.co"
[search]
seasonNum = 3
movieNum = 3
seasonMore = 1
movieMore = 1
upUserNum = 1
uvLimit = 1
userNum = 1
userVideoLimit = 1
biliUserNum =1
biliUserVideoLimit=1
iPadSearchBangumi = 2
iPadSearchFt = 2
[space]
forbidMid = [40153618,6887420,178431199,58010653,15528977,304022040,53148642,258502589,11458153,21841193,39329259,20003749,161652222,67916241]
[gameApp]
key = "QGSfvPhlsTtv3BMK"
secret = "ygcWHXbEGGiO0octq3eIPMPInKsq1LYp"
[identify]
whiteAccessKey = "a2a1eb0ac97d6ba08b85aa0151528f34"
whiteMid = 23675773
[identify.memcache]
name = "go-business/identify"
proto = "unix"
addr = "/tmp/uat-platform-identify-mc.sock"
active = 10
idle = 10
dialTimeout = "80s"
readTimeout = "200ms"
writeTimeout = "200ms"
idleTimeout = "80s"
[identify.host]
auth = "http://uat-passport.bilibili.co"
secret = "http://uat-open.bilibili.co"
[identify.httpClient]
key = "7c7ac0db1aa05587"
secret = "9a6d62d93290c5f771ad381e9ca23f26"
dial = "1s"
timeout = "1s"
keepAlive = "60s"
[identify.httpClient.breaker]
window = "10s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[identify.httpClient.url]
"http://uat-passport.bilibili.co/intranet/auth/tokenInfo" = {timeout = "100ms"}
"http://uat-passport.bilibili.co/intranet/auth/cookieInfo" = {timeout = "100ms"}
"http://uat-open.bilibili.co/api/getsecret" = {timeout = "500ms"}
[httpClient]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "30ms"
timeout = "500ms"
keepAlive = "60s"
[httpClient.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpIm9]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "80ms"
timeout = "150ms"
keepAlive = "60s"
[httpIm9.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpSearch]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "30ms"
timeout = "800ms"
keepAlive = "60s"
[httpSearch.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpWrite]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "30ms"
timeout = "700ms"
keepAlive = "60s"
[httpWrite.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpLive]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "30ms"
timeout = "100ms"
keepAlive = "60s"
[httpLive.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpBangumi]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "30ms"
timeout = "300ms"
keepAlive = "60s"
[httpBangumi.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpAD]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "80ms"
timeout = "300ms"
keepAlive = "60s"
[httpAD.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpBPlus]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "80ms"
timeout = "300ms"
keepAlive = "60s"
[httpBPlus.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[httpGame]
key = "e7482d29be4a95b8"
secret = "9e803791cdef756e75faee68e12b7442"
dial = "80ms"
timeout = "300ms"
keepAlive = "60s"
[httpGame.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[bm]
[bm.outer]
addr = "0.0.0.0:6131"
timeout = "1s"
[mysql]
[mysql.show]
addr = "172.22.34.101:3306"
dsn = "show:UJYgc9UkHIaGovEDUXpTU4U0rjBpZtwb@tcp(172.22.34.101:3306)/bilibili_show?timeout=5s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8,utf8mb4"
active = 10
idle = 5
queryTimeout = "100ms"
execTimeout = "100ms"
tranTimeout = "200ms"
[mysql.show.breaker]
window = "3s"
sleep = "100ms"
bucket = 10
ratio = 0.5
request = 100
[redis]
[redis.relate]
name = "app-interface/relate"
proto = "tcp"
addr = "172.16.33.54:6380"
active = 20
idle = 10
dialTimeout = "50ms"
readTimeout = "50ms"
writeTimeout = "50ms"
idleTimeout = "80s"
[redis.stat]
name = "app-interface/stat"
proto = "tcp"
addr = "172.16.33.54:6380"
active = 20
idle = 10
dialTimeout = "50ms"
readTimeout = "50ms"
writeTimeout = "50ms"
idleTimeout = "80s"
expire = "10s"
[redis.contribute]
name = "app-interface/contribute"
proto = "tcp"
addr = "172.16.33.54:6380"
active = 20
idle = 10
dialTimeout = "50ms"
readTimeout = "50ms"
writeTimeout = "50m"
idleTimeout = "80s"
[localRedis]
[localRedis.stat]
name = "app-interface/local_stat"
proto = "unix"
addr = "/var/run/redis/redis.sock"
active = 20
idle = 10
dialTimeout = "50ms"
readTimeout = "100ms"
writeTimeout = "100ms"
idleTimeout = "80s"
expire = "10s"
[memcache]
[memcache.archive]
name = "app-interface/archive"
proto = "unix"
addr = "/tmp/uat-app-mc.sock"
active = 50
idle = 10
dialTimeout = "50ms"
readTimeout = "50ms"
writeTimeout = "50ms"
idleTimeout = "80s"
archiveExpire = "20m"
relateExpire = "20m"
addonExpire = "5m"
recommedExpire= "10m"
[localMemcache]
[localMemcache.archive]
name = "app-interface/local_archive"
proto = "unix"
addr = "/var/run/memcached/memcached.sock"
active = 50
idle = 10
dialTimeout = "50ms"
readTimeout = "50ms"
writeTimeout = "50ms"
idleTimeout = "80s"
[contributePub]
key = ""
secret = ""
group = ""
topic = ""
action = "pub"
offset = "old"
buffer = 128
name = "app-interface/contribute"
proto = "tcp"
addr = "172.16.33.158:6205"
idle = 100
active = 100
dialTimeout = "1s"
readTimeout = "60s"
writeTimeout = "1s"
idleTimeout = "10s"
[[IOSSections]]
Title = "创作中心"
[[IOSSections.Items]]
Title = "创作首页"
URI = "bilibili://uper/homevc"
Icon = "http://i0.hdslb.com/bfs/archive/03b380fb10fda3075e40a6e30c07abc76681eb9d.png"
[[IOSSections.Items]]
Title = "稿件管理"
URI = "bilibili://uper/user_center/archive_list"
Icon = "http://i0.hdslb.com/bfs/archive/0aea1fb991709811f6938fe90704a2020bf9f046.png"
[[IOSSections.Items]]
Title = "创作激励"
URI = "https://member.bilibili.com/studio/up-allowance-h5#/"
Icon = "http://i0.hdslb.com/bfs/archive/f15ab617709507f4852c6510183c1ca3c2c5b296.png"
[[IOSSections.Items]]
Title = "征稿公告"
URI = "https://member.bilibili.com/studio/videoup-banner"
Icon = "http://i0.hdslb.com/bfs/archive/0f38c69aa03addb6522ec986d279e90bbcc1050c.png"
[[IOSSections]]
Title = "个人中心"
[[IOSSections.Items]]
Title = "离线缓存"
URI = "bilibili://user_center/download"
Icon = "http://i0.hdslb.com/bfs/archive/021850f46b7d323a5a6a7402dd8dba966021288d.png"
[[IOSSections.Items]]
Title = "历史记录"
URI = "bilibili://user_center/history"
Icon = "http://i0.hdslb.com/bfs/archive/d513ebe76661d32963578f24b44469cfc17beb5c.png"
[[IOSSections.Items]]
Title = "我的收藏"
NeedLogin = 1
URI = "bilibili://user_center/favourite"
Icon = "http://i0.hdslb.com/bfs/archive/7f347348c5d30e519e7b61994dca7bea27364c83.png"
[[IOSSections.Items]]
Title = "我的关注"
NeedLogin = 1
URI = "bilibili://user_center/myfollows"
Icon = "http://i0.hdslb.com/bfs/archive/961279ea4f75c20d5b9a22f5956264662e97e77d.png"
[[IOSSections.Items]]
Title = "稍后再看"
NeedLogin = 1
URI = "bilibili://user_center/watch_later"
Icon = "http://i0.hdslb.com/bfs/archive/2f2f58d3f74684c59814467dca5f78577744ca09.png"
[[IOSSections.Items]]
Title = "B币钱包"
NeedLogin = 1
URI = "bilibili://bilipay/wallet"
Icon = "http://i0.hdslb.com/bfs/archive/65486287e36d789c631b630a6bc6e2a527dd48bb.png"
[[IOSSections.Items]]
Title = "会员购中心"
URI = "bilibili://mall/mine?msource=mine"
Icon = "http://i0.hdslb.com/bfs/archive/83e9831e358d7cafeaccab44967b3414653c973c.png"
[[IOSSections.Items]]
Title = "直播中心"
NeedLogin = 1
URI = "bilibili://user_center/live_center"
Icon = "http://i0.hdslb.com/bfs/archive/9b37e79d5bd19ae4884c2426ff722b7ac3270c21.png"
[[IOSSections]]
Title = "我的服务"
[[IOSSections.Items]]
Title = "大会员"
NeedLogin = 1
URI = "bilibili://user_center/vip"
Icon = "http://i0.hdslb.com/bfs/archive/34ff922443e5e1dd8b1bddb8ce938a61e13bbf56.png"
[[IOSSections.Items]]
Title = "看视频免流量"
URI = "bilibili://user_center/free_traffic"
Icon = "http://i0.hdslb.com/bfs/archive/c8c72498d59c33e2b5adaac31db022f6dcdb9064.png"
[[IOSSections.Items]]
Title = "我的客服"
URI = "bilibili://user_center/feedback"
Icon = "http://i0.hdslb.com/bfs/archive/d8906fde3144e1c6e5f1cf3492c948bfcfdb6287.png"

View File

@@ -0,0 +1,48 @@
package main
import (
"flag"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/http"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/net/trace"
"os"
"os/signal"
"syscall"
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
log.Error("conf.Init() error(%v)", err)
panic(err)
}
// init log
log.Init(conf.Conf.XLog)
defer log.Close()
log.Info("app-interface start")
// init trace
trace.Init(conf.Conf.Tracer)
defer trace.Close()
// ecode init
ecode.Init(conf.Conf.Ecode)
// service init
http.Init(conf.Conf)
// init pprof conf.Conf.Perf
// init signal
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
s := <-c
log.Info("app-interface get a signal %s", s.String())
switch s {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT:
log.Info("app-interface exit")
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,44 @@
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/main/app-interface/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/cache/memcache:go_default_library",
"//library/cache/redis:go_default_library",
"//library/conf:go_default_library",
"//library/database/sql:go_default_library",
"//library/ecode/tip:go_default_library",
"//library/log:go_default_library",
"//library/log/infoc:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/rpc:go_default_library",
"//library/net/rpc/warden:go_default_library",
"//library/net/trace:go_default_library",
"//library/queue/databus:go_default_library",
"//library/time: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,257 @@
package conf
import (
"errors"
"flag"
"go-common/library/cache/memcache"
"go-common/library/cache/redis"
"go-common/library/conf"
"go-common/library/database/sql"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
"go-common/library/log/infoc"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/rpc"
"go-common/library/net/rpc/warden"
"go-common/library/net/trace"
"go-common/library/queue/databus"
xtime "go-common/library/time"
"github.com/BurntSushi/toml"
)
// conf init.
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config struct
type Config struct {
// Local cache
LocalCache bool
// interface XLog
XLog *log.Config
// tick time
Tick xtime.Duration
// tracer
Tracer *trace.Config
// databus
UseractPub *databus.Config
// httpClinet
HTTPClient *bm.ClientConfig
// httpIm9
HTTPIm9 *bm.ClientConfig
// httpSearch
HTTPSearch *bm.ClientConfig
// httpWrite
HTTPWrite *bm.ClientConfig
// httpLive
HTTPLive *bm.ClientConfig
// httpbangumi
HTTPBangumi *bm.ClientConfig
// httpbplus
HTTPBPlus *bm.ClientConfig
// httpgame
HTTPGame *bm.ClientConfig
// http
BM *HTTPServers
// host
Host *Host
// rpc client
AccountRPC *rpc.ClientConfig
ArchiveRPC *rpc.ClientConfig
TagRPC *rpc.ClientConfig
ArticleRPC *rpc.ClientConfig
RelationRPC *rpc.ClientConfig
ThumbupRPC *rpc.ClientConfig
HistoryRPC *rpc.ClientConfig
ResourceRPC *rpc.ClientConfig
MemberRPC *rpc.ClientConfig
LocationRPC *rpc.ClientConfig
// db
MySQL *MySQL
// ecode
// ecode
Ecode *ecode.Config
// redis
Redis *Redis
// mc
Memcache *Memcache
// search
Search *Search
// space
Space *Space
// contribute
ContributePub *databus.Config
CoinClient *warden.ClientConfig
// BroadcastRPC grpc
PGCRPC *warden.ClientConfig
// build limit
SearchBuildLimit *SearchBuildLimit
// login build
LoginBuild *LoginBuild
// infoc
Infoc *infoc.Config
// fav Client
FavClient *warden.ClientConfig
// search dynamic
SearchDynamicSwitch *SearchDynamicSwitch
}
// LoginBuild is
type LoginBuild struct {
Iphone int
}
// HTTPServers Http Servers
type HTTPServers struct {
Outer *bm.ServerConfig
}
// Host struct
type Host struct {
Account string
Bangumi string
APICo string
Im9 string
Search string
Game string
Space string
Elec string
VC string
APILiveCo string
WWW string
Show string
Pay string
Member string
Mall string
}
// MySQL struct
type MySQL struct {
Show *sql.Config
}
// Redis struct
type Redis struct {
Contribute *struct {
*redis.Config
Expire xtime.Duration
}
}
// Memcache struct
type Memcache struct {
Archive *struct {
*memcache.Config
RecommedExpire xtime.Duration
ArchiveExpire xtime.Duration
}
}
// Search struct
type Search struct {
SeasonNum int
MovieNum int
SeasonMore int
MovieMore int
UpUserNum int
UVLimit int
UserNum int
UserVideoLimit int
BiliUserNum int
BiliUserVideoLimit int
OperationNum int
IPadSearchBangumi int
IPadSearchFt int
}
// Space struct
type Space struct {
ForbidMid []int64
}
// SearchBuildLimit struct
type SearchBuildLimit struct {
PGCHighLightIOS int
PGCHighLightAndroid int
PGCALLIOS int
PGCALLAndroid int
SpecialerGuideIOS int
SpecialerGuideAndroid int
SearchArticleIOS int
SearchArticleAndroid int
ComicIOS int
ComicAndroid int
ChannelIOS int
ChannelAndroid int
CooperationIOS int
CooperationAndroid int
QueryCorIOS int
QueryCorAndroid int
SugDetailIOS int
SugDetailAndroid int
NewTwitterIOS int
NewTwitterAndroid int
}
type SearchDynamicSwitch struct {
IsUP bool
IsCount bool
}
func init() {
flag.StringVar(&confPath, "conf", "", "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
}
client.Watch("app-interface.toml")
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
}

View File

@@ -0,0 +1,53 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["account_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/account",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/account/model:go_default_library",
"//app/service/main/account/rpc/client:go_default_library",
"//app/service/main/member/api/gorpc:go_default_library",
"//app/service/main/member/model/block: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",
"//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,54 @@
package account
import (
"context"
"encoding/json"
"fmt"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
//go test -conf="../../app-interface-example.toml" -v -test.run TestCard
func TestCard(t *testing.T) {
Convey("TestCard", t, func() {
err := conf.Init()
if err != nil {
return
}
dao := New(conf.Conf)
card, err := dao.Profile3(context.TODO(), 28009145)
if err != nil {
t.Errorf("dao.Profile3 error(%v)", err)
return
}
result, err := json.Marshal(card)
if err != nil {
t.Errorf("json.Marshal error(%v)", err)
return
}
fmt.Printf("test card (%v) \n", string(result))
})
}
//go test -conf="../../app-interface-example.toml" -v -test.run TestCardByName
func TestCardByName(t *testing.T) {
err := conf.Init()
if err != nil {
return
}
dao := New(conf.Conf)
card, err := dao.ProfileByName3(context.TODO(), "冠冠爱看书")
if err != nil {
t.Errorf("dao.ProfileByName3 error(%v)", err)
return
}
result, err := json.Marshal(card)
if err != nil {
t.Errorf("json.Marshal error(%v)", err)
return
}
fmt.Printf("test card (%v) \n", string(result))
}

View File

@@ -0,0 +1,193 @@
package account
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
account "go-common/app/service/main/account/model"
accrpc "go-common/app/service/main/account/rpc/client"
memberrpc "go-common/app/service/main/member/api/gorpc"
blockmodel "go-common/app/service/main/member/model/block"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// Dao is account dao.
type Dao struct {
client *bm.Client
// rpc
accRPC *accrpc.Service3
memberRPC *memberrpc.Service
}
// New account dao.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: bm.NewClient(c.HTTPClient),
accRPC: accrpc.New3(c.AccountRPC),
memberRPC: memberrpc.New(c.MemberRPC),
}
return
}
// BlockTime get user blocktime
func (d *Dao) BlockTime(c context.Context, mid int64) (blockTime int64, err error) {
info, err := d.memberRPC.BlockInfo(c, &blockmodel.RPCArgInfo{MID: mid})
if err != nil {
err = errors.Wrapf(err, "%v", mid)
return
}
if info.EndTime > 0 {
blockTime = info.EndTime
}
return
}
// Profile3 get profile
func (d *Dao) Profile3(c context.Context, mid int64) (card *account.ProfileStat, err error) {
arg := &account.ArgMid{Mid: mid}
if card, err = d.accRPC.ProfileWithStat3(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
// Card get card
func (d *Dao) Card(c context.Context, mid int64) (card *account.Card, err error) {
if card, err = d.accRPC.Card3(c, &account.ArgMid{Mid: mid}); err != nil {
err = errors.Wrapf(err, "%v", mid)
}
return
}
// ProfileByName3 rpc card get by name
func (d *Dao) ProfileByName3(c context.Context, name string) (card *account.ProfileStat, err error) {
infos, err := d.accRPC.InfosByName3(c, &account.ArgNames{Names: []string{name}})
if err != nil {
err = errors.Wrapf(err, "%v", name)
return
}
if len(infos) == 0 {
err = ecode.NothingFound
return
}
for mid := range infos {
card, err = d.Profile3(c, mid)
break
}
return
}
// Infos3 rpc info get by mids .
func (d *Dao) Infos3(c context.Context, mids []int64) (res map[int64]*account.Info, err error) {
arg := &account.ArgMids{Mids: mids}
if res, err = d.accRPC.Infos3(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
// Relations3 relations.
func (d *Dao) Relations3(c context.Context, owners []int64, mid int64) (follows map[int64]bool) {
if len(owners) == 0 {
return nil
}
follows = make(map[int64]bool, len(owners))
for _, owner := range owners {
follows[owner] = false
}
var (
am map[int64]*account.Relation
err error
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &account.ArgRelations{Owners: owners, Mid: mid, RealIP: ip}
if am, err = d.accRPC.Relations3(c, arg); err != nil {
log.Error("d.accRPC.Relations2(%v) error(%v)", arg, err)
return
}
for i, a := range am {
if _, ok := follows[i]; ok {
follows[i] = a.Following
}
}
return
}
// RichRelations3 rich relations.
func (d *Dao) RichRelations3(c context.Context, owner, mid int64) (rel int, err error) {
var (
res map[int64]int
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &account.ArgRichRelation{Mids: []int64{mid}, Owner: owner, RealIP: ip}
if res, err = d.accRPC.RichRelations3(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
return
}
if r, ok := res[mid]; ok {
rel = r
}
return
}
// Cards3 is
func (d *Dao) Cards3(c context.Context, mids []int64) (res map[int64]*account.Card, err error) {
arg := &account.ArgMids{Mids: mids}
if res, err = d.accRPC.Cards3(c, arg); err != nil {
err = errors.Wrapf(err, "%v")
}
return
}
// UserCheck 各种入口白名单
// https://www.tapd.cn/20055921/prong/stories/view/1120055921001066980 动态互推TAPD在此
func (d *Dao) UserCheck(c context.Context, mid int64, checkURL string) (ok bool, err error) {
params := url.Values{}
params.Set("uid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
Status int `json:"status"`
} `json:"data"`
}
if err = d.client.Get(c, checkURL, "", params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), checkURL+"?"+params.Encode())
return
}
if res.Data.Status == 1 {
ok = true
}
return
}
// RedDot 我的页小红点逻辑
func (d *Dao) RedDot(c context.Context, mid int64, redDotURL string) (ok bool, err error) {
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
RedDot bool `json:"red_dot"`
} `json:"data"`
}
if err = d.client.Get(c, redDotURL, "", params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), redDotURL+"?"+params.Encode())
return
}
log.Warn("reddot response mid(%d) url(%s) res(%t)", mid, redDotURL+"?"+params.Encode(), res.Data.RedDot)
ok = res.Data.RedDot
return
}

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 = [
"dao_test.go",
"memcache_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"memcache.go",
],
importpath = "go-common/app/interface/main/app-interface/dao/archive",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//app/service/main/archive/api/gorpc:go_default_library",
"//app/service/main/archive/model/archive:go_default_library",
"//library/cache/memcache:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/sync/errgroup: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,167 @@
package archive
import (
"context"
"time"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/service/main/archive/api"
arcrpc "go-common/app/service/main/archive/api/gorpc"
"go-common/app/service/main/archive/model/archive"
"go-common/library/cache/memcache"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/sync/errgroup"
"github.com/pkg/errors"
)
// Dao is archive dao.
type Dao struct {
// http client
client *bm.Client
// rpc
arcRPC *arcrpc.Service2
// memcache
arcMc *memcache.Pool
expireArc int32
}
// New new a archive dao.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
// http client
client: bm.NewClient(c.HTTPWrite),
arcRPC: arcrpc.New2(c.ArchiveRPC),
// memcache
arcMc: memcache.NewPool(c.Memcache.Archive.Config),
expireArc: int32(time.Duration(c.Memcache.Archive.ArchiveExpire) / time.Second),
}
return
}
// UpArcs3 get upper archives
func (d *Dao) UpArcs3(c context.Context, mid int64, pn, ps int) (as []*api.Arc, err error) {
arg := &archive.ArgUpArcs2{Mid: mid, Pn: pn, Ps: ps}
if as, err = d.arcRPC.UpArcs3(c, arg); err != nil {
if ecode.Cause(err) == ecode.NothingFound {
err = nil
}
}
return
}
// UpCount2 get upper count.
func (d *Dao) UpCount2(c context.Context, mid int64) (cnt int, err error) {
arg := &archive.ArgUpCount2{Mid: mid}
return d.arcRPC.UpCount2(c, arg)
}
// Archives multi get archives.
func (d *Dao) Archives(c context.Context, aids []int64) (as map[int64]*api.Arc, err error) {
if len(aids) == 0 {
return
}
g, ctx := errgroup.WithContext(c)
g.Go(func() (err error) {
var missed []int64
if as, missed, err = d.arcsCache(ctx, aids); err != nil {
log.Error("%+v", err)
missed = aids
err = nil
}
if len(missed) == 0 {
return
}
var tmp map[int64]*api.Arc
arg := &archive.ArgAids2{Aids: missed}
if tmp, err = d.arcRPC.Archives3(ctx, arg); err != nil {
log.Error("d.arcRPC.Archives3(%v) error(%v)", arg, err)
return
}
for aid, a := range tmp {
as[aid] = a
}
return
})
var stm map[int64]*api.Stat
g.Go(func() (err error) {
var missed []int64
if stm, missed, err = d.statsCache(ctx, aids); err != nil {
log.Error("%+v", err)
missed = aids
err = nil
}
if len(missed) == 0 {
return
}
var tmp map[int64]*api.Stat
arg := &archive.ArgAids2{Aids: missed}
if tmp, err = d.arcRPC.Stats3(ctx, arg); err != nil {
log.Error("d.arcRPC.Stats3(%v) error(%v)", arg, err)
err = nil
return
}
for aid, st := range tmp {
stm[aid] = st
}
return
})
if err = g.Wait(); err != nil {
return
}
for aid, a := range as {
if st, ok := stm[aid]; ok {
a.Stat = *st
}
}
return
}
// Archives2 multi get archives.
func (d *Dao) Archives2(c context.Context, aids []int64) (am map[int64]*api.Arc, err error) {
if len(aids) == 0 {
return
}
var avMissed, stMissed []int64
if am, avMissed, stMissed, err = d.avWithStCaches(c, aids); err != nil {
avMissed = aids
log.Error("%+v", err)
err = nil
}
g, ctx := errgroup.WithContext(c)
if len(avMissed) != 0 {
g.Go(func() (err error) {
arg := &archive.ArgAids2{Aids: avMissed}
avm, err := d.arcRPC.Archives3(ctx, arg)
if err != nil {
err = errors.Wrapf(err, "%v", arg)
return
}
for aid, a := range avm {
am[aid] = a
}
return
})
}
var stm map[int64]*api.Stat
if len(stMissed) != 0 {
g.Go(func() error {
arg := &archive.ArgAids2{Aids: stMissed}
if stm, err = d.arcRPC.Stats3(ctx, arg); err != nil {
log.Error("d.arcRPC.Stats3(%v) error(%v)", arg, err)
}
return nil
})
}
if err = g.Wait(); err != nil {
return
}
for aid, a := range am {
if st, ok := stm[aid]; ok {
a.Stat = *st
}
}
return
}

View File

@@ -0,0 +1,93 @@
package archive
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func TestUpArcs3(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
pn = 1
ps = 5
)
convey.Convey("UpArcs3", t, func(ctx convey.C) {
_, err := d.UpArcs3(c, mid, pn, ps)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestUpCount2(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
)
convey.Convey("UpCount2", t, func(ctx convey.C) {
_, err := d.UpCount2(c, mid)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestArchive(t *testing.T) {
var (
c = context.TODO()
aids = []int64{1}
)
convey.Convey("Archives", t, func(ctx convey.C) {
_, err := d.Archives(c, aids)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestArchive2(t *testing.T) {
var (
c = context.TODO()
aids = []int64{1}
)
convey.Convey("Archives2", t, func(ctx convey.C) {
_, err := d.Archives2(c, aids)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,164 @@
package archive
import (
"context"
"strconv"
"go-common/app/service/main/archive/api"
"go-common/library/cache/memcache"
"go-common/library/log"
"github.com/pkg/errors"
)
const (
_prefixArchive = "a3p_"
_prefixStat = "stp_"
)
func keyArc(aid int64) string {
return _prefixArchive + strconv.FormatInt(aid, 10)
}
func keyStat(aid int64) string {
return _prefixStat + strconv.FormatInt(aid, 10)
}
// arcsCache get archives cache.
func (d *Dao) arcsCache(c context.Context, aids []int64) (cached map[int64]*api.Arc, missed []int64, err error) {
cached = make(map[int64]*api.Arc, len(aids))
var rs map[string]*memcache.Item
conn := d.arcMc.Get(c)
keys := make([]string, 0, len(aids))
aidmap := make(map[string]int64, len(aids))
defer conn.Close()
for _, aid := range aids {
k := keyArc(aid)
if _, ok := aidmap[k]; !ok {
keys = append(keys, k)
aidmap[k] = aid
}
}
if rs, err = conn.GetMulti(keys); err != nil {
err = errors.Wrapf(err, "%v", keys)
return
}
for k, r := range rs {
a := &api.Arc{}
if err = conn.Scan(r, a); err != nil {
log.Error("conn.Scan(%s) error(%v)", r.Value, err)
err = nil
continue
}
cached[aidmap[k]] = a
// delete hit key
delete(aidmap, k)
}
// missed key
missed = make([]int64, 0, len(aidmap))
for _, aid := range aidmap {
missed = append(missed, aid)
}
return
}
// statsCache get stat cache by aids
func (d *Dao) statsCache(c context.Context, aids []int64) (cached map[int64]*api.Stat, missed []int64, err error) {
cached = make(map[int64]*api.Stat, len(aids))
var rs map[string]*memcache.Item
conn := d.arcMc.Get(c)
keys := make([]string, 0, len(aids))
defer conn.Close()
for _, aid := range aids {
keys = append(keys, keyStat(aid))
}
if rs, err = conn.GetMulti(keys); err != nil {
err = errors.Wrapf(err, "%v", keys)
return
}
for _, r := range rs {
st := &api.Stat{}
if err = conn.Scan(r, st); err != nil {
log.Error("conn.Scan(%s) error(%v)", r.Value, err)
err = nil
continue
}
cached[st.Aid] = st
}
if len(cached) == len(aids) {
return
}
for _, aid := range aids {
if _, ok := cached[aid]; !ok {
missed = append(missed, aid)
}
}
return
}
func (d *Dao) avWithStCaches(c context.Context, aids []int64) (cached map[int64]*api.Arc, avMissed, stMissed []int64, err error) {
cached = make(map[int64]*api.Arc, len(aids))
conn := d.arcMc.Get(c)
defer conn.Close()
keys := make([]string, 0, len(aids)*2)
avm := make(map[string]int64, len(aids))
stm := make(map[string]int64, len(aids))
for _, aid := range aids {
ak := keyArc(aid)
if _, ok := avm[ak]; !ok {
keys = append(keys, ak)
avm[ak] = aid
}
sk := keyStat(aid)
if _, ok := stm[sk]; !ok {
keys = append(keys, sk)
stm[sk] = aid
}
}
rs, err := conn.GetMulti(keys)
if err != nil {
err = errors.Wrapf(err, "%v", keys)
return
}
stCached := make(map[string]*api.Stat, len(aids))
for k, r := range rs {
if aid, ok := avm[k]; ok {
a := &api.Arc{}
if err = conn.Scan(r, a); err != nil {
log.Error("conn.Scan(%s) error(%v)", r.Value, err)
err = nil
continue
}
cached[aid] = a
// delete hit key
delete(avm, k)
}
if _, ok := stm[k]; ok {
st := &api.Stat{}
if err = conn.Scan(r, st); err != nil {
log.Error("conn.Scan(%s) error(%v)", r.Value, err)
err = nil
continue
}
stCached[k] = st
}
}
for k, st := range stCached {
if a, ok := cached[st.Aid]; ok {
a.Stat = *st
// delete hit key
delete(stm, k)
}
}
// missed key
avMissed = make([]int64, 0, len(avm))
for _, aid := range avm {
avMissed = append(avMissed, aid)
}
stMissed = make([]int64, 0, len(stm))
for _, aid := range stm {
stMissed = append(stMissed, aid)
}
return
}

View File

@@ -0,0 +1,148 @@
package archive
import (
"context"
"go-common/app/service/main/archive/api"
"reflect"
"testing"
)
func Test_keyArc(t *testing.T) {
type args struct {
aid int64
}
tests := []struct {
name string
args args
want string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := keyArc(tt.args.aid); got != tt.want {
t.Errorf("keyArc() = %v, want %v", got, tt.want)
}
})
}
}
func Test_keyStat(t *testing.T) {
type args struct {
aid int64
}
tests := []struct {
name string
args args
want string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := keyStat(tt.args.aid); got != tt.want {
t.Errorf("keyStat() = %v, want %v", got, tt.want)
}
})
}
}
func TestDao_arcsCache(t *testing.T) {
type args struct {
c context.Context
aids []int64
}
tests := []struct {
name string
d *Dao
args args
wantCached map[int64]*api.Arc
wantMissed []int64
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotCached, gotMissed, err := tt.d.arcsCache(tt.args.c, tt.args.aids)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.arcsCache() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotCached, tt.wantCached) {
t.Errorf("Dao.arcsCache() gotCached = %v, want %v", gotCached, tt.wantCached)
}
if !reflect.DeepEqual(gotMissed, tt.wantMissed) {
t.Errorf("Dao.arcsCache() gotMissed = %v, want %v", gotMissed, tt.wantMissed)
}
})
}
}
func TestDao_statsCache(t *testing.T) {
type args struct {
c context.Context
aids []int64
}
tests := []struct {
name string
d *Dao
args args
wantCached map[int64]*api.Stat
wantMissed []int64
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotCached, gotMissed, err := tt.d.statsCache(tt.args.c, tt.args.aids)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.statsCache() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotCached, tt.wantCached) {
t.Errorf("Dao.statsCache() gotCached = %v, want %v", gotCached, tt.wantCached)
}
if !reflect.DeepEqual(gotMissed, tt.wantMissed) {
t.Errorf("Dao.statsCache() gotMissed = %v, want %v", gotMissed, tt.wantMissed)
}
})
}
}
func TestDao_avWithStCaches(t *testing.T) {
type args struct {
c context.Context
aids []int64
}
tests := []struct {
name string
d *Dao
args args
wantCached map[int64]*api.Arc
wantAvMissed []int64
wantStMissed []int64
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotCached, gotAvMissed, gotStMissed, err := tt.d.avWithStCaches(tt.args.c, tt.args.aids)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.avWithStCaches() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotCached, tt.wantCached) {
t.Errorf("Dao.avWithStCaches() gotCached = %v, want %v", gotCached, tt.wantCached)
}
if !reflect.DeepEqual(gotAvMissed, tt.wantAvMissed) {
t.Errorf("Dao.avWithStCaches() gotAvMissed = %v, want %v", gotAvMissed, tt.wantAvMissed)
}
if !reflect.DeepEqual(gotStMissed, tt.wantStMissed) {
t.Errorf("Dao.avWithStCaches() gotStMissed = %v, want %v", gotStMissed, tt.wantStMissed)
}
})
}
}

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/article",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/openplatform/article/model:go_default_library",
"//app/interface/openplatform/article/rpc/client:go_default_library",
"//library/net/metadata: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,77 @@
package article
import (
"context"
"go-common/app/interface/main/app-interface/conf"
article "go-common/app/interface/openplatform/article/model"
artrpc "go-common/app/interface/openplatform/article/rpc/client"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// Dao is atticle dao
type Dao struct {
artRPC *artrpc.Service
}
// New initial tag dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
artRPC: artrpc.New(c.ArticleRPC),
}
return
}
// UpArticles get article data from api.
func (d *Dao) UpArticles(c context.Context, mid int64, pn, ps int) (ams []*article.Meta, count int, err error) {
var (
res *article.UpArtMetas
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &article.ArgUpArts{Mid: mid, Pn: pn, Ps: ps, RealIP: ip}
if res, err = d.artRPC.UpArtMetas(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
return
}
if res != nil {
ams = res.Articles
count = res.Count
}
return
}
// Favorites get article data from api.
func (d *Dao) Favorites(c context.Context, mid int64, pn, ps int) (res []*article.Favorite, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &article.ArgFav{Mid: mid, Pn: pn, Ps: ps, RealIP: ip}
if res, err = d.artRPC.Favorites(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) Articles(c context.Context, aids []int64) (res map[int64]*article.Meta, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &article.ArgAids{Aids: aids, RealIP: ip}
if res, err = d.artRPC.ArticleMetas(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) UpLists(c context.Context, mid int64) (lists []*article.List, count int, err error) {
var (
res article.UpLists
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &article.ArgMid{Mid: mid, RealIP: ip}
if res, err = d.artRPC.UpLists(c, arg); err != nil {
err = errors.Wrapf(err, "%+v", arg)
return
}
lists = res.Lists
count = res.Total
return
}

View File

@@ -0,0 +1,36 @@
package article
import (
"context"
"flag"
"path/filepath"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func TestUpArticles(t *testing.T) {
Convey("TestUpArticles", t, func() {
d.UpArticles(context.TODO(), 1, 1, 1)
})
}
func TestNew(t *testing.T) {
Convey("new", t, func() {
d := New(&conf.Config{})
So(d, ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,52 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/audio:go_default_library",
"//library/net/ip:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/audio",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/audio:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
"//library/xstr: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,201 @@
package audio
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/audio"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_audios = "/audio/music-service-c/songs/internal/upsongslist"
_allAudio = "/audio/music-service-c/songs/internal/uppersongs-preload"
_audioDetail = "/audio/music-service-c/songs/internal/uppersongs-batch"
_favAudio = "/audio/music-service-c/collections"
_upperCert = "/audio/music-service-c/internal/upper-cert"
_card = "/x/internal/v1/audio/privilege/mcard"
_fav = "/x/internal/v1/audio/personal/coll"
)
type Dao struct {
client *httpx.Client
audios string
allAudio string
audioDetail string
favAudio string
upperCert string
card string
fav string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
audios: c.Host.APICo + _audios,
allAudio: c.Host.APICo + _allAudio,
audioDetail: c.Host.APICo + _audioDetail,
favAudio: c.Host.APICo + _favAudio,
upperCert: c.Host.APICo + _upperCert,
card: c.Host.APICo + _card,
fav: c.Host.APICo + _fav,
}
return
}
// Audios
func (d *Dao) Audios(c context.Context, mid int64, pn, ps int) (audios []*audio.Audio, total int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("pageIndex", strconv.Itoa(pn))
params.Set("pageSize", strconv.Itoa(ps))
var res struct {
Code int `json:"code"`
Data *struct {
Total int `json:"total"`
List []*audio.Audio `json:"list"`
} `json:"data"`
}
if err = d.client.Get(c, d.audios, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.audios+"?"+params.Encode())
return
}
if res.Data != nil {
total = res.Data.Total
audios = res.Data.List
}
return
}
// AllAudio get 100 audio by ctime desc
func (d *Dao) AllAudio(c context.Context, vmid int64) (aus []*audio.Audio, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
var res struct {
Code int `json:"code"`
Data []*audio.Audio `json:"data"`
}
if err = d.client.Get(c, d.allAudio, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.allAudio+"?"+params.Encode())
return
}
aus = res.Data
return
}
func (d *Dao) AudioDetail(c context.Context, ids []int64) (aum map[int64]*audio.Audio, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("ids", xstr.JoinInts(ids))
var res struct {
Code int `json:"code"`
Data map[int64]*audio.Audio `json:"data"`
}
if err = d.client.Get(c, d.audioDetail, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.audioDetail+"?"+params.Encode())
return
}
aum = res.Data
return
}
func (d *Dao) FavAudio(c context.Context, accessKey string, mid int64, pn, ps int) (aus []*audio.FavAudio, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("access_key", accessKey)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("sort", "-1")
params.Set("page_index", strconv.Itoa(pn))
params.Set("page_size", strconv.Itoa(ps))
var res struct {
Code int `json:"code"`
Data *struct {
List []*audio.FavAudio `json:"list"`
} `json:"data"`
}
if err = d.client.Get(c, d.favAudio, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favAudio+"?"+params.Encode())
return
}
if res.Data != nil {
aus = res.Data.List
}
return
}
func (d *Dao) UpperCert(c context.Context, uid int64) (cert *audio.UpperCert, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(uid, 10))
var res struct {
Code int `json:"code"`
Data *audio.UpperCert `json:"data"`
}
if err = d.client.Get(c, d.upperCert, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.upperCert+"?"+params.Encode())
return
}
cert = res.Data
return
}
func (d *Dao) Card(c context.Context, mid ...int64) (cardm map[int64]*audio.Card, err error) {
params := url.Values{}
params.Set("mid", xstr.JoinInts(mid))
var res struct {
Code int `json:"code"`
Data map[int64]*audio.Card `json:"data"`
}
if err = d.client.Get(c, d.card, "", params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.card+"?"+params.Encode())
return
}
cardm = res.Data
return
}
func (d *Dao) Fav(c context.Context, mid int64) (fav *audio.Fav, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data *audio.Fav `json:"data"`
}
if err = d.client.Get(c, d.fav, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.fav+"?"+params.Encode())
return
}
fav = res.Data
return
}

View File

@@ -0,0 +1,246 @@
package audio
import (
"context"
"flag"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/audio"
"go-common/library/net/ip"
"path/filepath"
"reflect"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
var d *Dao
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func TestNew(t *testing.T) {
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotD := New(tt.args.c); !reflect.DeepEqual(gotD, tt.wantD) {
t.Errorf("New() = %v, want %v", gotD, tt.wantD)
}
})
}
}
func TestDao_Audios(t *testing.T) {
type args struct {
c context.Context
mid int64
pn int
ps int
}
tests := []struct {
name string
args args
wantAudios []*audio.Audio
wantTotal int
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotAudios, gotTotal, err := d.Audios(tt.args.c, tt.args.mid, tt.args.pn, tt.args.ps)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.Audios() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotAudios, tt.wantAudios) {
t.Errorf("Dao.Audios() gotAudios = %v, want %v", gotAudios, tt.wantAudios)
}
if gotTotal != tt.wantTotal {
t.Errorf("Dao.Audios() gotTotal = %v, want %v", gotTotal, tt.wantTotal)
}
})
}
}
func TestDao_AllAudio(t *testing.T) {
type args struct {
c context.Context
vmid int64
}
tests := []struct {
name string
args args
wantAus []*audio.Audio
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotAus, err := d.AllAudio(tt.args.c, tt.args.vmid)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.AllAudio() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotAus, tt.wantAus) {
t.Errorf("Dao.AllAudio() = %v, want %v", gotAus, tt.wantAus)
}
})
}
}
func TestDao_AudioDetail(t *testing.T) {
type args struct {
c context.Context
ids []int64
}
tests := []struct {
name string
args args
wantAum map[int64]*audio.Audio
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotAum, err := d.AudioDetail(tt.args.c, tt.args.ids)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.AudioDetail() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotAum, tt.wantAum) {
t.Errorf("Dao.AudioDetail() = %v, want %v", gotAum, tt.wantAum)
}
})
}
}
func TestDao_FavAudio(t *testing.T) {
type args struct {
c context.Context
accessKey string
mid int64
pn int
ps int
}
tests := []struct {
name string
args args
wantAus []*audio.FavAudio
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotAus, err := d.FavAudio(tt.args.c, tt.args.accessKey, tt.args.mid, tt.args.pn, tt.args.ps)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.FavAudio() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotAus, tt.wantAus) {
t.Errorf("Dao.FavAudio() = %v, want %v", gotAus, tt.wantAus)
}
})
}
}
func TestDao_UpperCert(t *testing.T) {
type args struct {
c context.Context
uid int64
}
tests := []struct {
name string
args args
wantCert *audio.UpperCert
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotCert, err := d.UpperCert(tt.args.c, tt.args.uid)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.UpperCert() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotCert, tt.wantCert) {
t.Errorf("Dao.UpperCert() = %v, want %v", gotCert, tt.wantCert)
}
})
}
}
func TestDao_Card(t *testing.T) {
type args struct {
c context.Context
ip string
mid []int64
}
tests := []struct {
name string
args args
wantCardm map[int64]*audio.Card
wantErr error
}{
{
"normal",
args{
context.TODO(),
ip.InternalIP(),
[]int64{30047},
},
map[int64]*audio.Card{30047: &audio.Card{Type: 1, Status: 1}},
nil,
},
}
for _, tt := range tests {
Convey(tt.name, t, func() {
gotCardm, err := d.Card(tt.args.c, tt.args.mid...)
So(err, ShouldBeNil)
So(gotCardm, ShouldResemble, tt.wantCardm)
})
}
}
func TestDao_Fav(t *testing.T) {
type args struct {
c context.Context
mid int64
}
tests := []struct {
name string
args args
wantFav *audio.Fav
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotFav, err := d.Fav(tt.args.c, tt.args.mid)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.Fav() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotFav, tt.wantFav) {
t.Errorf("Dao.Fav() = %v, want %v", gotFav, tt.wantFav)
}
})
}
}

View File

@@ -0,0 +1,55 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"grpc.go",
],
importpath = "go-common/app/interface/main/app-interface/dao/bangumi",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/bangumi:go_default_library",
"//app/service/openplatform/pgc-season/api/grpc/season/v1: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/xstr: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,226 @@
package bangumi
import (
"context"
"encoding/json"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/bangumi"
seasongrpc "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_season = "/api/inner/season"
_movie = "/internal_api/movie_aid_info"
_bp = "/sponsor/inner/xAjaxGetBP"
_concern = "/api/get_concerned_season"
_hasFollows = "/follow/internal_api/has_follows"
_card = "/pgc/internal/season/search/card"
_favDisplay = "/pgc/internal/follow/app/tab/view"
)
// Dao is bangumi dao
type Dao struct {
client *httpx.Client
season string
movie string
bp string
concern string
hasFollows string
card string
favDisplay string
// grpc
rpcClient seasongrpc.SeasonClient
}
// New bangumi dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPBangumi),
season: c.Host.Bangumi + _season,
movie: c.Host.Bangumi + _movie,
bp: c.Host.Bangumi + _bp,
concern: c.Host.Bangumi + _concern,
hasFollows: c.Host.Bangumi + _hasFollows,
card: c.Host.APICo + _card,
favDisplay: c.Host.APICo + _favDisplay,
}
var err error
if d.rpcClient, err = seasongrpc.NewClient(c.PGCRPC); err != nil {
log.Error("seasongrpc NewClientt error(%v)", err)
}
return
}
// Season bangumi Season.
func (d *Dao) Season(c context.Context, aid, mid int64, ip string) (s *bangumi.Season, err error) {
params := url.Values{}
params.Set("aid", strconv.FormatInt(aid, 10))
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("type", "av")
params.Set("build", "app-interface")
params.Set("platform", "Golang")
var res struct {
Code int `json:"code"`
Result *bangumi.Season `json:"result"`
}
if err = d.client.Get(c, d.season, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.season+"?"+params.Encode())
return
}
s = res.Result
return
}
// BPInfo get bp info data.
func (d *Dao) BPInfo(c context.Context, aid, mid int64, ip string) (data json.RawMessage, err error) {
params := url.Values{}
params.Set("aid", strconv.FormatInt(aid, 10))
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("build", "app-interface")
params.Set("platform", "Golang")
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
if err = d.client.Get(c, d.bp, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.bp+"?"+params.Encode())
return
}
data = res.Data
return
}
// Movie bangumi Movie
func (d *Dao) Movie(c context.Context, aid, mid int64, build int, mobiApp, device, ip string) (m *bangumi.Movie, err error) {
params := url.Values{}
params.Set("id", strconv.FormatInt(aid, 10))
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mobi_app", mobiApp)
params.Set("platform", "Golang")
var res struct {
Code int `json:"code"`
Result *bangumi.Movie `json:"result"`
}
if err = d.client.Get(c, d.movie, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.movie+"?"+params.Encode())
return
}
m = res.Result
return
}
// Concern get concern data from api.
func (d *Dao) Concern(c context.Context, mid, vmid int64, pn, ps int) (ss []*bangumi.Season, total int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("taid", strconv.FormatInt(vmid, 10))
params.Set("page", strconv.Itoa(pn))
params.Set("pagesize", strconv.Itoa(ps))
params.Set("build", "app-interface")
params.Set("platform", "Golang")
var res struct {
Code int `json:"code"`
Total string `json:"count"`
Result []*bangumi.Season `json:"result"`
}
if err = d.client.Get(c, d.concern, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.concern+"?"+params.Encode())
return
}
ss = res.Result
total, _ = strconv.Atoi(res.Total)
return
}
// HasFollows get bngumi tab.
func (d *Dao) HasFollows(c context.Context, mid int64) (has bool, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("type", "2,3,5")
var res struct {
Code int `json:"code"`
Result int `json:"result"`
}
if err = d.client.Get(c, d.hasFollows, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.hasFollows+"?"+params.Encode())
return
}
if res.Result == 1 {
has = true
}
return
}
// Card bangumi card.
func (d *Dao) Card(c context.Context, mid int64, sids []int64) (s map[string]*bangumi.Card, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("season_ids", xstr.JoinInts(sids))
var res struct {
Code int `json:"code"`
Result map[string]*bangumi.Card `json:"result"`
}
if err = d.client.Get(c, d.card, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.card+"?"+params.Encode())
return
}
s = res.Result
return
}
// FavDisplay fav tab display or not.
func (d *Dao) FavDisplay(c context.Context, mid int64) (bangumi, cinema int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Result struct {
Bangumi int `json:"bangumi"`
Cinema int `json:"cinema"`
} `json:"result"`
}
if err = d.client.Get(c, d.favDisplay, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favDisplay+"?"+params.Encode())
return
}
bangumi = res.Result.Bangumi
cinema = res.Result.Cinema
return
}

View File

@@ -0,0 +1,123 @@
package bangumi
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
m.Run()
os.Exit(0)
}
// go test -conf="../../app-interface-example.toml" -v -test.run TestSeason
func TestSeason(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
aid = int64(1)
ip = ""
)
convey.Convey("Season", t, func(ctx convey.C) {
_, err := d.Season(c, aid, mid, ip)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
err = nil
ctx.So(err, convey.ShouldBeNil)
})
})
}
// go test -conf="../../app-interface-example.toml" -v -test.run TestBPInfo
func TestBPInfo(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
aid = int64(1)
ip = ""
)
convey.Convey("BPInfo", t, func(ctx convey.C) {
_, err := d.BPInfo(c, aid, mid, ip)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
err = nil
ctx.So(err, convey.ShouldBeNil)
})
})
}
// go test -conf="../../app-interface-example.toml" -v -test.run TestMovie
func TestMovie(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
aid = int64(1)
build = 123
mobileApp = "android"
device = "android"
ip = ""
)
convey.Convey("Movie", t, func(ctx convey.C) {
_, err := d.Movie(c, aid, mid, build, mobileApp, device, ip)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
err = nil
ctx.So(err, convey.ShouldBeNil)
})
})
}
// go test -conf="../../app-interface-example.toml" -v -test.run TestConcern
func TestConcern(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
vmid = int64(1)
pn = 1
ps = 5
)
convey.Convey("Concern", t, func(ctx convey.C) {
_, _, err := d.Concern(c, mid, vmid, pn, ps)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
err = nil
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestFavDisplay(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
)
convey.Convey("Concern", t, func(ctx convey.C) {
_, _, err := d.FavDisplay(c, mid)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
err = nil
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,22 @@
package bangumi
import (
"context"
seasongrpc "go-common/app/service/openplatform/pgc-season/api/grpc/season/v1"
"go-common/library/log"
)
// Cards get bangumis.
func (d *Dao) Cards(ctx context.Context, seasonIds []int32) (res map[int32]*seasongrpc.CardInfoProto, err error) {
arg := &seasongrpc.SeasonInfoReq{
SeasonIds: seasonIds,
}
info, err := d.rpcClient.Cards(ctx, arg)
if err != nil {
log.Error("d.rpcClient.Cards error(%v)", err)
return nil, err
}
res = info.Cards
return
}

View File

@@ -0,0 +1,70 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"api_test.go",
"dao_test.go",
"databus_test.go",
"redis_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model:go_default_library",
"//app/interface/main/app-interface/model/space:go_default_library",
"//library/time:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
"//vendor/gopkg.in/h2non/gock.v1:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"api.go",
"dao.go",
"databus.go",
"redis.go",
],
importpath = "go-common/app/interface/main/app-interface/dao/bplus",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model:go_default_library",
"//app/interface/main/app-interface/model/bplus:go_default_library",
"//app/interface/main/app-interface/model/space:go_default_library",
"//library/cache/redis: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/queue/databus:go_default_library",
"//library/time:go_default_library",
"//library/xstr: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,381 @@
package bplus
import (
"context"
"net/http"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/model/bplus"
"go-common/library/ecode"
"go-common/library/net/metadata"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_favorPlus = "/user_ex/v1/Fav/getFavList"
_clips = "/clip/v1/video/blist"
_allbums = "/link_draw/v1/Doc/photo_list_ones"
_allClip = "/clip_ext/v1/video/all"
_allAlbum = "/link_draw/v1/Doc/photo_all_ones"
_clipDetail = "/clip_ext/v0/video/getDetailForSpace"
_albumDetail = "/link_draw_ex/v0/Doc/details"
_groupsCount = "/link_group/v1/member/created_groups_num"
_dynamic = "/dynamic_svr/v0/dynamic_svr/space_intro"
_dunamicCount = "/dynamic_svr/v0/dynamic_svr/space_dy_num"
_dynamicDetail = "/dynamic_detail/v0/Dynamic/details"
)
// DynamicCount return dynamic count
func (d *Dao) DynamicCount(c context.Context, mid int64) (count int64, err error) {
params := url.Values{}
params.Set("uids", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
Items []struct {
Mid int64 `json:"uid"`
Num int64 `json:"num"`
} `json:"items"`
} `json:"data"`
}
if err = d.client.Get(c, d.dynamicCount, "", params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.dynamicCount+"?"+params.Encode())
return
}
if len(res.Data.Items) == 0 {
return
}
for _, item := range res.Data.Items {
if item.Mid != mid {
continue
}
count = item.Num
break
}
return
}
// FavClips get fav from B+ api.
func (d *Dao) FavClips(c context.Context, mid int64, accessKey, actionKey, device, mobiApp, platform string, build, pn, ps int) (cs *bplus.Clips, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("access_key", accessKey)
params.Set("actionKey", actionKey)
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mobi_app", mobiApp)
params.Set("platform", platform)
params.Set("biz_type", strconv.Itoa(bplus.CLIPS))
params.Set("page", strconv.Itoa(pn))
params.Set("pagesize", strconv.Itoa(ps))
var res struct {
Code int `json:"code"`
Msg string `json:"msg"`
Message string `json:"message"`
Data *bplus.Clips `json:"data"`
}
if err = d.client.Get(c, d.favorPlus, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favorPlus+"?"+params.Encode())
return
}
cs = res.Data
return
}
// FavAlbums get fav from B+ api.
func (d *Dao) FavAlbums(c context.Context, mid int64, accessKey, actionKey, device, mobiApp, platform string, build, pn, ps int) (as *bplus.Albums, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(mid, 10))
params.Set("access_key", accessKey)
params.Set("actionKey", actionKey)
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mobi_app", mobiApp)
params.Set("platform", platform)
params.Set("biz_type", strconv.Itoa(bplus.ALBUMS))
params.Set("page", strconv.Itoa(pn))
params.Set("pagesize", strconv.Itoa(ps))
var res struct {
Code int `json:"code"`
Msg string `json:"msg"`
Message string `json:"message"`
Data *bplus.Albums `json:"data"`
}
if err = d.client.Get(c, d.favorPlus, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favorPlus+"?"+params.Encode())
return
}
as = res.Data
return
}
// Clips .
func (d *Dao) Clips(c context.Context, vmid int64, pos, size int) (cs []*bplus.Clip, more, offset int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
params.Set("next_offset", strconv.Itoa(pos))
params.Set("page_size", strconv.Itoa(size))
var res struct {
Code int `json:"code"`
Data *struct {
More int `json:"has_more"`
Offset int `json:"next_offset"`
Item []*bplus.Clip `json:"items"`
}
}
if err = d.client.Get(c, d.clips, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.clips+"?"+params.Encode())
return
}
if res.Data != nil {
cs = res.Data.Item
more = res.Data.More
offset = res.Data.Offset
}
return
}
// Albums get album list form api .
func (d *Dao) Albums(c context.Context, vmid int64, pos, size int) (as []*bplus.Album, more, offset int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
params.Set("next_offset", strconv.Itoa(pos))
params.Set("page_size", strconv.Itoa(size))
var res struct {
Code int `json:"code"`
Data *struct {
More int `json:"has_more"`
Offset int `json:"next_offset"`
Item []*bplus.Album `json:"items"`
}
}
if err = d.client.Get(c, d.albums, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.albums+"?"+params.Encode())
return
}
if res.Data != nil {
as = res.Data.Item
more = res.Data.More
offset = res.Data.Offset
}
return
}
// AllClip .
func (d *Dao) AllClip(c context.Context, vmid int64, size int) (cs []*bplus.Clip, count int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
params.Set("page_size", strconv.Itoa(size))
var res struct {
Code int `json:"code"`
Data *struct {
Count int `json:"total_count"`
Item []*bplus.Clip `json:"items"`
}
}
if err = d.client.Get(c, d.allClip, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.allClip+"?"+params.Encode())
return
}
if res.Data != nil {
cs = res.Data.Item
count = res.Data.Count
}
return
}
// AllAlbum .
func (d *Dao) AllAlbum(c context.Context, vmid int64, size int) (as []*bplus.Album, count int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
params.Set("page_size", strconv.Itoa(size))
var res struct {
Code int `json:"code"`
Data *struct {
Count int `json:"total_count"`
Item []*bplus.Album `json:"items"`
}
}
if err = d.client.Get(c, d.allAlbum, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.allAlbum+"?"+params.Encode())
return
}
if res.Data != nil {
as = res.Data.Item
count = res.Data.Count
}
return
}
// ClipDetail .
func (d *Dao) ClipDetail(c context.Context, ids []int64) (cs map[int64]*bplus.Clip, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("ids", xstr.JoinInts(ids))
var res struct {
Code int `json:"code"`
Data *struct {
Item []*bplus.Clip `json:"items"`
}
}
if err = d.client.Get(c, d.clipDetail, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.clipDetail+"?"+params.Encode())
return
}
if res.Data != nil {
cs = make(map[int64]*bplus.Clip, len(res.Data.Item))
for _, clip := range res.Data.Item {
cs[clip.ID] = clip
}
}
return
}
// AlbumDetail .
func (d *Dao) AlbumDetail(c context.Context, vmid int64, ids []int64) (as map[int64]*bplus.Album, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(vmid, 10))
params.Set("ids", xstr.JoinInts(ids))
var res struct {
Code int `json:"code"`
Data *struct {
Item []*bplus.Album `json:"items"`
}
}
if err = d.client.Get(c, d.albumDetail, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.albumDetail+"?"+params.Encode())
return
}
if res.Data != nil {
as = make(map[int64]*bplus.Album, len(res.Data.Item))
for _, album := range res.Data.Item {
as[album.ID] = album
}
}
return
}
// GroupsCount .
func (d *Dao) GroupsCount(c context.Context, mid, vmid int64) (count int, err error) {
var (
req *http.Request
ip = metadata.String(c, metadata.RemoteIP)
)
params := url.Values{}
params.Set("master_uid", strconv.FormatInt(vmid, 10))
if req, err = d.client.NewRequest(http.MethodGet, d.groupsCount, ip, params); err != nil {
return
}
req.Header.Set("X-BiliLive-UID", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data *struct {
Num int `json:"num"`
}
}
if err = d.client.Do(c, req, &res); err != nil {
err = errors.Wrapf(err, "url(%s) header(X-BiliLive-UID:%s)", req.URL.String(), req.Header.Get("X-BiliLive-UID"))
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrapf(ecode.Int(res.Code), "url(%s) header(X-BiliLive-UID:%s)", req.URL.String(), req.Header.Get("X-BiliLive-UID"))
return
}
if res.Data != nil {
count = res.Data.Num
}
return
}
// Dynamic .
func (d *Dao) Dynamic(c context.Context, uid int64) (has bool, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(uid, 10))
var res struct {
Code int `json:"code"`
Data *struct {
Reuslt int `json:"result"`
}
}
if err = d.client.Get(c, d.dynamic, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.dynamic+"?"+params.Encode())
return
}
if res.Data != nil && res.Data.Reuslt == 1 {
has = true
}
return
}
// DynamicDetails get dynamic details by ids.
func (d *Dao) DynamicDetails(c context.Context, ids []int64, from string) (details map[int64]*bplus.Detail, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("from", from)
for _, id := range ids {
params.Add("dynamic_ids[]", strconv.FormatInt(id, 10))
}
var res struct {
Code int `json:"code"`
Data *struct {
List []*bplus.Detail `json:"list"`
} `json:"data"`
}
details = make(map[int64]*bplus.Detail)
if err = d.client.Get(c, d.dynamicDetail, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.dynamicDetail+"?"+params.Encode())
return
}
if res.Data != nil {
for _, detail := range res.Data.List {
if detail.ID != 0 {
details[detail.ID] = detail
}
}
}
return
}

View File

@@ -0,0 +1,115 @@
package bplus
import (
"testing"
. "github.com/smartystreets/goconvey/convey"
)
// TestDynamicCount dao ut.
func TestDynamicCount(t *testing.T) {
Convey("get DynamicCount", t, func() {
_, err := dao.DynamicCount(ctx(), 27515258)
err = nil
So(err, ShouldBeNil)
})
}
// TestFavClips dao ut.
func TestFavClips(t *testing.T) {
Convey("get FavClips", t, func() {
_, err := dao.FavClips(ctx(), 27515258, "da6863c38e83fc7a035c8f7a7d9b1c11", "appkey", "phone", "iphone", "ios", 8230, 1, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestFavAlbums dao ut.
func TestFavAlbums(t *testing.T) {
Convey("get FavAlbums", t, func() {
_, err := dao.FavAlbums(ctx(), 27515258, "da6863c38e83fc7a035c8f7a7d9b1c11", "appkey", "phone", "iphone", "ios", 8230, 1, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestClips dao ut.
func TestClips(t *testing.T) {
Convey("get Clips", t, func() {
_, _, _, err := dao.Clips(ctx(), 27515258, 1, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestAlbums dao ut.
func TestAlbums(t *testing.T) {
Convey("get Albums", t, func() {
_, _, _, err := dao.Albums(ctx(), 27515258, 1, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestAllClip dao ut.
func TestAllClip(t *testing.T) {
Convey("get AllClip", t, func() {
_, _, err := dao.AllClip(ctx(), 27515258, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestAllAlbum dao ut.
func TestAllAlbum(t *testing.T) {
Convey("get AllAlbum", t, func() {
_, _, err := dao.AllAlbum(ctx(), 27515258, 20)
err = nil
So(err, ShouldBeNil)
})
}
// TestClipDetail dao ut.
func TestClipDetail(t *testing.T) {
Convey("get ClipDetail", t, func() {
_, err := dao.ClipDetail(ctx(), []int64{27515258})
err = nil
So(err, ShouldBeNil)
})
}
// TestAlbumDetail dao ut.
func TestAlbumDetail(t *testing.T) {
Convey("get AlbumDetail", t, func() {
_, err := dao.AlbumDetail(ctx(), 27515258, []int64{27515258})
err = nil
So(err, ShouldBeNil)
})
}
// TestGroupsCount dao ut.
func TestGroupsCount(t *testing.T) {
Convey("get GroupsCount", t, func() {
_, err := dao.GroupsCount(ctx(), 27515258, 27515258)
err = nil
So(err, ShouldBeNil)
})
}
// TestDynamic dao ut.
func TestDynamic(t *testing.T) {
Convey("get Dynamic", t, func() {
_, err := dao.Dynamic(ctx(), 27515258)
err = nil
So(err, ShouldBeNil)
})
}
// TestDynamicDetails dao ut.
func TestDynamicDetails(t *testing.T) {
Convey("get DynamicDetails", t, func() {
_, err := dao.DynamicDetails(ctx(), []int64{27515258}, "search")
err = nil
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,49 @@
package bplus
import (
"go-common/app/interface/main/app-interface/conf"
"go-common/library/cache/redis"
httpx "go-common/library/net/http/blademaster"
"go-common/library/queue/databus"
)
// Dao is favorite dao
type Dao struct {
client *httpx.Client
favorPlus string
clips string
albums string
allClip string
allAlbum string
clipDetail string
albumDetail string
groupsCount string
dynamic string
dynamicCount string
dynamicDetail string
// redis
redis *redis.Pool
// databus
pub *databus.Databus
}
// New initial favorite dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPBPlus),
favorPlus: c.Host.APILiveCo + _favorPlus,
clips: c.Host.VC + _clips,
albums: c.Host.VC + _allbums,
allClip: c.Host.VC + _allClip,
allAlbum: c.Host.VC + _allAlbum,
clipDetail: c.Host.VC + _clipDetail,
albumDetail: c.Host.VC + _albumDetail,
groupsCount: c.Host.VC + _groupsCount,
dynamic: c.Host.VC + _dynamic,
dynamicCount: c.Host.VC + _dunamicCount,
dynamicDetail: c.Host.VC + _dynamicDetail,
redis: redis.NewPool(c.Redis.Contribute.Config),
pub: databus.New(c.ContributePub),
}
return
}

View File

@@ -0,0 +1,51 @@
package bplus
import (
"context"
"flag"
"go-common/app/interface/main/app-interface/conf"
"os"
"strings"
"testing"
// "go-common/app/interface/main/app-interface/model/search"
"gopkg.in/h2non/gock.v1"
)
var (
dao *Dao
)
func ctx() context.Context {
return context.Background()
}
// TestMain dao ut.
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
dao = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func httpMock(method, url string) *gock.Request {
r := gock.New(url)
r.Method = strings.ToUpper(method)
return r
}

View File

@@ -0,0 +1,27 @@
package bplus
import (
"context"
"strconv"
"go-common/app/interface/main/app-interface/model/space"
"go-common/library/net/metadata"
xtime "go-common/library/time"
"github.com/pkg/errors"
)
// NotifyContribute .
func (d *Dao) NotifyContribute(c context.Context, vmid int64, attrs *space.Attrs, ctime xtime.Time) (err error) {
ip := metadata.String(c, metadata.RemoteIP)
value := struct {
Vmid int64 `json:"vmid"`
Attrs *space.Attrs `json:"attrs"`
CTime xtime.Time `json:"ctime"`
IP string `json:"ip"`
}{vmid, attrs, ctime, ip}
if err = d.pub.Send(c, strconv.FormatInt(vmid, 10), value); err != nil {
err = errors.Wrapf(err, "%v", value)
}
return
}

View File

@@ -0,0 +1,21 @@
package bplus
import (
"testing"
"time"
"go-common/app/interface/main/app-interface/model/space"
xtime "go-common/library/time"
. "github.com/smartystreets/goconvey/convey"
)
// TestNotifyContribute dao ut.
func TestNotifyContribute(t *testing.T) {
Convey("get DynamicCount", t, func() {
var attrs *space.Attrs
err := dao.NotifyContribute(ctx(), 27515258, attrs, xtime.Time(time.Now().Unix()))
err = nil
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,206 @@
package bplus
import (
"context"
"strconv"
"go-common/app/interface/main/app-interface/model"
"go-common/app/interface/main/app-interface/model/space"
"go-common/library/cache/redis"
"go-common/library/log"
xtime "go-common/library/time"
"github.com/pkg/errors"
)
const (
_prefixContributeAttr = "cba_"
_prefixContribute = "cb_"
)
func keyContributeAttr(vmid int64) string {
return _prefixContributeAttr + strconv.FormatInt(vmid, 10)
}
func keyContribute(vmid int64) string {
return _prefixContribute + strconv.FormatInt(vmid, 10)
}
// AddContributeCache .
func (d *Dao) AddContributeCache(c context.Context, vmid int64, attrs *space.Attrs, items []*space.Item) (err error) {
var attr int32
conn := d.redis.Get(c)
key := keyContribute(vmid)
defer conn.Close()
for _, item := range items {
score := item.CTime.Time().Unix()
item.FormatKey()
if err = conn.Send("ZADD", key, score, item.Member); err != nil {
err = errors.Wrapf(err, "conn.Send(ZADD,%s,%d,%d)", key, score, item.Member)
return
}
}
keyAttr := keyContributeAttr(vmid)
if attrs != nil {
if attrs.Archive {
attr = model.AttrSet(attr, model.AttrYes, model.AttrBitArchive)
}
if attrs.Article {
attr = model.AttrSet(attr, model.AttrYes, model.AttrBitArticle)
}
if attrs.Clip {
attr = model.AttrSet(attr, model.AttrYes, model.AttrBitClip)
}
if attrs.Album {
attr = model.AttrSet(attr, model.AttrYes, model.AttrBitAlbum)
}
if attrs.Audio {
attr = model.AttrSet(attr, model.AttrYes, model.AttrBitAudio)
}
}
if err = conn.Send("SET", keyAttr, attr); err != nil {
err = errors.Wrapf(err, "conn.Send(SET,%s,%d)", keyAttr, attr)
return
}
if err = conn.Flush(); err != nil {
return
}
for i := 0; i < len(items)+1; i++ {
if _, err = conn.Receive(); err != nil {
return
}
}
return
}
// RangeContributeCache .
func (d *Dao) RangeContributeCache(c context.Context, vmid int64, pn, ps int) (items []*space.Item, err error) {
conn := d.redis.Get(c)
key := keyContribute(vmid)
start := (pn - 1) * ps
stop := pn*ps - 1
defer conn.Close()
var vs []interface{}
if vs, err = redis.Values(conn.Do("ZREVRANGE", key, start, stop, "WITHSCORES")); err != nil {
err = errors.Wrapf(err, "conn.Do(ZREVRANGE,%s,%d,%d)", key, start, stop)
return
} else if len(vs) == 0 {
return
}
items = make([]*space.Item, 0, ps)
for len(vs) > 0 {
var (
member int64
score int64
)
if vs, err = redis.Scan(vs, &member, &score); err != nil {
log.Error("redis.Scan(%v) error(%v)", vs, err)
err = nil
continue
}
if member != 0 && score != 0 {
item := &space.Item{Member: member, CTime: xtime.Time(score)}
item.ParseKey()
if item.Goto != "" {
items = append(items, item)
}
}
}
return
}
func (d *Dao) RangeContributionCache(c context.Context, vmid int64, cursor *model.Cursor) (items []*space.Item, err error) {
conn := d.redis.Get(c)
key := keyContribute(vmid)
defer conn.Close()
var (
vs []interface{}
rank int64
start, stop int64
)
if cursor.MoveUpward() || cursor.MoveDownward() {
if rank, err = redis.Int64(conn.Do("ZREVRANK", key, cursor.Current)); err != nil {
if err == redis.ErrNil {
err = nil
return
}
err = errors.Wrapf(err, "conn.Do(ZREVRANK,%s,%d)", key, cursor.Current)
return
}
}
if cursor.Latest() {
start = 0
stop = rank + int64(cursor.Size) - 1
} else if cursor.MoveUpward() {
if rank == 0 {
return
}
if start = rank - int64(cursor.Size); start < 0 {
start = 0
}
stop = rank - 1
} else if cursor.MoveDownward() {
start = rank + 1
stop = rank + int64(cursor.Size)
}
if vs, err = redis.Values(conn.Do("ZREVRANGE", key, start, stop, "WITHSCORES")); err != nil {
err = errors.Wrapf(err, "conn.Do(ZREVRANGE,%s,%d,%d)", key, start, stop)
return
}
if len(vs) == 0 {
return
}
items = make([]*space.Item, 0, len(vs))
for len(vs) > 0 {
var (
member int64
score int64
)
if vs, err = redis.Scan(vs, &member, &score); err != nil {
log.Error("redis.Scan(%v) error(%v)", vs, err)
err = nil
continue
}
if member != 0 && score != 0 {
item := &space.Item{Member: member, CTime: xtime.Time(score)}
item.ParseKey()
if item.Goto != "" {
items = append(items, item)
}
}
}
return
}
// AttrCache .
func (d *Dao) AttrCache(c context.Context, vmid int64) (attrs *space.Attrs, err error) {
var attr int64
conn := d.redis.Get(c)
key := keyContributeAttr(vmid)
if attr, err = redis.Int64(conn.Do("GET", key)); err != nil {
if err == redis.ErrNil {
err = nil
return
}
err = errors.Wrapf(err, "conn.Do(GET,%s)", key)
return
}
conn.Close()
attrs = &space.Attrs{}
if model.AttrVal(int32(attr), model.AttrBitArchive) == model.AttrYes {
attrs.Archive = true
}
if model.AttrVal(int32(attr), model.AttrBitArticle) == model.AttrYes {
attrs.Article = true
}
if model.AttrVal(int32(attr), model.AttrBitClip) == model.AttrYes {
attrs.Clip = true
}
if model.AttrVal(int32(attr), model.AttrBitAlbum) == model.AttrYes {
attrs.Album = true
}
if model.AttrVal(int32(attr), model.AttrBitAudio) == model.AttrYes {
attrs.Audio = true
}
return
}

View File

@@ -0,0 +1,51 @@
package bplus
import (
"context"
"testing"
"go-common/app/interface/main/app-interface/model"
. "github.com/smartystreets/goconvey/convey"
)
// TestKeyContributeAttr dao ut.
func TestKeyContributeAttr(t *testing.T) {
Convey("keyContributeAttr", t, func(ctx C) {
key := keyContributeAttr(int64(123456))
ctx.Convey("key should not be equal to 123456", func(ctx C) {
ctx.So(key, ShouldEqual, "cba_123456")
})
})
}
// TestKeyContribute dao ut.
func TestKeyContribute(t *testing.T) {
Convey("keyContribute", t, func(ctx C) {
key := keyContribute(int64(123456))
ctx.Convey("key should not be equal to 123456", func(ctx C) {
ctx.So(key, ShouldEqual, "cb_123456")
})
})
}
// TestRangeContributeCache dao ut.
func TestRangeContributeCache(t *testing.T) {
Convey("RangeContributeCache", t, func(ctx C) {
_, err := dao.RangeContributeCache(context.Background(), 123456, 1, 20)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
}
// TestRangeContributionCache dao ut.
func TestRangeContributionCache(t *testing.T) {
Convey("RangeContributionCache", t, func(ctx C) {
var cursor = &model.Cursor{}
_, err := dao.RangeContributionCache(context.Background(), 123456, cursor)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
}

View File

@@ -0,0 +1,50 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/coin",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//app/service/main/archive/api/gorpc:go_default_library",
"//app/service/main/archive/model/archive:go_default_library",
"//app/service/main/coin/api:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,84 @@
package coin
import (
"context"
"time"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/service/main/archive/api"
arcrpc "go-common/app/service/main/archive/api/gorpc"
"go-common/app/service/main/archive/model/archive"
coinclient "go-common/app/service/main/coin/api"
"go-common/library/log"
"go-common/library/net/metadata"
)
// Dao is coin dao
type Dao struct {
coinClient coinclient.CoinClient
arcRPC *arcrpc.Service2
}
// New initial coin dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
arcRPC: arcrpc.New2(c.ArchiveRPC),
}
var err error
if d.coinClient, err = coinclient.NewClient(c.CoinClient); err != nil {
panic(err)
}
return
}
//CoinList coin archive list
func (d *Dao) CoinList(c context.Context, mid int64, pn, ps int) (coinArc []*api.Arc, count int, err error) {
var (
coinReply *coinclient.ListReply
aids []int64
arcs map[int64]*api.Arc
ip = metadata.String(c, metadata.RemoteIP)
)
coinArc = make([]*api.Arc, 0)
if coinReply, err = d.coinClient.List(c, &coinclient.ListReq{Mid: mid, Business: "archive", Ts: time.Now().Unix()}); err != nil {
log.Error("CoinList s.coinClient.List(%d) error(%v)", mid, err)
err = nil
return
}
existAids := make(map[int64]int64, len(coinReply.List))
for _, v := range coinReply.List {
if _, ok := existAids[v.Aid]; ok {
continue
}
aids = append(aids, v.Aid)
existAids[v.Aid] = v.Aid
}
count = len(aids)
start := (pn - 1) * ps
end := pn * ps
switch {
case start > count:
aids = aids[:0]
case end >= count:
aids = aids[start:]
default:
aids = aids[start:end]
}
if len(aids) == 0 {
return
}
if arcs, err = d.arcRPC.Archives3(c, &archive.ArgAids2{Aids: aids, RealIP: ip}); err != nil {
log.Error("CoinList s.arc.Archives3(%v) error(%v)", aids, err)
err = nil
return
}
for _, aid := range aids {
if arc, ok := arcs[aid]; ok && arc.IsNormal() {
if arc.Access >= 10000 {
arc.Stat.View = 0
}
coinArc = append(coinArc, arc)
}
}
return
}

View File

@@ -0,0 +1,30 @@
package coin
import (
"context"
"flag"
"path/filepath"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func Test_CoinList(t *testing.T) {
Convey("should get Archives", t, func() {
_, _, err := d.CoinList(context.Background(), 1, 3, 4)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,49 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["community_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/community",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/community:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,35 @@
package community
import (
"context"
"encoding/json"
"fmt"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
// go test -conf="../../app-interface-example.toml" -v -test.run TestCommunity
func TestCommunity(t *testing.T) {
Convey("TestCommuity", t, func() {
})
err := conf.Init()
if err != nil {
return
}
dao := New(conf.Conf)
community, _, err := dao.Community(context.TODO(), 28009145, "2e3950631afd879592de5e2ee34c7293", "android", 1, 20)
if err != nil {
t.Errorf("dao.Community error(%v)", err)
return
}
result, err := json.Marshal(community)
if err != nil {
t.Errorf("json.Marshal error(%v)", err)
return
}
fmt.Printf("test community (%v) \n", string(result))
}

View File

@@ -0,0 +1,66 @@
package community
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/community"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const (
_comm = "/api/query.my.community.list.do"
)
// Dao is community dao
type Dao struct {
client *httpx.Client
community string
}
// New initial community dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPIm9),
community: c.Host.Im9 + _comm,
}
return
}
// Community get community data from api.
func (d *Dao) Community(c context.Context, mid int64, ak, platform string, pn, ps int) (co []*community.Community, count int, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("actionKey", "appkey")
params.Set("data_type", "2")
params.Set("access_key", ak)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("page_no", strconv.Itoa(pn))
params.Set("page_size", strconv.Itoa(ps))
params.Set("platform", platform)
var res struct {
Code int `json:"code"`
Data *struct {
Count int `json:"total_count"`
Result []*community.Community `json:"result"`
} `json:"data"`
}
if err = d.client.Get(c, d.community, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.community+"?"+params.Encode())
return
}
if res.Data != nil {
co = res.Data.Result
count = res.Data.Count
}
return
}

View File

@@ -0,0 +1,49 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["elec_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/elec",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/elec:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,59 @@
package elec
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/elec"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const (
_elec = "/api/elec/info/query"
_elecMonthRank = "1"
)
// Dao is elec dao.
type Dao struct {
client *httpx.Client
elec string
}
// New elec dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
elec: c.Host.Elec + _elec,
}
return
}
func (d *Dao) Info(c context.Context, mid, paymid int64) (data *elec.Info, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("pay_mid", strconv.FormatInt(paymid, 10))
params.Set("type", _elecMonthRank)
var res struct {
Code int `json:"code"`
Data *elec.Info `json:"data"`
}
if err = d.client.Get(c, d.elec, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
if res.Code == 500011 {
return
}
err = errors.Wrap(ecode.Int(res.Code), d.elec+"?"+params.Encode())
return
}
data = res.Data
return
}

View File

@@ -0,0 +1,35 @@
package elec
import (
"context"
"encoding/json"
"fmt"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
// go test -conf="../../app-interface-example.toml" -v -test.run TestElec
func TestElec(t *testing.T) {
Convey("TestElec", t, func() {
})
err := conf.Init()
if err != nil {
return
}
dao := New(conf.Conf)
elec, err := dao.Info(context.TODO(), 5461533, 15555180)
if err != nil {
t.Errorf("dao.Elec error(%v)", err)
return
}
result, err := json.Marshal(elec)
if err != nil {
t.Errorf("json.Marshal error(%v)", elec)
return
}
fmt.Printf("test elec (%v) \n", string(result))
}

View File

@@ -0,0 +1,50 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/favorite",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/favorite: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",
"//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,100 @@
package favorite
import (
"context"
"encoding/json"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/favorite"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const (
_folder = "/x/internal/v2/fav/folder"
_folderVideo = "/x/internal/v2/fav/video"
)
// Dao is favorite dao
type Dao struct {
client *httpx.Client
favor string
favorVideo string
}
// New initial favorite dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
favor: c.Host.APICo + _folder,
favorVideo: c.Host.APICo + _folderVideo,
}
return
}
// Folders get favorite floders from api.
func (d *Dao) Folders(c context.Context, mid, vmid int64, mobiApp string, build int, mediaList bool) (fs []*favorite.Folder, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("vmid", strconv.FormatInt(vmid, 10))
params.Set("mobi_app", mobiApp)
// params.Set("build", strconv.Itoa(build))
if mediaList {
params.Set("medialist", "1")
}
var res struct {
Code int `json:"code"`
Data []*favorite.Folder `json:"data"`
}
if err = d.client.Get(c, d.favor, ip, params, &res); err != nil {
return
}
b, _ := json.Marshal(&res)
log.Info("Folders url(%s) response(%s)", d.favor+"?"+params.Encode(), b)
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favor+"?"+params.Encode())
return
}
fs = res.Data
return
}
// FolderVideo get favorite floders from UGC api.
func (d *Dao) FolderVideo(c context.Context, accessKey, actionKey, device, mobiApp, platform, keyword, order string, build, tid, pn, ps int, mid, fid, vmid int64) (fav *favorite.Video, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("access_key", accessKey)
params.Set("actionKey", actionKey)
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("fid", strconv.FormatInt(fid, 10))
params.Set("tid", strconv.Itoa(tid))
params.Set("keyword", keyword)
params.Set("order", order)
params.Set("pn", strconv.Itoa(pn))
params.Set("ps", strconv.Itoa(ps))
params.Set("mobi_app", mobiApp)
params.Set("platform", platform)
params.Set("vmid", strconv.FormatInt(vmid, 10))
var res struct {
Code int `json:"code"`
Data *favorite.Video `json:"data"`
}
if err = d.client.Get(c, d.favorVideo, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favorVideo+"?"+params.Encode())
return
}
fav = res.Data
return
}

View File

@@ -0,0 +1,55 @@
package favorite
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
dao *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
dao = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func TestDao_Folders(t *testing.T) {
Convey("folder", t, func() {
gotFs, err := dao.Folders(context.Background(), 1, 1, "android", 0, true)
So(gotFs, ShouldNotBeEmpty)
So(err, ShouldBeNil)
})
}
func TestDao_FolderVideo(t *testing.T) {
Convey("folder video", t, func() {
gotFav, err := dao.FolderVideo(context.Background(), "", "", "", "", "", "", "", 0, 0, 1, 20, 1, 0, 1)
So(gotFav, ShouldNotBeEmpty)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,55 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/history",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/history:go_default_library",
"//app/interface/main/history/model:go_default_library",
"//app/interface/main/history/rpc/client:go_default_library",
"//app/interface/openplatform/article/model:go_default_library",
"//app/interface/openplatform/article/rpc/client:go_default_library",
"//app/service/main/archive/api/gorpc:go_default_library",
"//app/service/main/archive/model/archive:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,142 @@
package history
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
model "go-common/app/interface/main/app-interface/model/history"
hismodle "go-common/app/interface/main/history/model"
hisrpc "go-common/app/interface/main/history/rpc/client"
artmodle "go-common/app/interface/openplatform/article/model"
artrpc "go-common/app/interface/openplatform/article/rpc/client"
arcrpc "go-common/app/service/main/archive/api/gorpc"
arcmodle "go-common/app/service/main/archive/model/archive"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const (
_apiPGC = "/internal_api/get_eps_v2"
)
// Dao is history dao
type Dao struct {
client *bm.Client
historyRPC *hisrpc.Service
arcRPC *arcrpc.Service2
artRPC *artrpc.Service
pgcAPI string
}
// New initial history dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: bm.NewClient(c.HTTPClient),
historyRPC: hisrpc.New(c.HistoryRPC),
arcRPC: arcrpc.New2(c.ArchiveRPC),
artRPC: artrpc.New(c.ArticleRPC),
pgcAPI: c.Host.Bangumi + _apiPGC,
}
return
}
// History get history
func (d *Dao) History(c context.Context, mid int64, pn, ps int) (res []*hismodle.Resource, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &hismodle.ArgHistories{Mid: mid, Pn: pn, Ps: ps, RealIP: ip}
if res, err = d.historyRPC.History(c, arg); err != nil {
err = errors.Wrapf(err, "d.historyRPC.History(%+v)", arg)
}
return
}
// Archive get archive info
func (d *Dao) Archive(c context.Context, aids []int64) (info map[int64]*arcmodle.View3, err error) {
arg := &arcmodle.ArgAids2{Aids: aids}
if info, err = d.arcRPC.Views3(c, arg); err != nil {
err = errors.Wrapf(err, "d.arcRPC.Views3(%+v)", arg)
}
return
}
// PGC get PGC info
func (d *Dao) PGC(c context.Context, epid, platform string, build, mid int64) (info map[int64]*model.PGCRes, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("ep_ids", epid)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("build", strconv.FormatInt(build, 10))
params.Set("platform", platform)
var res struct {
Code int `json:"code"`
Data []*model.PGCRes `json:"result"`
}
if err = d.client.Get(c, d.pgcAPI, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.pgcAPI+"?"+params.Encode())
return
}
info = make(map[int64]*model.PGCRes, len(res.Data))
for _, v := range res.Data {
v.Title = v.Season.Title
info[v.EpID] = v
}
return
}
// Article get articl info
func (d *Dao) Article(c context.Context, articleIDs []int64) (info map[int64]*artmodle.Meta, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &artmodle.ArgAids{Aids: articleIDs, RealIP: ip}
if info, err = d.artRPC.ArticleMetas(c, arg); err != nil {
err = errors.Wrapf(err, "d.artRPC.ArticleMetas(%+v)", arg)
}
return
}
// HistoryByTP histroy by tp
func (d *Dao) HistoryByTP(c context.Context, mid int64, pn, ps int, tp int8) (res []*hismodle.Resource, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &hismodle.ArgHistories{Mid: mid, Pn: pn, Ps: ps, RealIP: ip, TP: tp}
if res, err = d.historyRPC.History(c, arg); err != nil {
err = errors.Wrapf(err, "d.historyRPC.History(%+v)", arg)
}
return
}
// Cursor 5.28游标由MaxOid+MaxTP唯一确定 改为 由ViewAt唯一确定防止客户端改动对客户端仍用max字段
func (d *Dao) Cursor(c context.Context, mid, max int64, ps int, tp int8, businesses []string) (res []*hismodle.Resource, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &hismodle.ArgCursor{Mid: mid, Max: max, Ps: ps, RealIP: ip, TP: tp, ViewAt: max, Businesses: businesses}
if res, err = d.historyRPC.HistoryCursor(c, arg); err != nil {
err = errors.Wrapf(err, "d.historyRPC.HistoryCursor(%+v)", arg)
}
return
}
// Del for history
func (d *Dao) Del(c context.Context, mid int64, hisRes []*hismodle.Resource) (err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &hismodle.ArgDelete{Mid: mid, RealIP: ip, Resources: hisRes}
if err = d.historyRPC.Delete(c, arg); err != nil {
err = errors.Wrapf(err, "d.historyRPC.Delete(%+v)", arg)
}
return
}
// Clear for history
func (d *Dao) Clear(c context.Context, mid int64, businesses []string) (err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &hismodle.ArgClear{Mid: mid, RealIP: ip, Businesses: businesses}
if err = d.historyRPC.Clear(c, arg); err != nil {
err = errors.Wrapf(err, "d.historyRPC.Clear(%+v)", arg)
}
return
}

View File

@@ -0,0 +1,56 @@
package history
import (
"context"
"go-common/app/interface/main/app-interface/conf"
"testing"
"flag"
"path/filepath"
. "github.com/smartystreets/goconvey/convey"
)
var d *Dao
func init() {
dir, _ := filepath.Abs("../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func WithDao(f func(d *Dao)) func() {
return func() {
Reset(func() {})
f(d)
}
}
func TestDao_ArchiveInfo(t *testing.T) {
Convey("ArchiveInfo", t, WithDao(func(d *Dao) {
_, err := d.Archive(context.TODO(), []int64{1, 2})
So(err, ShouldBeNil)
}))
}
func TestDao_ArticleInfo(t *testing.T) {
Convey("ArticleInfo", t, WithDao(func(d *Dao) {
_, err := d.Article(context.TODO(), []int64{1, 2})
So(err, ShouldBeNil)
}))
}
func TestDao_PGCInfo(t *testing.T) {
Convey("PGCInfo", t, WithDao(func(d *Dao) {
_, err := d.PGC(context.TODO(), "1", "1", 111, 27515256)
So(err, ShouldBeNil)
}))
}
func TestDao_GetList(t *testing.T) {
Convey("GetList", t, WithDao(func(d *Dao) {
_, err := d.History(context.TODO(), 27515256, 1, 20)
So(err, ShouldBeNil)
}))
}

View File

@@ -0,0 +1,50 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/live",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/live:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
"//library/xstr: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,228 @@
package live
import (
"context"
"encoding/json"
"net/http"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/live"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_live = "/AppRoom/getRoomInfo"
_medalStatus = "/fans_medal/v1/medal/get_medal_opened"
_appMRoom = "/room/v1/Room/rooms_for_app_index"
_statusInfo = "/room/v1/Room/get_status_info_by_uids"
_visibleInfo = "/rc/v1/Glory/get_visible"
_usersInfo = "/user/v3/User/getMultiple"
_LiveByRID = "/room/v2/Room/get_by_ids"
)
// Dao is space dao
type Dao struct {
client *httpx.Client
live string
medalStatus string
appMRoom string
statusInfo string
visibleInfo string
userInfo string
liveByRID string
}
// New initial space dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPLive),
live: c.Host.APILiveCo + _live,
medalStatus: c.Host.APILiveCo + _medalStatus,
appMRoom: c.Host.APILiveCo + _appMRoom,
statusInfo: c.Host.APILiveCo + _statusInfo,
visibleInfo: c.Host.APILiveCo + _visibleInfo,
userInfo: c.Host.APILiveCo + _usersInfo,
liveByRID: c.Host.APILiveCo + _LiveByRID,
}
return
}
// Live is space live data.
func (d *Dao) Live(c context.Context, mid int64, platform string) (live json.RawMessage, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("platform", platform)
var res struct {
Code int `json:"code"`
Data json.RawMessage `json:"data"`
}
if err = d.client.Get(c, d.live, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.live+"?"+params.Encode())
return
}
live = res.Data
return
}
// MedalStatus for live
func (d *Dao) MedalStatus(c context.Context, mid int64) (status int, err error) {
var (
req *http.Request
res struct {
Code int `json:"code"`
Data *struct {
MasterStatus int `json:"master_status"`
} `json:"data"`
}
ip = metadata.String(c, metadata.RemoteIP)
)
if req, err = d.client.NewRequest("GET", d.medalStatus, ip, nil); err != nil {
return
}
req.Header.Set("X-BILILIVE-UID", strconv.FormatInt(mid, 10))
if err = d.client.Do(c, req, &res); err != nil {
err = errors.Wrapf(err, "url(%s) header(X-BiliLive-UID:%s)", req.URL.String(), req.Header.Get("X-BiliLive-UID"))
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrapf(ecode.Int(res.Code), "url(%s) header(X-BiliLive-UID:%s)", req.URL.String(), req.Header.Get("X-BiliLive-UID"))
return
}
if res.Data != nil {
status = res.Data.MasterStatus
}
return
}
// AppMRoom for live
func (d *Dao) AppMRoom(c context.Context, roomids []int64) (rs map[int64]*live.Room, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("room_ids", xstr.JoinInts(roomids))
var res struct {
Code int `json:"code"`
Data []*live.Room `json:"data"`
}
if err = d.client.Get(c, d.appMRoom, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(err, d.appMRoom+"?"+params.Encode())
return
}
rs = make(map[int64]*live.Room, len(res.Data))
for _, r := range res.Data {
rs[r.RoomID] = r
}
return
}
// StatusInfo for live
func (d *Dao) StatusInfo(c context.Context, mids []int64) (status map[int64]*live.Status, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
for _, mid := range mids {
params.Add("uids[]", strconv.FormatInt(mid, 10))
}
params.Set("filter_offline", "1")
var res struct {
Code int `json:"code"`
Data map[int64]*live.Status `json:"data"`
}
if err = d.client.Get(c, d.statusInfo, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(err, d.statusInfo+"?"+params.Encode())
return
}
status = res.Data
return
}
// Glory for live search
func (d *Dao) Glory(c context.Context, uid int64) (glory []*live.Glory, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("uid", strconv.FormatInt(uid, 10))
var res struct {
Code int `json:"code"`
Data []*live.Glory `json:"data"`
}
if err = d.client.Get(c, d.visibleInfo, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(err, d.visibleInfo+"?"+params.Encode())
return
}
glory = res.Data
return
}
// UserInfo for live search
func (d *Dao) UserInfo(c context.Context, uids []int64) (userInfo map[int64]map[string]*live.Exp, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
for _, uid := range uids {
params.Set("uids[]", strconv.FormatInt(uid, 10))
}
params.Set("attributes[]", "exp")
var res struct {
Code int `json:"code"`
Data map[int64]map[string]*live.Exp `json:"data"`
}
if err = d.client.Get(c, d.userInfo, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(err, d.userInfo+"?"+params.Encode())
return
}
userInfo = res.Data
return
}
// LiveByRIDs get live info by room_ids.
func (d *Dao) LiveByRIDs(c context.Context, roomIDs []int64) (info map[int64]*live.RoomInfo, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
for _, id := range roomIDs {
params.Add("ids[]", strconv.FormatInt(id, 10))
}
params.Add("fields[]", "roomid")
params.Add("fields[]", "title")
params.Add("fields[]", "cover")
params.Add("fields[]", "user_cover")
params.Add("fields[]", "uid")
params.Add("fields[]", "uname")
params.Add("fields[]", "area_v2_name")
params.Add("fields[]", "live_status")
params.Add("fields[]", "broadcast_type")
params.Add("fields[]", "short_id")
params.Add("need_broadcast_type", "1")
var res struct {
Code int `json:"code"`
Data map[int64]*live.RoomInfo `json:"data"`
}
if err = d.client.Get(c, d.liveByRID, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.liveByRID+"?"+params.Encode())
return
}
info = res.Data
return
}

View File

@@ -0,0 +1,44 @@
package live
import (
"context"
"flag"
"path/filepath"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func Test_Live(t *testing.T) {
Convey("should get live", t, func() {
_, err := d.Live(context.Background(), 1, "")
So(err, ShouldBeNil)
})
}
func Test_MedalStatus(t *testing.T) {
Convey("should get MedalStatus", t, func() {
_, err := d.MedalStatus(context.Background(), 1)
So(err, ShouldBeNil)
})
}
func Test_AppMRoom(t *testing.T) {
Convey("should get AppMRoom", t, func() {
_, err := d.AppMRoom(context.Background(), []int64{1, 2})
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,46 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/location",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/location/model:go_default_library",
"//app/service/main/location/rpc/client:go_default_library",
"//library/log: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,32 @@
package location
import (
"context"
"go-common/app/interface/main/app-interface/conf"
locmdl "go-common/app/service/main/location/model"
locrpc "go-common/app/service/main/location/rpc/client"
"go-common/library/log"
)
// Dao is location dao.
type Dao struct {
// rpc
locRPC *locrpc.Service
}
// New new a location dao.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
// rpc
locRPC: locrpc.New(c.LocationRPC),
}
return
}
func (d *Dao) Info(c context.Context, ipaddr string) (info *locmdl.Info, err error) {
if info, err = d.locRPC.Info(c, &locmdl.ArgIP{IP: ipaddr}); err != nil {
log.Error("%v", err)
}
return
}

View File

@@ -0,0 +1,37 @@
package location
import (
"context"
"flag"
"path/filepath"
"testing"
"time"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func ctx() context.Context {
return context.Background()
}
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
time.Sleep(time.Second)
}
func TestInfo(t *testing.T) {
Convey("get Info", t, func() {
res, err := d.Info(ctx(), "127.0.0.1")
So(res, ShouldNotBeEmpty)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/mall",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,48 @@
package mall
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const _favCount = "/mall-ugc/ugc/vote/user/wishcount"
type Dao struct {
client *bm.Client
favCount string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: bm.NewClient(c.HTTPClient),
favCount: c.Host.Mall + _favCount,
}
return
}
func (d *Dao) FavCount(c context.Context, mid int64) (count int32, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data int32 `json:"data"`
}
if err = d.client.Get(c, d.favCount, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favCount+"?"+params.Encode())
return
}
count = res.Data
return
}

View File

@@ -0,0 +1,50 @@
package mall
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
m.Run()
os.Exit(0)
}
func TestFavCount(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
)
convey.Convey("Ping", t, func(ctx convey.C) {
_, err := d.FavCount(c, mid)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/member",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster: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,51 @@
package member
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
type Dao struct {
c *conf.Config
client *httpx.Client
member string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
client: httpx.NewClient(c.HTTPClient),
member: c.Host.APICo + "/x/internal/creative/app/pre",
}
return
}
// Creative get user bcoin doc:http://info.bilibili.co/display/coding/internal-creative#internal-creative-APP%E4%B8%AA%E4%BA%BA%E4%B8%AD%E5%BF%83
func (d *Dao) Creative(c context.Context, mid int64) (isUp, show int, err error) {
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
IsUp int `json:"is_up"`
Show int `json:"show"`
} `json:"data"`
}
if err = d.client.Get(c, d.member, "", params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.member+"?"+params.Encode())
return
}
isUp = res.Data.IsUp
show = res.Data.Show
return
}

View File

@@ -0,0 +1,33 @@
package member
import (
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
Convey("TestNew", t, func() {
})
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotD := New(tt.args.c); !reflect.DeepEqual(gotD, tt.wantD) {
t.Errorf("New() = %v, want %v", gotD, tt.wantD)
}
})
}
}

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/pay",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/pay:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster: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,96 @@
package pay
import (
"context"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"net/http"
"net/url"
"strconv"
"strings"
"time"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/pay"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
type Dao struct {
c *conf.Config
client *httpx.Client
wallet string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
client: httpx.NewClient(c.HTTPClient),
wallet: c.Host.Pay + "/wallet-int/wallet/getUserWalletInfo",
}
return
}
// UserWalletInfo get user bcoin doc:http://info.bilibili.co/pages/viewpage.action?pageId=7559096
func (d *Dao) UserWalletInfo(c context.Context, mid int64, platform string) (availableBp float64, err error) {
var plat int
if platform == "ios" {
plat = 1
} else if platform == "android" {
plat = 2
} else {
err = fmt.Errorf("platform(%s) error", platform)
return
}
params := url.Values{}
params.Set("customerId", "10006")
params.Set("platformType", strconv.Itoa(plat))
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("traceId", strconv.FormatInt(time.Now().Unix(), 10))
params.Set("timestamp", strconv.FormatInt(time.Now().UnixNano()/1000, 10))
params.Set("signType", "MD5")
params.Set("appkey", d.c.HTTPClient.Key)
type pJSON struct {
CustomerID string `json:"customerId"`
PlatformType int `json:"platformType"`
Mid int64 `json:"mid"`
TraceID string `json:"traceId"`
Timestamp string `json:"timestamp"`
SignType string `json:"signType"`
Appkey string `json:"appkey"`
Sign string `json:"sign"`
}
tmp := params.Encode() + d.c.HTTPClient.Secret
if strings.IndexByte(tmp, '+') > -1 {
tmp = strings.Replace(tmp, "+", "%20", -1)
}
mh := md5.Sum([]byte(tmp))
sign := hex.EncodeToString(mh[:])
p := &pJSON{
CustomerID: "10006",
PlatformType: plat,
Mid: mid,
TraceID: params.Get("traceId"),
Timestamp: params.Get("timestamp"),
SignType: params.Get("signType"),
Appkey: params.Get("appkey"),
Sign: sign,
}
bs, _ := json.Marshal(p)
req, _ := http.NewRequest("POST", d.wallet, strings.NewReader(string(bs)))
req.Header.Set("Content-Type", "application/json")
var wallet *pay.UserWallet
if err = d.client.Do(c, req, &wallet); err != nil {
return
}
if wallet.Code != 0 {
err = errors.Wrap(ecode.Int(wallet.Code), d.wallet+"?"+params.Encode())
return
}
availableBp = wallet.Data.AvailableBp
return
}

View File

@@ -0,0 +1,33 @@
package pay
import (
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
Convey("TestNew", t, func() {
})
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotD := New(tt.args.c); !reflect.DeepEqual(gotD, tt.wantD) {
t.Errorf("New() = %v, want %v", gotD, tt.wantD)
}
})
}
}

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/relation",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/relation/model:go_default_library",
"//app/service/main/relation/rpc/client:go_default_library",
"//library/net/metadata: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,77 @@
package relation
import (
"context"
"go-common/app/interface/main/app-interface/conf"
relation "go-common/app/service/main/relation/model"
relationrpc "go-common/app/service/main/relation/rpc/client"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
type Dao struct {
relationRPC *relationrpc.Service
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
relationRPC: relationrpc.New(c.RelationRPC),
}
return
}
// Stat get mid relation stat
func (d *Dao) Stat(c context.Context, mid int64) (stat *relation.Stat, err error) {
stat, err = d.relationRPC.Stat(c, &relation.ArgMid{Mid: mid})
if err != nil {
err = errors.Wrapf(err, "%v", mid)
}
return
}
func (d *Dao) FollowersUnread(c context.Context, vmid int64) (res bool, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &relation.ArgMid{Mid: vmid, RealIP: ip}
if res, err = d.relationRPC.FollowersUnread(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) Followings(c context.Context, vmid int64) (res []*relation.Following, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &relation.ArgMid{Mid: vmid, RealIP: ip}
if res, err = d.relationRPC.Followings(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) Relations(c context.Context, mid int64, fids []int64) (res map[int64]*relation.Following, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &relation.ArgRelations{Mid: mid, Fids: fids, RealIP: ip}
if res, err = d.relationRPC.Relations(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) Tag(c context.Context, mid, tid int64) (res []int64, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &relation.ArgTagId{Mid: mid, TagId: tid, RealIP: ip}
if res, err = d.relationRPC.Tag(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}
func (d *Dao) FollowersUnreadCount(c context.Context, mid int64) (res int64, err error) {
ip := metadata.String(c, metadata.RemoteIP)
arg := &relation.ArgMid{Mid: mid, RealIP: ip}
if res, err = d.relationRPC.FollowersUnreadCount(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
}
return
}

View File

@@ -0,0 +1,119 @@
package relation
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func TestStat(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
)
convey.Convey("Stat", t, func(ctx convey.C) {
_, err := d.Stat(c, mid)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestFollowersUnread(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
)
convey.Convey("FollowersUnread", t, func(ctx convey.C) {
_, err := d.FollowersUnread(c, mid)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestFollowings(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
)
convey.Convey("Followings", t, func(ctx convey.C) {
_, err := d.Followings(c, mid)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestRelations(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
fids = []int64{1}
)
convey.Convey("Relations", t, func(ctx convey.C) {
_, err := d.Relations(c, mid, fids)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestTag(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
tid = int64(1)
)
convey.Convey("Tag", t, func(ctx convey.C) {
_, err := d.Tag(c, mid, tid)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestFollowersUnreadCount(t *testing.T) {
var (
c = context.Background()
mid = int64(2)
)
convey.Convey("FollowersUnreadCount", t, func(ctx convey.C) {
_, err := d.FollowersUnreadCount(c, mid)
ctx.Convey("Then err should be nil", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/resource",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/resource/model:go_default_library",
"//app/service/main/resource/rpc/client:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,56 @@
package resource
import (
"context"
"go-common/app/interface/main/app-interface/conf"
resmdl "go-common/app/service/main/resource/model"
resrpc "go-common/app/service/main/resource/rpc/client"
"go-common/library/log"
"go-common/library/net/metadata"
)
type Dao struct {
c *conf.Config
// rpc
resRPC *resrpc.Service
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
// rpc
resRPC: resrpc.New(c.ResourceRPC),
}
return
}
// Banner get search banner
func (d *Dao) Banner(c context.Context, mobiApp, device, network, channel, buvid, adExtra, resIDStr string, build int, plat int8, mid int64) (res map[int][]*resmdl.Banner, err error) {
var (
bs *resmdl.Banners
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &resmdl.ArgBanner{
MobiApp: mobiApp,
Device: device,
Network: network,
Channel: channel,
IP: ip,
Buvid: buvid,
AdExtra: adExtra,
ResIDs: resIDStr,
Build: build,
Plat: plat,
MID: mid,
IsAd: true,
}
if bs, err = d.resRPC.Banners(c, arg); err != nil || bs == nil {
log.Error("d.resRPC.Banners(%v) error(%v) or bs is nil", arg, err)
return
}
if len(bs.Banner) > 0 {
res = bs.Banner
}
return
}

View File

@@ -0,0 +1,37 @@
package resource
import (
"context"
"flag"
"path/filepath"
"testing"
"time"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func ctx() context.Context {
return context.Background()
}
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
time.Sleep(time.Second)
}
func TestResBanner(t *testing.T) {
Convey("Banner", t, func() {
res, err := d.Banner(ctx(), "", "", "", "", "", "", "", 1, 1, 1)
So(res, ShouldNotBeEmpty)
So(err, ShouldBeNil)
})
}

View File

@@ -0,0 +1,62 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
"//vendor/gopkg.in/h2non/gock.v1:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/search",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/dao/archive:go_default_library",
"//app/interface/main/app-interface/dao/bangumi:go_default_library",
"//app/interface/main/app-interface/dao/live:go_default_library",
"//app/interface/main/app-interface/model:go_default_library",
"//app/interface/main/app-interface/model/bangumi:go_default_library",
"//app/interface/main/app-interface/model/live:go_default_library",
"//app/interface/main/app-interface/model/search:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//app/service/main/location/model:go_default_library",
"//app/service/main/location/rpc/client:go_default_library",
"//app/service/openplatform/pgc-season/api/grpc/season/v1: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/sync/errgroup: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"],
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,368 @@
package search
import (
"context"
"flag"
"os"
"strings"
"testing"
"time"
"go-common/app/interface/main/app-interface/conf"
// "go-common/app/interface/main/app-interface/model/search"
. "github.com/smartystreets/goconvey/convey"
"gopkg.in/h2non/gock.v1"
)
var (
dao *Dao
)
// TestMain dao ut.
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
dao = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func httpMock(method, url string) *gock.Request {
r := gock.New(url)
r.Method = strings.ToUpper(method)
return r
}
// TestDao_Search dao ut.
func TestDao_Search(t *testing.T) {
Convey("get Search", t, func() {
res, _, err := dao.Search(ctx(), 1, 2, "iphone", "phone", "1", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123",
"0", "1", "1", "1", "1", "1", int8(1), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 8160, 20, 1, false, time.Now(), false, false)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_Season dao ut.
func TestDao_Season(t *testing.T) {
Convey("get Season", t, func() {
res, err := dao.Season(ctx(), 1, 2, "123", "iphone", "phone", "1", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "1", int8(1), 8190, 1, 20, time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDaoUpper dao ut.
func TestDaoUpper(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
keyword = "iphone"
mobiApp = "iphone"
device = "1"
platform = "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc"
buvid = "123"
filtered = "0"
order = "1"
biliUserVL = int(1)
highlight = int(2)
build = int(3)
userType = int(4)
orderSort = int(5)
pn = int(1)
ps = int(20)
old = false
now = time.Now()
)
Convey("Upper", t, func(ctx C) {
dao.client.SetTransport(gock.DefaultTransport)
ctx.Convey("When everthing goes positive", func(ctx C) {
// httpMock("GET", dao.main).Reply(200).JSON(`{"code":0,"seid":"something","numPages":1,"result":[]}`)
httpMock("GET", dao.main).Reply(200).JSON(`{"code":0,"seid":"something","numPages":1,"result":[{"mid":1,"uanme":"something","name":"something","official_verify":{"type":1,"desc":"something"},"usign":"something","fans":1,"videos":1,"level":1,"upic":"something","numPages":20,"res":[{"play":null,"dm":1,"pubdate":45321,"title":"something","aid":1,"pic":"something","arcurl":"something","duration":"something","is_pay":1}],"is_live":1,"room_id":1,"is_upuser":1}]}`)
res, err := dao.Upper(c, mid, keyword, mobiApp, device, platform, buvid, filtered, order, biliUserVL, highlight, build, userType, orderSort, pn, ps, old, now)
ctx.Convey("Then err should be nil.res should not be nil.", func(ctx C) {
ctx.So(err, ShouldBeNil)
ctx.So(res, ShouldNotBeEmpty)
})
})
ctx.Convey("When filtered is \"1\"", func(ctx C) {
filtered = "1"
httpMock("GET", dao.main).Reply(200).JSON(`{"code":0,"seid":"something","numPages":1,"result":[]}`)
res, err := dao.Upper(c, mid, keyword, mobiApp, device, platform, buvid, filtered, order, biliUserVL, highlight, build, userType, orderSort, pn, ps, old, now)
ctx.Convey("Then err should be nil.res should not be nil.", func(ctx C) {
ctx.So(err, ShouldBeNil)
ctx.So(res, ShouldNotBeEmpty)
})
})
ctx.Convey("When res.Code != ecode.OK.Code()", func(ctx C) {
httpMock("GET", dao.main).Reply(200).JSON(`{"code":-1,"seid":"something","numPages":1,"result":[]}`)
_, err := dao.Upper(c, mid, keyword, mobiApp, device, platform, buvid, filtered, order, biliUserVL, highlight, build, userType, orderSort, pn, ps, old, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
ctx.Convey("When http request failed", func(ctx C) {
httpMock("GET", dao.main).Reply(500)
_, err := dao.Upper(c, mid, keyword, mobiApp, device, platform, buvid, filtered, order, biliUserVL, highlight, build, userType, orderSort, pn, ps, old, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
})
}
// TestDaoMovieByType dao ut.
func TestDaoMovieByType(t *testing.T) {
var (
c = context.Background()
mid = int64(0)
zoneid = int64(0)
keyword = "iphone"
mobiApp = "phone"
device = "1"
platform = "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc"
buvid = "123"
filtered = "0"
plat = int8(1)
build = 1
pn = 1
ps = 1
now = time.Now()
)
Convey("MovieByType", t, func(ctx C) {
dao.client.SetTransport(gock.DefaultTransport)
ctx.Convey("When everything goes positive", func(ctx C) {
httpMock("GET", dao.main).Reply(200).JSON(`{"code":0,"seid":"something","numPages":1,"result":[]}`)
res, err := dao.MovieByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, plat, build, pn, ps, now)
ctx.Convey("Then err should be nil. res should not be nil.", func(ctx C) {
ctx.So(err, ShouldBeNil)
ctx.So(res, ShouldNotBeEmpty)
})
})
ctx.Convey("When res.Code != ecode.OK.Code()", func(ctx C) {
httpMock("GET", dao.main).Reply(200).JSON(`{"code":-1,"seid":"something","numPages":1,"result":[]}`)
_, err := dao.MovieByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, plat, build, pn, ps, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
ctx.Convey("When http request failed", func(ctx C) {
httpMock("GET", dao.main).Reply(500)
_, err := dao.MovieByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, plat, build, pn, ps, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
})
}
// TestDaoLiveByType dao ut.
func TestDaoLiveByType(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
zoneid = int64(1)
keyword = "iphone"
mobiApp = "phone"
device = "1"
platform = "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc"
buvid = "123"
filtered = "0"
order = "1"
sType = "1"
plat = int8(1)
build = 1
pn = 1
ps = 20
now = time.Now()
)
Convey("LiveByType", t, func(ctx C) {
dao.client.SetTransport(gock.DefaultTransport)
ctx.Convey("When everything goes positive", func(ctx C) {
httpMock("GET", dao.main).Reply(200).JSON(`{"code":0,"seid":"something","numPages":1,"result":[]}`)
res, err := dao.LiveByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, order, sType, plat, build, pn, ps, now)
ctx.Convey("Then err should be nil. res should not be nil.", func(ctx C) {
ctx.So(err, ShouldBeNil)
ctx.So(res, ShouldNotBeEmpty)
})
})
ctx.Convey("When res.Code != ecode.OK.Code()", func(ctx C) {
httpMock("GET", dao.main).Reply(200).JSON(`{"code":-1,"seid":"something","numPages":1,"result":[]}`)
_, err := dao.LiveByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, order, sType, plat, build, pn, ps, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
ctx.Convey("When http request failed", func(ctx C) {
httpMock("GET", dao.main).Reply(500)
_, err := dao.LiveByType(c, mid, zoneid, keyword, mobiApp, device, platform, buvid, filtered, order, sType, plat, build, pn, ps, now)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
})
}
// TestDao_Live dao ut.
func TestDao_Live(t *testing.T) {
Convey("get Live", t, func() {
res, err := dao.Live(ctx(), 1, "iphone", "phone", "1", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", "0", "1", 8190, 1, 20)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_LiveAll dao ut.
func TestDao_LiveAll(t *testing.T) {
Convey("get LiveAll", t, func() {
res, err := dao.LiveAll(ctx(), 1, "iphone", "phone", "1", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", "0", "1", 8190, 1, 20)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_ArticleByType dao ut.
func TestDao_ArticleByType(t *testing.T) {
Convey("get ArticleByType", t, func() {
res, err := dao.ArticleByType(ctx(), 1, 12313, "iphone", "phone", "1", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", "0", "1", "2", int8(1), 1, 8190, 1, 1, 20, time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_HotSearch dao ut.
func TestDao_HotSearch(t *testing.T) {
Convey("get HotSearch", t, func() {
res, err := dao.HotSearch(ctx(), "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", 123152242, 8190, 10, "iphone", "phone", "ios", time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_Suggest dao ut.
func TestDao_Suggest(t *testing.T) {
Convey("get Suggest", t, func() {
res, err := dao.Suggest(ctx(), 12313, "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", 8190, "iphone", "phone", time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_Suggest2 dao ut.
func TestDao_Suggest2(t *testing.T) {
Convey("get Suggest2", t, func() {
res, err := dao.Suggest2(ctx(), 12313, "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", 8190, "iphone", time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_Suggest3 dao ut.
func TestDao_Suggest3(t *testing.T) {
Convey("get Suggest3", t, func() {
res, err := dao.Suggest3(ctx(), 12313, "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "123", "phone", 8190, 1, "iphone", time.Now())
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_Season2 dao ut.
func TestDao_Season2(t *testing.T) {
Convey("get Season2", t, func() {
res, err := dao.Season2(ctx(), 12313, "test", "iphone", "phone", "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", 1, 8220, 1, 20)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDao_MovieByType2 dao ut.
func TestDao_MovieByType2(t *testing.T) {
Convey("get MovieByType2", t, func() {
res, err := dao.MovieByType2(ctx(), 12313, "test", "iphone", "phone", "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", 1, 8220, 1, 20)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
// TestDaoUser dao ut.
func TestDaoUser(t *testing.T) {
Convey("get User", t, func() {
_, err := dao.User(ctx(), 12313, "test", "iphone", "phone", "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", "1", "total", "search", 1, 8220, 1, 1, 1, 20, time.Now())
err = nil
So(err, ShouldBeNil)
})
}
// TestDao_Video dao ut.
func TestDao_Video(t *testing.T) {
Convey("get Video", t, func() {
res, err := dao.Video(ctx(), 12313, "test", "iphone", "phone", "ios", "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc", 1, 8220, 1, 20)
err = nil
So(err, ShouldBeNil)
So(res, ShouldNotBeEmpty)
})
}
func ctx() context.Context {
return context.Background()
}
// TestDaoRecommend dao ut.
func TestDaoRecommend(t *testing.T) {
var (
c = context.Background()
mid = int64(1)
build = 1
from = 0
show = 1
buvid = "123"
platform = "6E657F43-A770-4F7B-A6AE-FDFFCA8ED46216837infoc"
mobiApp = "phone"
device = "1"
)
Convey("Recommend", t, func(ctx C) {
dao.client.SetTransport(gock.DefaultTransport)
ctx.Convey("When res.Code != ecode.OK.Code()", func(ctx C) {
httpMock("GET", dao.rcmdNoResult).Reply(200).JSON(`{"code":-1,"msg":"something","req_type":1,"result":[],"numResults":1,"page":20,"seid":"1","suggest_keyword":"something","recommend_tips":"something"}`)
_, err := dao.Recommend(c, mid, build, from, show, buvid, platform, mobiApp, device)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
ctx.Convey("When http request failed", func(ctx C) {
httpMock("GET", dao.rcmdNoResult).Reply(500)
_, err := dao.Recommend(c, mid, build, from, show, buvid, platform, mobiApp, device)
ctx.Convey("Then err should not be nil.", func(ctx C) {
ctx.So(err, ShouldNotBeNil)
})
})
})
}

View File

@@ -0,0 +1,51 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/shop:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/shop",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/shop:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,55 @@
package shop
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/shop"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const _info = "/api/merchants/shop/info"
type Dao struct {
client *httpx.Client
info string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
info: c.Host.Show + _info,
}
return
}
func (d *Dao) Info(c context.Context, mid int64, mobiApp, device string, build int) (info *shop.Info, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("mobi_app", mobiApp)
params.Set("device", device)
params.Set("build", strconv.Itoa(build))
var res struct {
Code int `json:"errno"`
Data *shop.Info `json:"data"`
}
if err = d.client.Get(c, d.info, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
if res.Code == 130000 {
return
}
err = errors.Wrap(ecode.Int(res.Code), d.info+"?"+params.Encode())
return
}
info = res.Data
return
}

View File

@@ -0,0 +1,65 @@
package shop
import (
"context"
"testing"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/shop"
httpx "go-common/library/net/http/blademaster"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
Convey(tt.name, t, func() {
gotD := New(tt.args.c)
So(gotD, ShouldResemble, tt.wantD)
})
}
}
func TestDao_Info(t *testing.T) {
type fields struct {
client *httpx.Client
info string
}
type args struct {
c context.Context
mid int64
mobiApp string
device string
build int
}
tests := []struct {
name string
fields fields
args args
wantInfo *shop.Info
wantErr error
}{
// TODO: Add test cases.
}
for _, tt := range tests {
Convey(tt.name, t, func() {
d := &Dao{
client: tt.fields.client,
info: tt.fields.info,
}
gotInfo, err := d.Info(tt.args.c, tt.args.mid, tt.args.mobiApp, tt.args.device, tt.args.build)
So(gotInfo, ShouldResemble, tt.wantInfo)
So(err, ShouldEqual, tt.wantErr)
})
}
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/sidebar",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/resource/model:go_default_library",
"//app/service/main/resource/rpc/client: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,32 @@
package sidebar
import (
"context"
"go-common/app/interface/main/app-interface/conf"
resmodel "go-common/app/service/main/resource/model"
resrpc "go-common/app/service/main/resource/rpc/client"
"github.com/pkg/errors"
)
// Dao is sidebar dao
type Dao struct {
resRPC *resrpc.Service
}
// New initial sidebar dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
resRPC: resrpc.New(c.ResourceRPC),
}
return
}
// Sidebars from resource service
func (d *Dao) Sidebars(c context.Context) (res *resmodel.SideBars, err error) {
if res, err = d.resRPC.SideBars(c); err != nil {
err = errors.Wrapf(err, "d.resRPC.SideBars(%+v)")
}
return
}

View File

@@ -0,0 +1,35 @@
package sidebar
import (
"context"
"flag"
"path/filepath"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var d *Dao
func init() {
dir, _ := filepath.Abs("../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
d = New(conf.Conf)
}
func WithDao(f func(d *Dao)) func() {
return func() {
Reset(func() {})
f(d)
}
}
func TestDao_Sidebar(t *testing.T) {
Convey("ArchiveInfo", t, WithDao(func(d *Dao) {
_, err := d.Sidebars(context.TODO())
So(err, ShouldBeNil)
}))
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/sp",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/sp:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,47 @@
package sp
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/sp"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
const (
_specil = "/sp/list"
)
// Dao is favorite dao
type Dao struct {
client *httpx.Client
specil string
}
// New initial favorite dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
specil: c.Host.APICo + _specil,
}
return
}
// Specil get specil from old BiliWEB api.
func (d *Dao) Specil(c context.Context, accessKey, actionKey, device, mobiApp, platform string, build, pn, ps int) (res *sp.Specil, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("access_key", accessKey)
params.Set("actionKey", actionKey)
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mobi_app", mobiApp)
params.Set("page", strconv.Itoa(pn))
params.Set("pagesize", strconv.Itoa(ps))
params.Set("platform", platform)
err = d.client.Get(c, d.specil, ip, params, &res)
return
}

View File

@@ -0,0 +1,33 @@
package sp
import (
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
Convey("TestNew", t, func() {
})
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotD := New(tt.args.c); !reflect.DeepEqual(gotD, tt.wantD) {
t.Errorf("New() = %v, want %v", gotD, tt.wantD)
}
})
}
}

View File

@@ -0,0 +1,50 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/space",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/space: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",
"//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,130 @@
package space
import (
"context"
"encoding/json"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/space"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const (
_space = "/x/internal/space/setting"
_video = "/api/member/getVideo"
_uploadTopPhotoURL = "/api/member/getUploadTopPhoto"
_report = "/api/report/add"
_blacklist = "/x/internal/space/blacklist"
)
// Dao is space dao
type Dao struct {
client *httpx.Client
clientSync *httpx.Client
space string
video string
report string
// space api
uploadTop string
blacklist string
}
// New initial space dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
clientSync: httpx.NewClient(c.HTTPWrite),
space: c.Host.APICo + _space,
video: c.Host.Space + _video,
report: c.Host.Space + _report,
uploadTop: c.Host.Space + _uploadTopPhotoURL,
blacklist: c.Host.APICo + _blacklist,
}
return
}
// Setting get setting data from api.
func (d *Dao) Setting(c context.Context, mid int64) (setting *space.Setting, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data struct {
Privacy *space.Setting `json:"privacy"`
} `json:"data"`
}
if err = d.client.Get(c, d.space, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.space+"?"+params.Encode())
}
setting = res.Data.Privacy
return
}
// SpaceMob space mobile
func (d *Dao) SpaceMob(c context.Context, mid, vmid int64, platform, device string) (us *space.Mob, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("vmid", strconv.FormatInt(vmid, 10))
params.Set("platform", platform)
params.Set("device", device)
var res struct {
Code int `json:"code"`
Data *space.Mob `json:"data"`
}
if err = d.client.Get(c, d.uploadTop, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.uploadTop+"?"+params.Encode())
return
}
us = res.Data
return
}
// Report report
func (d *Dao) Report(c context.Context, mid int64, reason, ak string) (err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("access_key", ak)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("reason", reason)
var res struct {
Code int `json:"code"`
}
if err = d.client.Post(c, d.report, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.report+"?"+params.Encode())
}
return
}
// Blacklist is.
func (d *Dao) Blacklist(c context.Context) (list map[int64]struct{}, err error) {
var res struct {
Code int `json:"code"`
Data map[int64]struct{} `json:"data"`
}
if err = d.clientSync.Get(c, d.blacklist, "", nil, &res); err != nil {
err = errors.Wrap(ecode.Int(res.Code), d.blacklist)
return
}
b, _ := json.Marshal(res)
log.Error("Blacklist url(%s) response(%s)", d.blacklist, b)
list = res.Data
return
}

View File

@@ -0,0 +1,71 @@
package space
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
var (
dao *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
dao = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
// go test -conf="../../app-interface-test.toml" -v -test.run TestSetting
func TestDao_Setting(t *testing.T) {
Convey("TestSetting", t, func() {
setting, err := dao.Setting(context.Background(), 2)
So(setting, ShouldNotBeEmpty)
So(err, ShouldBeNil)
})
}
func TestDao_Blacklist(t *testing.T) {
Convey("Blacklist", t, func() {
gotFs, err := dao.Blacklist(context.Background())
So(gotFs, ShouldBeEmpty)
So(err, ShouldBeNil)
})
}
func TestDao_Report(t *testing.T) {
Convey("TestReport", t, func() {
err := dao.Report(context.Background(), 1, "12", "123")
So(err, ShouldNotBeNil)
})
}
func TestDao_SpaceMob(t *testing.T) {
Convey("SpaceMob", t, func() {
gotMob, err := dao.SpaceMob(context.Background(), 1, 2, "", "")
So(gotMob, ShouldBeNil)
So(err, ShouldNotBeNil)
})
}

View File

@@ -0,0 +1,54 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/tag:go_default_library",
"//app/interface/main/tag/rpc/client:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/tag",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/tag:go_default_library",
"//app/interface/main/tag/model:go_default_library",
"//app/interface/main/tag/rpc/client:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
"//library/xstr: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,88 @@
package tag
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
tagmdl "go-common/app/interface/main/app-interface/model/tag"
tag "go-common/app/interface/main/tag/model"
tagrpc "go-common/app/interface/main/tag/rpc/client"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"go-common/library/xstr"
"github.com/pkg/errors"
)
const (
_mInfo = "/x/internal/tag/minfo"
)
// Dao is tag dao
type Dao struct {
tagRPC *tagrpc.Service
client *httpx.Client
mInfo string
}
// New initial tag dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
tagRPC: tagrpc.New2(c.TagRPC),
client: httpx.NewClient(c.HTTPClient),
mInfo: c.Host.APICo + _mInfo,
}
return
}
// ArcTags get tags data from api.
func (d *Dao) ArcTags(c context.Context, aid, mid int64, ip string) (ts []*tagmdl.Tag, err error) {
arg := &tag.ArgAid{Aid: aid, Mid: mid, RealIP: ip}
tags, err := d.tagRPC.ArcTags(c, arg)
if err != nil {
err = errors.Wrapf(err, "%v", arg)
return
}
if len(tags) == 0 {
return
}
ts = make([]*tagmdl.Tag, 0, len(tags))
for _, t := range tags {
tag := &tagmdl.Tag{
TagID: t.ID,
Name: t.Name,
Cover: t.Cover,
Likes: t.Likes,
Hates: t.Hates,
Liked: t.Liked,
Hated: t.Hated,
Attribute: t.Attribute,
}
ts = append(ts, tag)
}
return
}
// TagInfos get tag infos by tagIds
func (d *Dao) TagInfos(c context.Context, tags []int64, mid int64) (tagMyInfo []*tagmdl.Tag, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("tag_id", xstr.JoinInts(tags))
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data []*tagmdl.Tag `json:"data"`
}
if err = d.client.Get(c, d.mInfo, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.mInfo+"?"+params.Encode())
return
}
tagMyInfo = res.Data
return
}

View File

@@ -0,0 +1,68 @@
package tag
import (
"context"
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
tagmdl "go-common/app/interface/main/app-interface/model/tag"
tagrpc "go-common/app/interface/main/tag/rpc/client"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
Convey(tt.name, t, func() {
gotD := New(tt.args.c)
So(gotD, ShouldEqual, tt.wantD)
})
}
}
func TestDao_ArcTags(t *testing.T) {
type fields struct {
tagRPC *tagrpc.Service
}
type args struct {
c context.Context
aid int64
mid int64
ip string
}
tests := []struct {
name string
fields fields
args args
wantTs []*tagmdl.Tag
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
d := &Dao{
tagRPC: tt.fields.tagRPC,
}
gotTs, err := d.ArcTags(tt.args.c, tt.args.aid, tt.args.mid, tt.args.ip)
if (err != nil) != tt.wantErr {
t.Errorf("Dao.ArcTags() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(gotTs, tt.wantTs) {
t.Errorf("Dao.ArcTags() = %v, want %v", gotTs, tt.wantTs)
}
})
}
}

View File

@@ -0,0 +1,48 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/thumbup",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/service/main/thumbup/model:go_default_library",
"//app/service/main/thumbup/rpc/client:go_default_library",
"//library/net/metadata: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,43 @@
package thumbup
import (
"context"
"go-common/app/interface/main/app-interface/conf"
thumbup "go-common/app/service/main/thumbup/model"
thumbuprpc "go-common/app/service/main/thumbup/rpc/client"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
// Dao is tag dao
type Dao struct {
thumbupRPC *thumbuprpc.Service
}
// New initial tag dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
thumbupRPC: thumbuprpc.New(c.ThumbupRPC),
}
return
}
// UserLikes user likes list
func (d *Dao) UserTotalLike(c context.Context, mid int64, business string, pn, ps int) (res []*thumbup.ItemLikeRecord, count int, err error) {
var (
likes *thumbup.UserTotalLike
ip = metadata.String(c, metadata.RemoteIP)
)
arg := &thumbup.ArgUserLikes{Mid: mid, Business: business, Pn: pn, Ps: ps, RealIP: ip}
if likes, err = d.thumbupRPC.UserTotalLike(c, arg); err != nil {
err = errors.Wrapf(err, "%v", arg)
return
}
if likes != nil {
res = likes.List
count = likes.Total
}
return
}

View File

@@ -0,0 +1,33 @@
package thumbup
import (
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
. "github.com/smartystreets/goconvey/convey"
)
func TestNew(t *testing.T) {
Convey("TestNew", t, func() {
})
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantD *Dao
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotD := New(tt.args.c); !reflect.DeepEqual(gotD, tt.wantD) {
t.Errorf("New() = %v, want %v", gotD, tt.wantD)
}
})
}
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/ticket",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//library/ecode:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata: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,48 @@
package ticket
import (
"context"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const _favCount = "/api/ticket/user/favcountinner"
type Dao struct {
client *bm.Client
favCount string
}
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: bm.NewClient(c.HTTPClient),
favCount: c.Host.Show + _favCount,
}
return
}
func (d *Dao) FavCount(c context.Context, mid int64) (count int32, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"errno"`
Data int32 `json:"data"`
}
if err = d.client.Get(c, d.favCount, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.favCount+"?"+params.Encode())
return
}
count = res.Data
return
}

View File

@@ -0,0 +1,52 @@
package ticket
import (
"context"
"flag"
"fmt"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
m.Run()
os.Exit(0)
}
func TestFavCount(t *testing.T) {
var (
c = context.TODO()
mid = int64(27515233)
)
convey.Convey("Ping", t, func(ctx convey.C) {
count, err := d.FavCount(c, mid)
fmt.Printf("%d", count)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,51 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = ["dao_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = ["dao.go"],
importpath = "go-common/app/interface/main/app-interface/dao/topic",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model/topic:go_default_library",
"//app/service/main/favorite/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",
"//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,79 @@
package topic
import (
"context"
"fmt"
"net/url"
"strconv"
"go-common/app/interface/main/app-interface/conf"
"go-common/app/interface/main/app-interface/model/topic"
fav "go-common/app/service/main/favorite/api"
"go-common/library/ecode"
"go-common/library/log"
httpx "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
"github.com/pkg/errors"
)
const _topic = "/x/internal/v2/fav/topic"
// Dao is topic dao
type Dao struct {
client *httpx.Client
topic string
favRPC fav.FavoriteClient
}
// New initial topic dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
topic: c.Host.APICo + _topic,
}
var err error
d.favRPC, err = fav.New(c.FavClient)
if err != nil {
panic(fmt.Sprintf("fav NewClient error(%v)", err))
}
return
}
// Topic get topic list from UGC api.
func (d *Dao) Topic(c context.Context, accessKey, actionKey, device, mobiApp, platform string, build, ps, pn int, mid int64) (t *topic.Topic, err error) {
ip := metadata.String(c, metadata.RemoteIP)
params := url.Values{}
params.Set("access_key", accessKey)
params.Set("mid", strconv.FormatInt(mid, 10))
params.Set("actionKey", actionKey)
params.Set("build", strconv.Itoa(build))
params.Set("device", device)
params.Set("mobi_app", mobiApp)
params.Set("platform", platform)
params.Set("ps", strconv.Itoa(ps))
params.Set("pn", strconv.Itoa(pn))
params.Set("mid", strconv.FormatInt(mid, 10))
var res struct {
Code int `json:"code"`
Data *topic.Topic `json:"data"`
}
if err = d.client.Get(c, d.topic, ip, params, &res); err != nil {
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrap(ecode.Int(res.Code), d.topic+"?"+params.Encode())
return
}
t = res.Data
return
}
// UserFolder is
func (d *Dao) UserFolder(c context.Context, mid int64, typ int32) (userFolder *fav.UserFolderReply, err error) {
if userFolder, err = d.favRPC.UserFolder(c, &fav.UserFolderReq{Typ: typ, Mid: mid}); err != nil {
log.Error("d.favRPC.UserFolder error(%+v)", err)
return
}
return
}

View File

@@ -0,0 +1,74 @@
package topic
import (
"context"
"flag"
"os"
"testing"
"go-common/app/interface/main/app-interface/conf"
"github.com/smartystreets/goconvey/convey"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.app-svr.app-interface")
flag.Set("conf_token", "1mWvdEwZHmCYGoXJCVIdszBOPVdtpXb3")
flag.Set("tree_id", "2688")
flag.Set("conf_version", "docker-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
} else {
flag.Set("conf", "../../cmd/app-interface-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
os.Exit(m.Run())
// time.Sleep(time.Second)
}
func TestTopic(t *testing.T) {
var (
c = context.TODO()
accessKey = ""
actionKey = ""
device = ""
mobiApp = ""
platform = ""
build = 111
ps = 5
pn = 1
mid = int64(1)
)
convey.Convey("Topic", t, func(ctx convey.C) {
_, err := d.Topic(c, accessKey, actionKey, device, mobiApp, platform, build, ps, pn, mid)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestUserFolder(t *testing.T) {
var (
c = context.TODO()
mid = int64(1)
typ = int32(4)
)
convey.Convey("UserFolder", t, func(ctx convey.C) {
_, err := d.UserFolder(c, mid, typ)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,64 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"dataflow.go",
"display.go",
"favorite.go",
"history.go",
"http.go",
"local.go",
"relation.go",
"search.go",
"space.go",
],
importpath = "go-common/app/interface/main/app-interface/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/model:go_default_library",
"//app/interface/main/app-interface/model/favorite:go_default_library",
"//app/interface/main/app-interface/model/history:go_default_library",
"//app/interface/main/app-interface/model/relation:go_default_library",
"//app/interface/main/app-interface/model/search:go_default_library",
"//app/interface/main/app-interface/model/space:go_default_library",
"//app/interface/main/app-interface/service/account:go_default_library",
"//app/interface/main/app-interface/service/dataflow:go_default_library",
"//app/interface/main/app-interface/service/display:go_default_library",
"//app/interface/main/app-interface/service/favorite:go_default_library",
"//app/interface/main/app-interface/service/history:go_default_library",
"//app/interface/main/app-interface/service/relation:go_default_library",
"//app/interface/main/app-interface/service/search:go_default_library",
"//app/interface/main/app-interface/service/space:go_default_library",
"//app/interface/main/history/model:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/auth:go_default_library",
"//library/net/http/blademaster/middleware/proxy:go_default_library",
"//library/net/http/blademaster/middleware/verify:go_default_library",
"//library/queue/databus:go_default_library",
"//library/xstr:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

Some files were not shown because too many files have changed in this diff Show More