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,63 @@
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",
"likes_test.go",
"subject_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/model:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"likes.go",
"subject.go",
],
importpath = "go-common/app/admin/main/activity/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/model:go_default_library",
"//library/database/orm:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/jinzhu/gorm: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",
"//app/admin/main/activity/dao/kfc:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,63 @@
package dao
import (
"context"
"go-common/app/admin/main/activity/conf"
"go-common/library/database/orm"
xhttp "go-common/library/net/http/blademaster"
"github.com/jinzhu/gorm"
)
const (
_actURLAddTags = "/x/internal/tag/activity/add"
_songsURL = "/x/internal/v1/audio/songs/activity/filter/info"
)
// Dao struct user of Dao.
type Dao struct {
c *conf.Config
DB *gorm.DB
client *xhttp.Client
actURLAddTags string
songsURL string
}
// New create a instance of Dao and return.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
DB: orm.NewMySQL(c.ORM),
client: xhttp.NewClient(c.HTTPClient),
actURLAddTags: c.Host.API + _actURLAddTags,
songsURL: c.Host.API + _songsURL,
}
d.initORM()
return
}
func (d *Dao) initORM() {
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
if defaultTableName == "act_matchs" {
return defaultTableName
}
return defaultTableName
}
d.DB.LogMode(true)
}
// Ping check connection of db , mc.
func (d *Dao) Ping(c context.Context) (err error) {
if d.DB != nil {
err = d.DB.DB().PingContext(c)
}
return
}
// Close close connection of db , mc.
func (d *Dao) Close() {
if d.DB != nil {
d.DB.Close()
}
}

View File

@@ -0,0 +1,34 @@
package dao
import (
"flag"
"go-common/app/admin/main/activity/conf"
"os"
"testing"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.web-svr.activity-admin")
flag.Set("conf_token", "a0c33c892e0c08476ecbb5d28e5880cf")
flag.Set("tree_id", "34245")
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/activity-admin-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
os.Exit(m.Run())
}

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 = [
"dao_test.go",
"kfc_test.go",
],
embed = [":go_default_library"],
tags = ["automanaged"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"kfc.go",
],
importpath = "go-common/app/admin/main/activity/dao/kfc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/model/kfc:go_default_library",
"//library/database/orm:go_default_library",
"//vendor/github.com/jinzhu/gorm: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 kfc
import (
"context"
"go-common/app/admin/main/activity/conf"
"go-common/library/database/orm"
"github.com/jinzhu/gorm"
)
// Dao struct user of Dao.
type Dao struct {
c *conf.Config
DB *gorm.DB
}
// New create a instance of Dao and return.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
DB: orm.NewMySQL(c.ORM),
}
d.initORM()
return
}
func (d *Dao) initORM() {
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
if defaultTableName == "act_matchs" {
return defaultTableName
}
return defaultTableName
}
d.DB.LogMode(true)
}
// Ping check connection of db , mc.
func (d *Dao) Ping(c context.Context) (err error) {
if d.DB != nil {
err = d.DB.DB().PingContext(c)
}
return
}
// Close close connection of db , mc.
func (d *Dao) Close() {
if d.DB != nil {
d.DB.Close()
}
}

View File

@@ -0,0 +1,35 @@
package kfc
import (
"flag"
"os"
"testing"
"go-common/app/admin/main/activity/conf"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "" {
flag.Set("app_id", "main.web-svr.activity-admin")
flag.Set("conf_token", "a0c33c892e0c08476ecbb5d28e5880cf")
flag.Set("tree_id", "34245")
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/activity-admin-test.toml")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
os.Exit(m.Run())
}

View File

@@ -0,0 +1,26 @@
package kfc
import (
"context"
kfcmdl "go-common/app/admin/main/activity/model/kfc"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
)
// SearchList .
func (d *Dao) SearchList(c context.Context, code string, mid int64, pn, ps int) (list []*kfcmdl.BnjKfcCoupon, err error) {
db := d.DB
if code != "" {
db = db.Where("coupon_code = ?", code)
}
if mid != 0 {
db = db.Where("mid = ?", mid)
}
offset := (pn - 1) * ps
if err = db.Offset(offset).Limit(ps).Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound {
err = errors.Wrap(err, "find error")
}
return
}

View File

@@ -0,0 +1,31 @@
package kfc
import (
"context"
"fmt"
"testing"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoSearchList(t *testing.T) {
convey.Convey("SearchList", t, func(ctx convey.C) {
var (
c = context.Background()
code = ""
mid = int64(1505589)
pn = 1
ps = 15
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
rp, err := d.SearchList(c, code, mid, pn, ps)
ctx.Convey("Then err should be nil.rp should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
for _, v := range rp {
fmt.Printf("%+v", v)
}
})
})
})
}

