Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"relation_test.go",
"service_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/relation:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"relation.go",
"service.go",
],
importpath = "go-common/app/interface/main/app-interface/service/relation",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/interface/main/app-interface/conf:go_default_library",
"//app/interface/main/app-interface/dao/account:go_default_library",
"//app/interface/main/app-interface/dao/live:go_default_library",
"//app/interface/main/app-interface/dao/relation:go_default_library",
"//app/interface/main/app-interface/model/live:go_default_library",
"//app/interface/main/app-interface/model/relation:go_default_library",
"//app/service/main/account/model:go_default_library",
"//app/service/main/relation/model:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/sync/errgroup:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@ -0,0 +1,166 @@
package relation
import (
"context"
"fmt"
"hash/crc32"
"sort"
"go-common/app/interface/main/app-interface/model/live"
model "go-common/app/interface/main/app-interface/model/relation"
account "go-common/app/service/main/account/model"
relation "go-common/app/service/main/relation/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/sync/errgroup"
)
var (
_emptyFollowings = []*model.Following{}
_emptyTagInfos = []*model.Tag{}
)
// Followings get user followings list.
func (s *Service) Followings(c context.Context, vmid, mid int64, pn, ps int, version uint64, order string) (f []*model.Following, crc32v uint32, total int, err error) {
res, err := s.relDao.Followings(c, vmid)
if err != nil {
return
}
total = len(res)
if order == "asc" {
sort.Sort(model.ByMTime(res))
}
start, end := (pn-1)*ps, pn*ps
switch {
case start >= len(res):
res = res[:0]
case end >= len(res):
res = res[start:]
default:
res = res[start:end]
}
if len(res) == 0 {
f = _emptyFollowings
return
}
data := []byte(fmt.Sprintf("%s", res))
crc32v = crc32.Checksum(data, crc32.IEEETable)
if uint64(crc32v) == version {
err = ecode.NotModified
return
}
var fids []int64
for _, r := range res {
fids = append(fids, r.Mid)
}
var (
flm map[int64]*relation.Following
cardm map[int64]*account.Card
sm map[int64]*live.Status
)
g, ctx := errgroup.WithContext(c)
g.Go(func() (err error) {
cardm, err = s.accDao.Cards3(ctx, fids)
return
})
// !self, compute !self user and up's followings' attr
if mid != vmid && mid != 0 {
g.Go(func() (err error) {
if flm, err = s.relDao.Relations(ctx, mid, fids); err != nil {
log.Error("%+v", err)
err = nil
}
return
})
}
g.Go(func() error {
sm, _ = s.liveDao.StatusInfo(ctx, fids)
return nil
})
if err = g.Wait(); err != nil {
log.Error("%+v", err)
return
}
f = make([]*model.Following, 0, len(res))
for _, r := range res {
fl := &model.Following{Following: r}
if _, ok := cardm[r.Mid]; ok {
fl.Face = cardm[r.Mid].Face
fl.Uname = cardm[r.Mid].Name
fl.Sign = cardm[r.Mid].Sign
if mid != vmid {
if f, ok := flm[r.Mid]; ok {
fl.Attribute = f.Attribute
} else {
fl.Attribute = relation.AttrNoRelation
}
}
fl.OfficialVerify = cardm[r.Mid].Official
fl.Vip.Type = int(cardm[r.Mid].Vip.Type)
fl.Vip.VipStatus = int(cardm[r.Mid].Vip.Status)
fl.Vip.DueDate = cardm[r.Mid].Vip.DueDate
if status, ok := sm[r.Mid]; ok {
fl.Live = status.LiveStatus
}
}
f = append(f, fl)
}
return
}
func (s *Service) Tag(c context.Context, mid, tid int64, pn, ps int) (t []*model.Tag, err error) {
mids, err := s.relDao.Tag(c, mid, tid)
if err != nil {
return
}
start, end := (pn-1)*ps, pn*ps
switch {
case start >= len(mids):
mids = mids[:0]
case end >= len(mids):
mids = mids[start:]
default:
mids = mids[start:end]
}
if len(mids) == 0 {
t = _emptyTagInfos
return
}
var (
cardm map[int64]*account.Card
sm map[int64]*live.Status
)
g, ctx := errgroup.WithContext(c)
g.Go(func() (err error) {
cardm, err = s.accDao.Cards3(ctx, mids)
return
})
g.Go(func() error {
sm, _ = s.liveDao.StatusInfo(ctx, mids)
return nil
})
if err = g.Wait(); err != nil {
log.Error("%+v", err)
return
}
t = make([]*model.Tag, 0, len(mids))
for _, mid = range mids {
tag := &model.Tag{Mid: mid}
if _, ok := cardm[mid]; ok {
tag.Mid = mid
tag.Face = cardm[mid].Face
tag.Uname = cardm[mid].Name
tag.Sign = cardm[mid].Sign
tag.OfficialVerify = cardm[mid].Official
tag.Vip.Type = int(cardm[mid].Vip.Type)
tag.Vip.VipStatus = int(cardm[mid].Vip.Status)
tag.Vip.DueDate = cardm[mid].Vip.DueDate
}
if status, ok := sm[mid]; ok {
tag.Live = status.LiveStatus
}
t = append(t, tag)
}
return
}