View File

@@ -0,0 +1,109 @@
package dao
import (
"context"
"crypto/md5"
"encoding/base64"
"fmt"
"net/url"
"strings"
"time"
"go-common/app/admin/main/activity/model"
"go-common/library/log"
"go-common/library/xstr"
"github.com/jinzhu/gorm"
"github.com/pkg/errors"
)
const (
_likeBatchSQL = "INSERT INTO likes(`sid`,`wid`,`mid`,`type`,`state`,`stick_top`,`ctime`,`mtime`) VALUES %s"
_likeContentBatchSQL = "INSERT INTO like_content(`id`,`ipv6`,`ctime`,`mtime`) VALUES %s"
)
func imgAddKey(uri string) (url string) {
if strings.Contains(uri, "http://drawyoo.hdslb.com") {
path := strings.Replace(uri, "http://drawyoo.hdslb.com", "", -1)
expire := time.Now().Unix() + 3600
md5Byte := md5.Sum([]byte(fmt.Sprintf("rjZOPr8w%s%d", path, expire)))
md5Key := md5Byte[:]
afterKey := strings.Replace(base64.StdEncoding.EncodeToString(md5Key), "+/", "-_", -1)
return uri + "?key=" + strings.Replace(afterKey, "=", "", -1) + "&expires=" + fmt.Sprintf("%d", expire)
}
return uri
}
// GetLikeContent .
func (d *Dao) GetLikeContent(c context.Context, ids []int64) (outRes map[int64]*model.LikeContent, err error) {
var likeContent []*model.LikeContent
if err = d.DB.Where("id in (?)", ids).Find(&likeContent).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Where(id in %v).Find(),error(%v)", ids, err)
return
}
outRes = make(map[int64]*model.LikeContent, len(likeContent))
for _, item := range likeContent {
outRes[item.ID] = item
outRes[item.ID].Image = imgAddKey(item.Image)
}
return
}
// ActSubject get likesubject from db.
func (d *Dao) ActSubject(c context.Context, sid int64) (rp *model.ActSubject, err error) {
rp = new(model.ActSubject)
if err = d.DB.Where("id = ?", sid).First(rp).Error; err != nil {
log.Error(" s.DB.Where(id ,%d).First() error(%v)", sid, err)
}
return
}
// Musics get music info .
func (d *Dao) Musics(c context.Context, aids []int64, ip string) (music *model.MusicRes, err error) {
params := url.Values{}
params.Set("songIds", xstr.JoinInts(aids))
if err = d.client.Post(c, d.songsURL, ip, params, &music); err != nil {
err = errors.Wrapf(err, "d.client.Post(%s)", d.songsURL)
}
if music.Code != 0 {
err = errors.New("get music error")
}
return
}
// BatchLike .
func (d *Dao) BatchLike(c context.Context, item *model.Like, wids []int64, ipv6 []byte) (err error) {
var (
likesVal []*model.Like
)
if len(wids) == 0 {
return
}
lidString := make([]string, 0, len(wids))
rowStrings := make([]string, 0, len(wids))
ctime := time.Now()
for _, v := range wids {
rowStrings = append(rowStrings, fmt.Sprintf("(%d,%d,%d,%d,%d,%d,'%s','%s')", item.Sid, v, item.Mid, item.Type, item.State, item.StickTop, ctime, ctime))
}
tx := d.DB.Begin()
if err = tx.Model(&model.Like{}).Exec(fmt.Sprintf(_likeBatchSQL, strings.Join(rowStrings, ","))).Error; err != nil {
err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).Exec(%s)", _likeBatchSQL)
tx.Rollback()
return
}
if err = tx.Model(&model.Like{}).Where(fmt.Sprintf("sid = ? and wid in (%s)", xstr.JoinInts(wids)), item.Sid).Find(&likesVal).Error; err != nil {
err = errors.Wrapf(err, " d.DB.Model(&model.Like{}).find()")
tx.Rollback()
return
}
for _, itm := range likesVal {
lidString = append(lidString, fmt.Sprintf("(%d,'%s','%s','%s')", itm.ID, ipv6, ctime, ctime))
}
if err = tx.Model(&model.LikeContent{}).Exec(fmt.Sprintf(_likeContentBatchSQL, strings.Join(lidString, ","))).Error; err != nil {
err = errors.Wrapf(err, " d.DB.Model(&model.LikeContent{}).Exec(%s)", _likeContentBatchSQL)
tx.Rollback()
return
}
err = tx.Commit().Error
return
}

View File

@@ -0,0 +1,92 @@
package dao
import (
"context"
"fmt"
"net"
"testing"
"go-common/app/admin/main/activity/model"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoimgAddKey(t *testing.T) {
convey.Convey("imgAddKey", t, func(ctx convey.C) {
var (
uri = "http://i2.hdslb.com/bfs/face/5d2c92beb774a4bb30762538bb102d23670ae9c0.gif"
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
url := imgAddKey(uri)
ctx.Convey("Then url should not be nil.", func(ctx convey.C) {
ctx.So(url, convey.ShouldNotBeNil)
})
})
})
}
func TestDaoGetLikeContent(t *testing.T) {
convey.Convey("GetLikeContent", t, func(ctx convey.C) {
var (
c = context.Background()
ids = []int64{1, 2}
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
outRes, err := d.GetLikeContent(c, ids)
ctx.Convey("Then err should be nil.outRes should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
fmt.Printf("%+v", outRes)
})
})
})
}
func TestDaoActSubject(t *testing.T) {
convey.Convey("ActSubject", t, func(ctx convey.C) {
var (
c = context.Background()
sid = int64(10256)
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
rp, err := d.ActSubject(c, sid)
ctx.Convey("Then err should be nil.rp should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
fmt.Printf("%+v", rp)
})
})
})
}
func TestDaoMusics(t *testing.T) {
convey.Convey("Musics", t, func(ctx convey.C) {
var (
c = context.Background()
aids = []int64{1, 2}
ip = "10.248.25.36"
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
music, err := d.Musics(c, aids, ip)
ctx.Convey("Then err should be nil.music should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
fmt.Printf("%+v", music)
})
})
})
}
func TestDaoBatchLike(t *testing.T) {
convey.Convey("BatchLike", t, func(ctx convey.C) {
var (
c = context.Background()
item = &model.Like{Sid: 10256, Mid: 55}
wids = []int64{}
ipv6 = net.ParseIP("192.168.3.32")
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
err := d.BatchLike(c, item, wids, ipv6)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
})
}

View File

@@ -0,0 +1,26 @@
package dao
import (
"context"
"fmt"
"net/url"
"github.com/pkg/errors"
)
// AddTags add tags from http request.
func (d *Dao) AddTags(c context.Context, tags string, ip string) (err error) {
var res struct {
Code int `json:"code"`
}
params := url.Values{}
params.Set("tag_name", tags)
if err = d.client.Post(c, d.actURLAddTags, ip, params, &res); err != nil {
err = errors.Wrapf(err, "d.client.Post(%s)", d.actURLAddTags)
return
}
if res.Code != 0 {
err = fmt.Errorf("res code(%v)", res)
}
return
}

View File

@@ -0,0 +1,26 @@
package dao
import (
"context"
"testing"
"fmt"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoAddTags(t *testing.T) {
convey.Convey("AddTags", t, func(ctx convey.C) {
var (
c = context.Background()
tags = "keai"
ip = "10.256.36.68"
)
ctx.Convey("When everything goes positive", func(ctx convey.C) {
err := d.AddTags(c, tags, ip)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
fmt.Printf("%+v", err)
})
})
})
}