View File

@ -0,0 +1,83 @@
package relation
import (
"context"
"flag"
"path/filepath"
"testing"
"time"
. "github.com/smartystreets/goconvey/convey"
"go-common/app/interface/main/app-interface/conf"
model "go-common/app/interface/main/app-interface/model/relation"
)
var (
s *Service
)
func init() {
dir, _ := filepath.Abs("../../cmd/app-interface-test.toml")
flag.Set("conf", dir)
conf.Init()
s = New(conf.Conf)
time.Sleep(3 * time.Second)
}
func TestService_Followings(t *testing.T) {
type args struct {
c context.Context
vmid int64
mid int64
pn int
ps int
version uint64
order string
}
tests := []struct {
name string
args args
wantF []*model.Following
wantCrc32v uint32
wantTotal int
wantErr error
}{
// TODO: Add test cases.
}
for _, tt := range tests {
Convey(tt.name, t, func() {
gotF, gotCrc32v, gotTotal, err := s.Followings(tt.args.c, tt.args.vmid, tt.args.mid, tt.args.pn, tt.args.ps, tt.args.version, tt.args.order)
So(gotF, ShouldResemble, tt.wantF)
So(gotCrc32v, ShouldResemble, tt.wantCrc32v)
So(gotTotal, ShouldResemble, tt.wantTotal)
So(err, ShouldEqual, tt.wantErr)
})
}
}
func TestService_Tag(t *testing.T) {
type args struct {
c context.Context
mid int64
tid int64
pn int
ps int
}
tests := []struct {
name string
s *Service
args args
wantT []*model.Tag
wantErr error
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotT, err := tt.s.Tag(tt.args.c, tt.args.mid, tt.args.tid, tt.args.pn, tt.args.ps)
So(gotT, ShouldResemble, tt.wantT)
So(err, ShouldEqual, tt.wantErr)
})
}
}

View File

@ -0,0 +1,29 @@
package relation
import (
"go-common/app/interface/main/app-interface/conf"
accdao "go-common/app/interface/main/app-interface/dao/account"
livedao "go-common/app/interface/main/app-interface/dao/live"
reldao "go-common/app/interface/main/app-interface/dao/relation"
)
// Service is favorite.
type Service struct {
c *conf.Config
// dao
accDao *accdao.Dao
relDao *reldao.Dao
liveDao *livedao.Dao
}
// New new favorite。
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
// dao
accDao: accdao.New(c),
relDao: reldao.New(c),
liveDao: livedao.New(c),
}
return s
}

View File

@ -0,0 +1,28 @@
package relation
import (
"reflect"
"testing"
"go-common/app/interface/main/app-interface/conf"
)
func TestNew(t *testing.T) {
type args struct {
c *conf.Config
}
tests := []struct {
name string
args args
wantS *Service
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if gotS := New(tt.args.c); !reflect.DeepEqual(gotS, tt.wantS) {
t.Errorf("New() = %v, want %v", gotS, tt.wantS)
}
})
}
}