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,29 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//app/admin/main/activity/cmd:all-srcs",
"//app/admin/main/activity/conf:all-srcs",
"//app/admin/main/activity/dao:all-srcs",
"//app/admin/main/activity/http:all-srcs",
"//app/admin/main/activity/model:all-srcs",
"//app/admin/main/activity/service:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,28 @@
# activity-admin
## v1.1.5
1. kfc查询券码接口
## v1.1.4
1. account接入grpc
## v1.1.3
1. admin ipv4Toipv6
## v1.1.2
1. 批量上传稿件接口
## v1.1.1
1. php活动接口转go
## v1.1.0
1. 批量获取稿件信息
## v1.0.1
1. init bws
## v1.0.0
1. 初始化代码

View File

@@ -0,0 +1,10 @@
# Owner
liweijia
zhapuyu
renwei
# Author
liweijia
# Reviewer
wuhao

View File

@@ -0,0 +1,15 @@
# See the OWNERS docs at https://go.k8s.io/owners
approvers:
- liweijia
- renwei
- zhapuyu
labels:
- admin
- admin/main/activity
- main
options:
no_parent_owners: true
reviewers:
- liweijia
- wuhao

View File

@@ -0,0 +1,4 @@
# activity-admin
# 项目简介
1. 活动后台管理相关项目

View File

@@ -0,0 +1,45 @@
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 = ["activity-admin-test.toml"],
importpath = "go-common/app/admin/main/activity/cmd",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/http:go_default_library",
"//app/admin/main/activity/service:go_default_library",
"//library/log:go_default_library",
"//library/net/trace:go_default_library",
"//library/os/signal:go_default_library",
"//library/syscall: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,57 @@
[Log]
dir = "/data/log/activity-admin/"
[HTTPServer]
addr = "0.0.0.0:7741"
maxListen = 1000
timeout = "10m"
readTimeout = "10m"
writeTimeout = "10m"
[httpClient]
key = "b1014d7c339a5649"
secret = "75b74b612aa792b112e6504cae44c319"
dial = "10s"
timeout = "10s"
keepAlive = "60s"
[orm]
dsn = "test:test@tcp(172.16.33.205:3308)/bilibili_lottery?timeout=5s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8,utf8mb4"
active = 5
idle = 5
idleTimeout = "4h"
[auth]
managerHost = "http://uat-manager.bilibili.co"
dashboardHost = "http://dashboard-mng.bilibili.co"
dashboardCaller = "manager-go"
[auth.DsHTTPClient]
key = "manager-go"
secret = "949bbb2dd3178252638c2407578bc7ad"
dial = "1s"
timeout = "1s"
keepAlive = "60s"
[auth.MaHTTPClient]
key = "f6433799dbd88751"
secret = "36f8ddb1806207fe07013ab6a77a3935"
dial = "1s"
timeout = "1s"
keepAlive = "60s"
[auth.session]
sessionIDLength = 32
cookieLifeTime = 1800
cookieName = "mng-go"
domain = ".bilibili.co"
[auth.session.Memcache]
name = "go-business/auth"
proto = "tcp"
addr = "172.16.33.54:11211"
active = 10
idle = 10
dialTimeout = "1s"
readTimeout = "1s"
writeTimeout = "1s"
idleTimeout = "80s"
[Host]
API = "http://uat-api.bilibili.co"

View File

@@ -0,0 +1,57 @@
package main
import (
"flag"
"os"
"time"
"go-common/app/admin/main/activity/conf"
"go-common/app/admin/main/activity/http"
"go-common/app/admin/main/activity/service"
"go-common/library/log"
"go-common/library/net/trace"
"go-common/library/os/signal"
"go-common/library/syscall"
)
var (
s *service.Service
)
func main() {
flag.Parse()
if err := conf.Init(); err != nil {
log.Error("conf.Init() error(%v)", err)
panic(err)
}
log.Init(conf.Conf.Log)
defer log.Close()
trace.Init(conf.Conf.Tracer)
defer trace.Close()
s = service.New(conf.Conf)
http.Init(conf.Conf, s)
log.Info("push-admin start")
signalHandler()
}
func signalHandler() {
var (
ch = make(chan os.Signal, 1)
)
signal.Notify(ch, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT)
for {
si := <-ch
switch si {
case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGINT:
time.Sleep(time.Second * 2)
log.Info("get a signal %s, stop the push-admin process", si.String())
s.Close()
s.Wait()
time.Sleep(time.Second)
return
case syscall.SIGHUP:
default:
return
}
}
}

View File

@@ -0,0 +1,39 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["conf.go"],
importpath = "go-common/app/admin/main/activity/conf",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//library/conf:go_default_library",
"//library/database/orm:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/http/blademaster/middleware/permit:go_default_library",
"//library/net/rpc:go_default_library",
"//library/net/rpc/warden:go_default_library",
"//library/net/trace:go_default_library",
"//vendor/github.com/BurntSushi/toml:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,98 @@
package conf
import (
"errors"
"flag"
"go-common/library/conf"
"go-common/library/database/orm"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
"go-common/library/net/rpc"
"go-common/library/net/rpc/warden"
"go-common/library/net/trace"
"github.com/BurntSushi/toml"
)
var (
// config
confPath string
client *conf.Client
// Conf .
Conf = &Config{}
)
// Config def.
type Config struct {
Auth *permit.Config
HTTPServer *bm.ServerConfig
HTTPClient *bm.ClientConfig
ORM *orm.Config
Log *log.Config
Tracer *trace.Config
Host *Host
// tag rpc client
TagRPC *rpc.ClientConfig
//article rpc client
ArticlrRPC *rpc.ClientConfig
ArcClient *warden.ClientConfig
AccClient *warden.ClientConfig
}
// Host remote host
type Host struct {
API string
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
if load() != nil {
log.Error("config reload error (%v)", err)
}
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}
func init() {
flag.StringVar(&confPath, "conf", "", "default config path")
}
// Init int config
func Init() error {
if confPath != "" {
return local()
}
return remote()
}

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)
})
})
})
}

View File

@@ -0,0 +1,47 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"bws.go",
"http.go",
"kfc.go",
"likes.go",
"match.go",
"subject.go",
],
importpath = "go-common/app/admin/main/activity/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/model:go_default_library",
"//app/admin/main/activity/model/kfc:go_default_library",
"//app/admin/main/activity/service:go_default_library",
"//app/admin/main/activity/service/kfc: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/permit: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,14 @@
package http
import (
"go-common/app/admin/main/activity/model"
bm "go-common/library/net/http/blademaster"
)
func archives(c *bm.Context) {
p := &model.ArchiveParam{}
if err := c.Bind(p); err != nil {
return
}
c.JSON(actSrv.Archives(c, p))
}

View File

@@ -0,0 +1,712 @@
package http
import (
"go-common/app/admin/main/activity/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// addBws 增加赛程
func addBws(c *bm.Context) {
arg := new(model.ActBws)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBws(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBws 存储赛程
func saveBws(c *bm.Context) {
arg := new(model.ActBws)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBws{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBws(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// bwsInfo 赛程信息
func bwsInfo(c *bm.Context) {
arg := new(model.ActBws)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsInfo(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsList 比赛对象列表
func bwsList(c *bm.Context) {
var (
err error
count int
list []*model.ActBws
)
v := new(struct {
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsList(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBws{}).Count(&count).Error; err != nil {
log.Error("bwsList count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsAchievement 增加赛程
func addBwsAchievement(c *bm.Context) {
arg := new(model.ActBwsAchievement)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBws(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsAchievement 存储赛程
func saveBwsAchievement(c *bm.Context) {
arg := new(model.ActBwsAchievement)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsAchievement{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsAchievement(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// actBwsAchievement 赛程信息
func bwsAchievement(c *bm.Context) {
arg := new(model.ActBwsAchievement)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsAchievement(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsList 比赛对象列表
func bwsAchievements(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsAchievement
)
v := new(struct {
BID int64 `form:"bid" default:"0"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsAchievements(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsAchievement{}).Count(&count).Error; err != nil {
log.Error("bwsAchievements count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsField 增加赛程
func addBwsField(c *bm.Context) {
arg := new(model.ActBwsField)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBwsFieldws(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsField 存储赛程
func saveBwsField(c *bm.Context) {
arg := new(model.ActBwsField)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsAchievement{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsField(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// actBwsAchievement 赛程信息
func bwsField(c *bm.Context) {
arg := new(model.ActBwsField)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsField(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsList 比赛对象列表
func bwsFields(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsField
)
v := new(struct {
BID int64 `form:"bid" default:"0"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsFields(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsField{}).Count(&count).Error; err != nil {
log.Error("bwsFields count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsPoint
func addBwsPoint(c *bm.Context) {
arg := new(model.ActBwsPoint)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBaddBwsFieldws(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsPoint 存储赛程
func saveBwsPoint(c *bm.Context) {
arg := new(model.ActBwsPoint)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsPoint{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsPoint(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// actBwsAchievement 赛程信息
func bwsPoint(c *bm.Context) {
arg := new(model.ActBwsPoint)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsPoint(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsList 比赛对象列表
func bwsPoints(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsPoint
)
v := new(struct {
FID int64 `form:"fid" default:"0"`
BID int64 `form:"bid" default:"0"`
LockType int64 `form:"lock_type" default:"lock_type"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if v.FID != 0 {
db = db.Where("fid = ?", v.FID)
}
if v.LockType != 0 {
db = db.Where("lock_type = ?", v.LockType)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsPoints(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsPoint{}).Count(&count).Error; err != nil {
log.Error("bwsPoints count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsUserAchievement 保存用户
func addBwsUserAchievement(c *bm.Context) {
arg := new(model.ActBwsUserAchievement)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBwsUserAchievement(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsUserAchievement 保存用户成就
func saveBwsUserAchievement(c *bm.Context) {
arg := new(model.ActBwsUserAchievement)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsUserAchievement{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsUserAchievement(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// bwsUserAchievement 用户成就信息
func bwsUserAchievement(c *bm.Context) {
arg := new(model.ActBwsUserAchievement)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsUserAchievement(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsUserAchievements 用户成就列表
func bwsUserAchievements(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsUserAchievement
)
v := new(struct {
MID int64 `form:"mid" default:"0"`
AID int64 `form:"aid" default:"0"`
BID int64 `form:"bid" default:"0"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if v.AID != 0 {
db = db.Where("aid = ?", v.AID)
}
if v.MID != 0 {
db = db.Where("mid = ?", v.MID)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsUserAchievements(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsUserAchievement{}).Count(&count).Error; err != nil {
log.Error("bwsUserAchievements count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsUserPoint 保存用户
func addBwsUserPoint(c *bm.Context) {
arg := new(model.ActBwsUserPoint)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBwsUserPoint(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsUserAchievement 保存用户成就
func saveBwsUserPoint(c *bm.Context) {
arg := new(model.ActBwsUserPoint)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsUserPoint{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsUserPoint(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// bwsUserPoint 用户点数信息
func bwsUserPoint(c *bm.Context) {
arg := new(model.ActBwsUserPoint)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsUserPoint(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsUserPoints 用户点数列表
func bwsUserPoints(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsUserPoint
)
v := new(struct {
MID int64 `form:"mid" default:"0"`
KEY string `form:"key" default:""`
LockType int64 `form:"lock_type" default:"lock_type"`
BID int64 `form:"bid" default:"0"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if v.KEY != "" {
db = db.Where("key = ?", v.KEY)
}
if v.MID != 0 {
db = db.Where("mid = ?", v.MID)
}
if v.LockType != 0 {
db = db.Where("lock_type = ?", v.LockType)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsUserPoints(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsUserPoint{}).Count(&count).Error; err != nil {
log.Error("bwsUserPoints count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addBwsUser 添加用户
func addBwsUser(c *bm.Context) {
arg := new(model.ActBwsUser)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addBwsUserPoint(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveBwsUserAchievement 保存用户成就
func saveBwsUser(c *bm.Context) {
arg := new(model.ActBwsUser)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActBwsUser{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveBwsUserPoint(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// bwsUserPoint 用户点数信息
func bwsUser(c *bm.Context) {
arg := new(model.ActBwsUser)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("bwsUserPoint(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// bwsUserPoints 用户点数列表
func bwsUsers(c *bm.Context) {
var (
err error
count int
list []*model.ActBwsUser
)
v := new(struct {
MID int64 `form:"mid" default:"0"`
KEY string `form:"key" default:""`
BID int64 `form:"bid" default:"0"`
Del int8 `form:"del" default:"0"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
db = db.Where("del = ?", v.Del)
if v.BID != 0 {
db = db.Where("bid = ?", v.BID)
}
if v.KEY != "" {
db = db.Where("key = ?", v.KEY)
}
if v.MID != 0 {
db = db.Where("mid = ?", v.MID)
}
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("bwsUsers(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActBwsUser{}).Count(&count).Error; err != nil {
log.Error("bwsUsers count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}

View File

@@ -0,0 +1,133 @@
package http
import (
"go-common/app/admin/main/activity/conf"
"go-common/app/admin/main/activity/service"
"go-common/app/admin/main/activity/service/kfc"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/permit"
)
var (
actSrv *service.Service
authSrv *permit.Permit
kfcSrv *kfc.Service
)
// Init init http sever instance.
func Init(c *conf.Config, s *service.Service) {
actSrv = s
kfcSrv = kfc.New(c)
authSrv = permit.New(c.Auth)
engine := bm.DefaultServer(c.HTTPServer)
route(engine)
if err := engine.Start(); err != nil {
log.Error("httpx.Serve error(%v)", err)
panic(err)
}
}
func route(e *bm.Engine) {
e.Ping(ping)
g := e.Group("/x/admin/activity")
{
g.GET("/arcs", archives)
gapp := g.Group("/matchs", authSrv.Permit("ACT_MATCHS_MGT_TEST"))
{
gapp.POST("/add", addMatch)
gapp.POST("/save", saveMatch)
gapp.GET("/info", matchInfo)
gapp.GET("/list", matchList)
}
gappO := g.Group("/matchs/object", authSrv.Permit("ACT_MATCHS_MGT_TEST"))
{
gappO.POST("/add", addMatchObject)
gappO.POST("/save", saveMatchObject)
gappO.GET("/info", matchObjectInfo)
gappO.GET("/list", matchObjectList)
}
gappSuject := g.Group("/subject")
{
gappSuject.GET("/list", listInfosAll)
gappSuject.GET("/videos", videoList)
gappSuject.POST("/add", addActSubject)
gappSuject.POST("/up", updateInfoAll)
gappSuject.GET("/protocol", subPro)
gappSuject.GET("/conf", timeConf)
gappSuject.GET("/articles", article)
}
gappLikes := g.Group("/likes")
{
gappLikes.GET("/list", likesList)
gappLikes.GET("/lids", likes)
gappLikes.POST("/add", addLike)
gappLikes.POST("/up", upLike)
gappLikes.POST("/up/reply", upListContent)
gappLikes.POST("/up/wid", upWid)
gappLikes.POST("/add/pic", addPic)
gappLikes.POST("/batch/wid", batchLikes)
}
gappKfc := g.Group("kfc")
{
gappKfc.GET("/list", kfcList)
}
gappBws := g.Group("/bws")
{
gappBws.POST("/add", addBws)
gappBws.POST("/save", saveBws)
gappBws.GET("/info", bwsInfo)
gappBws.GET("/list", bwsList)
gappAchievement := gappBws.Group("/achievement")
{
gappAchievement.POST("/add", addBwsAchievement)
gappAchievement.POST("/save", saveBwsAchievement)
gappAchievement.GET("/info", bwsAchievement)
gappAchievement.GET("/list", bwsAchievements)
}
gappField := gappBws.Group("/field")
{
gappField.POST("/add", addBwsField)
gappField.POST("/save", saveBwsField)
gappField.GET("/info", bwsField)
gappField.GET("/list", bwsFields)
}
gappPoint := gappBws.Group("/point")
{
gappPoint.POST("/add", addBwsPoint)
gappPoint.POST("/save", saveBwsPoint)
gappPoint.GET("/info", bwsPoint)
gappPoint.GET("/list", bwsPoints)
}
gappUser := gappBws.Group("/user")
{
gappUser.POST("/add", addBwsUser)
gappUser.POST("/save", saveBwsUser)
gappUser.GET("/info", bwsUser)
gappUser.GET("/list", bwsUsers)
gappUserAchievement := gappUser.Group("/achievement")
{
gappUserAchievement.POST("/add", addBwsUserAchievement)
gappUserAchievement.POST("/save", saveBwsUserAchievement)
gappUserAchievement.GET("/info", bwsUserAchievement)
gappUserAchievement.GET("/list", bwsUserAchievements)
}
gappUserPoint := gappUser.Group("/point")
{
gappUserPoint.POST("/add", addBwsUserPoint)
gappUserPoint.POST("/save", saveBwsUserPoint)
gappUserPoint.GET("/info", bwsUserPoint)
gappUserPoint.GET("/list", bwsUserPoints)
}
}
}
}
}
func ping(c *bm.Context) {
if err := actSrv.Ping(c); err != nil {
c.Error = err
c.AbortWithStatus(503)
}
}

View File

@@ -0,0 +1,14 @@
package http
import (
kfcmdl "go-common/app/admin/main/activity/model/kfc"
bm "go-common/library/net/http/blademaster"
)
func kfcList(c *bm.Context) {
arg := new(kfcmdl.ListParams)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(kfcSrv.List(c, arg))
}

View File

@@ -0,0 +1,75 @@
package http
import (
"go-common/app/admin/main/activity/model"
bm "go-common/library/net/http/blademaster"
)
func likesList(c *bm.Context) {
arg := new(model.LikesParam)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.LikesList(c, arg))
}
func likes(c *bm.Context) {
var args struct {
Sid int64 `form:"sid" validate:"min=1,required"`
Lids []int64 `form:"lids,split" validate:"min=1,max=50,dive,min=1"`
}
if err := c.Bind(&args); err != nil {
return
}
c.JSON(actSrv.Likes(c, args.Sid, args.Lids))
}
func addLike(c *bm.Context) {
args := new(model.AddLikes)
if err := c.Bind(args); err != nil {
return
}
c.JSON(actSrv.AddLike(c, args))
}
func upLike(c *bm.Context) {
args := new(model.UpLike)
if err := c.Bind(args); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(actSrv.UpLike(c, args, username.(string)))
}
func upListContent(c *bm.Context) {
args := new(model.UpReply)
if err := c.Bind(args); err != nil {
return
}
username, _ := c.Get("username")
c.JSON(nil, actSrv.UpLikesState(c, args.IDs, args.State, args.Reply, username.(string)))
}
func upWid(c *bm.Context) {
args := new(model.UpWid)
if err := c.Bind(args); err != nil {
return
}
c.JSON(nil, actSrv.UpWid(c, args))
}
func addPic(c *bm.Context) {
args := new(model.AddPic)
if err := c.Bind(args); err != nil {
return
}
c.JSON(actSrv.AddPicContent(c, args))
}
func batchLikes(c *bm.Context) {
args := new(model.BatchLike)
if err := c.Bind(args); err != nil {
return
}
c.JSON(nil, actSrv.BatchLikes(c, args))
}

View File

@@ -0,0 +1,213 @@
package http
import (
"fmt"
"go-common/app/admin/main/activity/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
// addMatch 增加赛程
func addMatch(c *bm.Context) {
arg := new(model.ActMatchs)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addMatch(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveMatch 存储赛程
func saveMatch(c *bm.Context) {
arg := new(model.ActMatchs)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Model(&model.ActMatchs{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveMatch(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// matchInfo 赛程信息
func matchInfo(c *bm.Context) {
arg := new(model.ActMatchs)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("matcInfo(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// matchList 比赛对象列表
func matchList(c *bm.Context) {
var (
err error
count int
list []*model.ActMatchs
)
v := new(struct {
SID int64 `form:"sid" default:"-1"`
Status int8 `form:"status" default:"-1"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
if v.Status != -1 {
db = db.Where("status = ?", v.Status)
}
if v.SID != -1 {
db = db.Where("sid = ?", v.SID)
}
db = db.Where("status = ?", 0)
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("businessList(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActMatchs{}).Count(&count).Error; err != nil {
log.Error("businessList count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}
// addMatchObject 比赛对象
func addMatchObject(c *bm.Context) {
arg := new(model.ActMatchsObject)
if err := c.Bind(arg); err != nil {
return
}
if err := actSrv.DB.Create(arg).Error; err != nil {
log.Error("addMatch(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// saveMatchObject 更新比赛对象
func saveMatchObject(c *bm.Context) {
arg := new(model.ActMatchsObject)
if err := c.Bind(arg); err != nil {
return
}
fmt.Println(arg.AwayName)
fmt.Println(arg.HomeLogo)
if err := actSrv.DB.Model(&model.ActMatchsObject{ID: arg.ID}).Update(arg).Error; err != nil {
log.Error("saveMatch(%v) error(%v)", arg, err)
c.JSON(nil, err)
return
}
c.JSON(nil, nil)
}
// matchObjectInfo 比赛对象信息
func matchObjectInfo(c *bm.Context) {
arg := new(model.ActMatchsObject)
if err := c.Bind(arg); err != nil {
return
}
if arg.ID == 0 {
c.JSON(nil, ecode.RequestErr)
return
}
if err := actSrv.DB.First(arg, arg.ID).Error; err != nil {
log.Error("matcInfo(%d) error(%v)", arg.ID, err)
c.JSON(nil, err)
return
}
c.JSON(arg, nil)
}
// matchObjectList 比赛对象列表
func matchObjectList(c *bm.Context) {
var (
err error
count int
list []*model.ActMatchsObject
)
v := new(struct {
SID int64 `form:"sid" default:"-1"`
Status int8 `form:"status" default:"-1"`
Page int `form:"pn" default:"1"`
Size int `form:"ps" default:"20"`
MatchID int `form:"match_id"`
})
if err = c.Bind(v); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
db := actSrv.DB
if v.Page == 0 {
v.Page = 1
}
if v.Size == 0 {
v.Size = 20
}
if v.Status != -1 {
db = db.Where("status = ?", v.Status)
}
if v.SID != -1 {
db = db.Where("sid = ?", v.SID)
}
if v.MatchID != 0 {
db = db.Where("match_id = ?", v.MatchID)
}
db = db.Where("status = ?", 0)
if err = db.
Offset((v.Page - 1) * v.Size).Limit(v.Size).
Find(&list).Error; err != nil {
log.Error("businessList(%d,%d) error(%v)", v.Page, v.Size, err)
c.JSON(nil, err)
return
}
if err = db.Model(&model.ActMatchsObject{}).Count(&count).Error; err != nil {
log.Error("businessList count error(%v)", err)
c.JSON(nil, err)
return
}
data := map[string]interface{}{
"data": list,
"pn": v.Page,
"ps": v.Size,
"total": count,
}
c.JSONMap(data, nil)
}

View File

@@ -0,0 +1,71 @@
package http
import (
"go-common/app/admin/main/activity/model"
bm "go-common/library/net/http/blademaster"
)
func listInfosAll(c *bm.Context) {
arg := new(model.ListSub)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.SubjectList(c, arg))
}
func videoList(c *bm.Context) {
c.JSON(actSrv.VideoList(c))
}
func addActSubject(c *bm.Context) {
arg := new(model.AddList)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.AddActSubject(c, arg))
}
func updateInfoAll(c *bm.Context) {
type upStr struct {
model.AddList
Sid int64 `form:"sid" validate:"min=1"`
}
arg := new(upStr)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.UpActSubject(c, &arg.AddList, arg.Sid))
}
func subPro(c *bm.Context) {
type subStr struct {
Sid int64 `form:"sid" validate:"min=1"`
}
arg := new(subStr)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.SubProtocol(c, arg.Sid))
}
func timeConf(c *bm.Context) {
type subStr struct {
Sid int64 `form:"sid" validate:"required"`
}
arg := new(subStr)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.TimeConf(c, arg.Sid))
}
func article(c *bm.Context) {
type subStr struct {
Aids []int64 `form:"aids,split" validate:"min=1,required"`
}
arg := new(subStr)
if err := c.Bind(arg); err != nil {
return
}
c.JSON(actSrv.GetArticleMetas(c, arg.Aids))
}

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 = ["model_test.go"],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"bws.go",
"likes.go",
"match.go",
"subject.go",
],
importpath = "go-common/app/admin/main/activity/model",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time: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/model/kfc:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,6 @@
package model
// ArchiveParam .
type ArchiveParam struct {
Aids []int64 `json:"aids" form:"aids,split" validate:"min=1,max=30,dive,gt=0"`
}

View File

@@ -0,0 +1,108 @@
package model
import (
"time"
)
// ActBws def.
type ActBws struct {
ID int64 `json:"id" form:"id"`
Name string `json:"name" form:"name"`
Image string `json:"image" form:"image"`
Dic string `json:"dic" form:"dic"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActBwsAchievement def.
type ActBwsAchievement struct {
ID int64 `json:"id" form:"id"`
Name string `json:"name" form:"name"`
Icon string `json:"icon" form:"icon"`
Dic string `json:"dic" form:"dic"`
Image string `json:"image" form:"image"`
LinkType int64 `json:"link_type" form:"link_type"`
Unlock int64 `json:"unlock" form:"unlock"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
IconBig string `json:"icon_big" form:"icon_big"`
IconActive string `json:"icon_active" form:"icon_active"`
IconActiveBig string `json:"icon_active_big" form:"icon_active_big"`
Award int8 `json:"award" form:"award"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
Del int8 `json:"del" form:"del"`
SuitID int64 `json:"suit_id" gorm:"column:suit_id" form:"suit_id"`
}
// ActBwsField def.
type ActBwsField struct {
ID int64 `json:"id" form:"id"`
Name string `json:"name" form:"name"`
Area string `json:"area" form:"area"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActBwsPoint def.
type ActBwsPoint struct {
ID int64 `json:"id" form:"id"`
Name string `json:"name" form:"name"`
Icon string `json:"icon" form:"icon"`
FID int64 `json:"fid" gorm:"column:fid" form:"fid"`
Ower int64 `json:"ower" gorm:"column:ower" form:"ower"`
Image string `json:"image" form:"image"`
Unlocked int64 `json:"unlocked" form:"unlocked"`
LoseUnlocked int64 `json:"lose_unlocked" form:"lose_unlocked"`
LockType int64 `json:"lock_type" form:"lock_type"`
Dic string `json:"dic" form:"dic"`
Rule string `json:"rule" form:"rule"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
OtherIP string `json:"other_ip" gorm:"column:other_ip" form:"other_ip"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActBwsUserAchievement def.
type ActBwsUserAchievement struct {
ID int64 `json:"id" form:"id"`
MID int64 `json:"mid" gorm:"column:mid" form:"mid"`
AID int64 `json:"aid" gorm:"column:aid" form:"aid"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
Key string `json:"key" form:"key"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActBwsUserPoint def.
type ActBwsUserPoint struct {
ID int64 `json:"id" form:"id"`
MID int64 `json:"mid" gorm:"column:mid" form:"mid"`
PID int64 `json:"pid" gorm:"column:pid" form:"pid"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
Key string `json:"key" form:"key"`
Points int64 `json:"points" form:"points"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActBwsUser def.
type ActBwsUser struct {
ID int64 `json:"id" form:"id"`
MID int64 `json:"mid" gorm:"column:mid" form:"mid"`
BID int64 `json:"bid" gorm:"column:bid" form:"bid"`
Key string `json:"key" form:"key"`
Del int8 `json:"del" form:"del"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// TableName ActBws def.
func (ActBws) TableName() string {
return "act_bws"
}

View File

@@ -0,0 +1,29 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["kfc.go"],
importpath = "go-common/app/admin/main/activity/model/kfc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = ["//library/time: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,28 @@
package kfc
import "go-common/library/time"
// ListParams .
type ListParams struct {
CouponCode string `form:"coupon_code"`
Mid int64 `form:"mid"`
Pn int `form:"pn" default:"0" validate:"min=0"`
Ps int `form:"ps" default:"15" validate:"min=1"`
}
//BnjKfcCoupon def
type BnjKfcCoupon struct {
ID int64 `json:"id" gorm:"column:id"`
Mid int64 `json:"mid" gorm:"column:mid"`
CouponCode string `json:"coupon_code" gorm:"column:coupon_code"`
Desc string `json:"desc" gorm:"column:desc"`
State int `json:"state" gorm:"column:state"`
DeleteTime time.Time `json:"delete_time" gorm:"column:delete_time" time_format:"2006-01-02 15:04:05"`
Ctime time.Time `json:"ctime" gorm:"column:ctime" time_format:"2006-01-02 15:04:05"`
Mtime time.Time `json:"mtime" gorm:"column:mtime" time_format:"2006-01-02 15:04:05"`
}
// TableName BnjKfcCoupon def
func (BnjKfcCoupon) TableName() string {
return "bnj_kfc_coupon"
}

View File

@@ -0,0 +1,143 @@
package model
import (
xtime "go-common/library/time"
)
// LikesParam def.
type LikesParam struct {
Sid int64 `form:"sid" validate:"min=1"`
Mid int64 `form:"mid"`
Wid int64 `form:"wid"`
Page int `form:"page" default:"1" validate:"min=1"`
PageSize int `form:"pagesize" default:"15" validate:"min=1"`
States []int `form:"state,split"`
}
// AddLikes .
type AddLikes struct {
DealType string `form:"deal_type" validate:"required"`
Wid int64 `form:"wid"`
Sid int64 `form:"sid" validate:"min=1"`
Type int `form:"type"`
Mid int64 `form:"mid"`
State int `form:"state"`
Plat int `form:"plat"`
Device int `form:"device"`
}
// UpReply .
type UpReply struct {
State int `form:"state"`
Reply string `form:"reply"`
IDs []int64 `form:"ids,split" validate:"min=1,max=50"`
}
// UpWid .
type UpWid struct {
Sid int64 `form:"sid" validate:"min=1"`
Wid int64 `form:"wid" validate:"min=1"`
State int `form:"state"`
}
// BatchLike .
type BatchLike struct {
Sid int64 `form:"sid" validate:"min=1"`
Wid []int64 `form:"wid,split" validate:"min=1,max=200,dive,gt=0"`
Mid int64 `form:"mid"`
Type int `form:"type"`
}
// AddPic .
type AddPic struct {
Sid int64 `form:"sid" validate:"min=1"`
Type int `form:"type"`
Mid int64 `form:"mid"`
Wid int64 `form:"wid"`
Plat int `form:"plat"`
Device int `form:"device"`
Image string `form:"image"`
Message string `form:"message" validate:"required,max=450,min=1"`
Link string `form:"link"`
}
// UpLike .
type UpLike struct {
Type int `form:"type"`
Mid int64 `form:"mid"`
Wid int64 `form:"wid"`
State int `form:"state"`
StickTop int `form:"stick_top"`
Lid int64 `form:"lid" validate:"min=1"`
Message string `form:"message"`
Reply string `form:"reply"`
Link string `form:"link"`
Image string `form:"image"`
}
// ActivityAVInfo active_id -> avid
type ActivityAVInfo struct {
ActivityID int64 `json:"mission_id"`
AVID int64 `json:"id"`
MID int64 `json:"mid"`
Category int `json:"typeid"`
TagID int64 `json:"-"`
Ratio int `json:"-"`
}
// LikeContent def
type LikeContent struct {
ID int64 `json:"id" form:"id" gorm:"column:id"`
Message string `json:"message" form:"message"`
IP int64 `json:"ip" form:"ip" gorm:"column:ip"`
Plat int `json:"plat" form:"plat"`
Device int `json:"device" form:"device"`
Ctime xtime.Time `json:"ctime" form:"ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `json:"mtime" form:"mtime" time_format:"2006-01-02 15:04:05"`
Image string `json:"image" form:"image"`
Reply string `json:"reply" form:"reply"`
Link string `json:"link" form:"link"`
ExName string `json:"ex_name" form:"ex_name"`
IPv6 []byte `json:"ipv6" gorm:"column:ipv6"`
}
//ActLikeLog def
type ActLikeLog struct {
ID int64 `json:"id" form:"id" gorm:"column:id"`
Lid int64 `json:"lid" form:"lid" gorm:"column:lid"`
User string `json:"user" form:"user" gorm:"column:user"`
State int64 `json:"state" form:"state" gorm:"column:state"`
Ctime xtime.Time `json:"ctime" form:"ctime" gorm:"column:ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `json:"mtime" form:"mtime" gorm:"column:mtime" time_format:"2006-01-02 15:04:05"`
}
// LikesRes .
type LikesRes struct {
Likes map[int64]*Like `json:"likes"`
PageRes
}
// MusicRes .
type MusicRes struct {
Code int `json:"code"`
Data map[int64]struct {
CoverURL string `json:"coverUrl"`
Duration string `json:"duration"`
Categorie string `json:"categorie"`
Intro string `json:"intro"`
Mid int64 `json:"mid"`
Title string `json:"title"`
SongID int64 `json:"songId"`
PlayURL []string `json:"playUrl"`
}
}
// TableName ActLikeLog def
func (ActLikeLog) TableName() string {
return "act_like_log"
}
// TableName LikeContent def
func (LikeContent) TableName() string {
return "like_content"
}

View File

@@ -0,0 +1,44 @@
package model
import (
"time"
)
// ActMatchs def.
type ActMatchs struct {
ID int64 `json:"id" form:"id"`
Name string `json:"name" form:"name"`
URL string `json:"url" form:"url"`
Cover string `json:"cover" form:"cover"`
SID int64 `json:"sid" form:"sid" gorm:"column:sid"`
MaxStake int64 `json:"max_stake" form:"max_stake"`
Stake int8 `json:"stake" form:"stake"`
Status int8 `json:"status" form:"status"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
}
// ActMatchsObject def.
type ActMatchsObject struct {
ID int64 `json:"id" form:"id"`
HomeName string `json:"home_name" form:"home_name"`
HomeLogo string `json:"home_logo" form:"home_logo"`
HomeScore int64 `json:"home_score" form:"home_score"`
AwayName string `json:"away_name" form:"away_name"`
AwayLogo string `json:"away_logo" form:"away_logo"`
AwayScore int64 `json:"away_score" form:"away_score"`
SID int64 `json:"sid" gorm:"column:sid" form:"sid"`
MatchID int64 `json:"match_id" form:"match_id"`
GameStime time.Time `json:"game_stime" form:"game_stime" time_format:"2006-01-02 15:04:05"`
Stime time.Time `json:"stime" form:"stime" time_format:"2006-01-02 15:04:05"`
Etime time.Time `json:"etime" form:"etime" time_format:"2006-01-02 15:04:05"`
Ctime time.Time `json:"ctime"`
Mtime time.Time `json:"mtime"`
Result int8 `json:"result" form:"result"`
Status int8 `json:"status" form:"status"`
}
// TableName ActMatchsObject def.
func (ActMatchsObject) TableName() string {
return "act_matchs_object"
}

View File

@@ -0,0 +1,9 @@
package model
import "testing"
func Test_Funcs(t *testing.T) {
act := new(ActMatchsObject)
s := act.TableName()
t.Logf("tablename %s", s)
}

View File

@@ -0,0 +1,192 @@
package model
import (
xtime "go-common/library/time"
)
// VIDEO actiivty types .
const (
VIDEO = 1
PICTURE = 2
DRAWYOO = 3
VIDEOLIKE = 4
PICTURELIKE = 5
DRAWYOOLIKE = 6
TEXT = 7
TEXTLIKE = 8
ONLINEVOTE = 9
QUESTION = 10
LOTTERY = 11
ARTICLE = 12
VIDEO2 = 13
MUSIC = 15
PHONEVIDEO = 16
SMALLVIDEO = 17
RESERVATION = 18
MISSIONGROUP = 19
)
// SidSub def
type SidSub struct {
Type int `form:"type" validate:"required"`
Lids []int64 `form:"lids,split" validate:"max=50,min=1,dive,min=1"`
}
// ListSub def
type ListSub struct {
Page int `form:"page" default:"1" validate:"min=1"`
PageSize int `form:"pagesize" default:"15" validate:"min=1"`
Keyword string `form:"keyword"`
States []int `form:"state,split" default:"0"`
Types []int `form:"type,split" default:"0"`
Sctime int64 `form:"sctime"`
Ectime int64 `form:"ectime"`
}
// SubListRes .
type SubListRes struct {
List []*ActSubject `json:"list"`
Page *PageRes `json:"page"`
}
// PageRes .
type PageRes struct {
Num int `json:"num"`
Size int `json:"size"`
Total int64 `json:"total"`
}
// AddList def
type AddList struct {
ActSubject
Protocol string `form:"protocol"`
Types string `form:"types"`
Pubtime xtime.Time `form:"pubtime" time_format:"2006-01-02 15:04:05"`
Deltime xtime.Time `form:"deltime" time_format:"2006-01-02 15:04:05"`
Editime xtime.Time `form:"editime" time_format:"2006-01-02 15:04:05"`
Tags string `form:"tags"`
Interval int `form:"interval"`
Tlimit int `form:"tlimit"`
Ltime int `form:"ltime"`
Hot int `form:"hot"`
BgmID int64 `form:"bgm_id"`
PasterID int64 `form:"paster_id"`
Oids string `from:"oids"`
ScreenSet int `form:"screen_set" default:"1"`
}
//ActSubjectProtocol def
type ActSubjectProtocol struct {
ID int64 `json:"id" form:"id" gorm:"column:id"`
Sid int64 `json:"sid" form:"sid"`
Protocol string `json:"protocol" form:"protocol"`
Mtime xtime.Time `json:"mtime" form:"mtime" time_format:"2006-01-02 15:04:05"`
Ctime xtime.Time `json:"ctime" form:"ctime" time_format:"2006-01-02 15:04:05"`
Types string `json:"types" form:"types"`
Tags string `json:"tags" form:"tags"`
Hot int `json:"hot" form:"hot"`
Pubtime xtime.Time `json:"pubtime" form:"pubtime" time_format:"2006-01-02 15:04:05"`
Deltime xtime.Time `json:"deltime" form:"deltime" time_format:"2006-01-02 15:04:05"`
Editime xtime.Time `json:"editime" form:"editime" time_format:"2006-01-02 15:04:05"`
BgmID int64 `json:"bgm_id" form:"bgm_id" gorm:"column:bgm_id"`
PasterID int64 `json:"paster_id" form:"paster_id" gorm:"column:paster_id"`
Oids string `json:"oids" form:"oids" gorm:"column:oids"`
ScreenSet int `json:"screen_set" form:"screen_set" gorm:"column:screen_set"`
}
//ActTimeConfig def
type ActTimeConfig struct {
ID int64 `json:"id" form:"id" gorm:"column:id"`
Sid int64 `json:"sid" form:"sid"`
Interval int `json:"interval" form:"interval"`
Ctime xtime.Time `json:"ctime" form:"ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `json:"mtime" form:"mtime" time_format:"2006-01-02 15:04:05"`
Tlimit int `json:"tlimit" form:"tlimit"`
Ltime int `json:"ltime" form:"ltime"`
}
// ActSubject def.
type ActSubject struct {
ID int64 `json:"id,omitempty" form:"id" gorm:"column:id"`
Oid int64 `json:"oid,omitempty" form:"oid"`
Type int `json:"type,omitempty" form:"type"`
State int `json:"state,omitempty" form:"state"`
Level int `json:"level,omitempty" form:"level"`
Flag int64 `json:"flag,omitempty" form:"flag"`
Rank int64 `json:"rank,omitempty" form:"rank"`
Stime xtime.Time `json:"stime,omitempty" form:"stime" time_format:"2006-01-02 15:04:05"`
Etime xtime.Time `json:"etime,omitempty" form:"etime" time_format:"2006-01-02 15:04:05"`
Ctime xtime.Time `json:"ctime,omitempty" form:"ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `json:"mtime,omitempty" form:"mtime" time_format:"2006-01-02 15:04:05"`
Lstime xtime.Time `json:"lstime,omitempty" form:"lstime" time_format:"2006-01-02 15:04:05"`
Letime xtime.Time `json:"letime,omitempty" form:"letime" time_format:"2006-01-02 15:04:05"`
Uetime xtime.Time `json:"uetime,omitempty" form:"uetime" time_format:"2006-01-02 15:04:05"`
Ustime xtime.Time `json:"ustime,omitempty" form:"ustime" time_format:"2006-01-02 15:04:05"`
Name string `json:"name,omitempty" form:"name"`
Author string `json:"author,omitempty" form:"author"`
ActURL string `json:"act_url,omitempty" form:"act_url"`
Cover string `json:"cover,omitempty" form:"cover"`
Dic string `json:"dic,omitempty" form:"dic"`
H5Cover string `json:"h5_cover,omitempty" form:"h5_cover"`
LikeLimit int `json:"like_limit" form:"like_limit"`
AndroidURL string `json:"android_url"`
IosURL string `json:"ios_url"`
}
// ActSubjectResult .
type ActSubjectResult struct {
*ActSubject
Aids []int64 `json:"aids,omitempty"`
}
// Like def.
type Like struct {
ID int64 `json:"id" form:"id" gorm:"column:id"`
Sid int64 `json:"sid" form:"sid"`
Type int `json:"type" form:"type"`
Mid int64 `json:"mid" form:"mid"`
Wid int64 `json:"wid" form:"wid"`
State int `json:"state" form:"state"`
StickTop int `json:"stick_top" form:"stick_top"`
Ctime xtime.Time `json:"ctime" form:"ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `json:"mtime" form:"mtime" time_format:"2006-01-02 15:04:05"`
Object interface{} `json:"object,omiempty" gorm:"-"`
Like int64 `json:"like,omiempty" gorm:"-"`
}
//LikeAction def
type LikeAction struct {
ID int64 `form:"id" gorm:"column:id"`
Lid int64 `form:"lid"`
Mid int64 `form:"mid"`
Action int64 `form:"action"`
Ctime xtime.Time `form:"ctime" time_format:"2006-01-02 15:04:05"`
Mtime xtime.Time `form:"mtime" time_format:"2006-01-02 15:04:05"`
Sid int64 `form:"sid"`
IP int64 `form:"ip" gorm:"column:ip"`
}
// TableName LikeAction def
func (LikeAction) TableName() string {
return "like_action"
}
// TableName ActMatchs def.
func (ActSubject) TableName() string {
return "act_subject"
}
// TableName Likes def
func (Like) TableName() string {
return "likes"
}
// TableName ActSubjectProtocol def
func (ActSubjectProtocol) TableName() string {
return "act_subject_protocol"
}
// TableName ActTimeConfig def
func (ActTimeConfig) TableName() string {
return "act_time_config"
}

View File

@@ -0,0 +1,74 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"likes.go",
"service.go",
"subject.go",
],
importpath = "go-common/app/admin/main/activity/service",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/dao:go_default_library",
"//app/admin/main/activity/model:go_default_library",
"//app/interface/main/tag/model:go_default_library",
"//app/interface/main/tag/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/account/api:go_default_library",
"//app/service/main/archive/api:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/metadata:go_default_library",
"//library/sync/errgroup:go_default_library",
"//library/time:go_default_library",
"//library/xstr:go_default_library",
"//vendor/github.com/jinzhu/gorm: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/service/kfc:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_test(
name = "go_default_test",
srcs = [
"archive_test.go",
"likes_test.go",
"service_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",
"//library/time:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
],
)

View File

@@ -0,0 +1,27 @@
package service
import (
"context"
lmdl "go-common/app/admin/main/activity/model"
arcmdl "go-common/app/service/main/archive/api"
"go-common/library/log"
)
// Archives get achives info .
func (s *Service) Archives(c context.Context, p *lmdl.ArchiveParam) (res map[int64]*arcmdl.Arc, err error) {
var (
arcs *arcmdl.ArcsReply
)
if arcs, err = s.arcClient.Arcs(c, &arcmdl.ArcsRequest{Aids: p.Aids}); err != nil {
log.Error("s.arcClient.Archives3(%v) error(%v)", p.Aids, err)
return
}
res = make(map[int64]*arcmdl.Arc, len(p.Aids))
for _, aid := range p.Aids {
if arc, ok := arcs.Arcs[aid]; ok && arc.IsNormal() {
res[aid] = arc
}
}
return
}

View File

@@ -0,0 +1,21 @@
package service
import (
"context"
"fmt"
"testing"
lmdl "go-common/app/admin/main/activity/model"
. "github.com/smartystreets/goconvey/convey"
)
func TestService_Archives(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
res, err := s.Archives(context.Background(), &lmdl.ArchiveParam{Aids: []int64{10110582, 10110581}})
So(err, ShouldBeNil)
for _, v := range res {
fmt.Printf("%+v", v)
}
}))
}

View File

@@ -0,0 +1,34 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = ["service.go"],
importpath = "go-common/app/admin/main/activity/service/kfc",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/admin/main/activity/conf:go_default_library",
"//app/admin/main/activity/dao/kfc:go_default_library",
"//app/admin/main/activity/model/kfc: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,40 @@
package kfc
import (
"context"
"go-common/app/admin/main/activity/conf"
kfcDao "go-common/app/admin/main/activity/dao/kfc"
kfcmdl "go-common/app/admin/main/activity/model/kfc"
"go-common/library/log"
)
// Service struct
type Service struct {
c *conf.Config
dao *kfcDao.Dao
}
// Close service
func (s *Service) Close() {
if s.dao != nil {
s.dao.Close()
}
}
// New Service
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: kfcDao.New(c),
}
return
}
// List .
func (s *Service) List(c context.Context, arg *kfcmdl.ListParams) (list []*kfcmdl.BnjKfcCoupon, err error) {
if list, err = s.dao.SearchList(c, arg.CouponCode, arg.Mid, arg.Pn, arg.Ps); err != nil {
log.Error("s.dao.SearchList(%v) error(%+v)", arg, err)
}
return
}

View File

@@ -0,0 +1,606 @@
package service
import (
"context"
"errors"
"fmt"
"net"
"time"
"go-common/app/admin/main/activity/model"
tagmdl "go-common/app/interface/main/tag/model"
artmdl "go-common/app/interface/openplatform/article/model"
acccli "go-common/app/service/main/account/api"
arcmdl "go-common/app/service/main/archive/api"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
"go-common/library/sync/errgroup"
xtime "go-common/library/time"
"go-common/library/xstr"
"github.com/jinzhu/gorm"
)
const (
_approved = 1
_pending = 0
_tagArcType = 3
)
// LikesList .
func (s *Service) LikesList(c context.Context, arg *model.LikesParam) (outRes *model.LikesRes, err error) {
var (
likeSubject *model.ActSubject
list []*model.Like
likeList map[int64]*model.Like
ids, wids, mids []int64
count int64
offset int
)
if likeSubject, err = s.dao.ActSubject(c, arg.Sid); err != nil {
return
}
db := s.DB
db = db.Where("sid = ?", likeSubject.ID)
if len(arg.States) > 0 {
db = db.Where("state in (?)", arg.States)
}
if arg.Mid > 0 {
db = db.Where("mid = ?", arg.Mid)
}
if arg.Wid > 0 {
db = db.Where("wid = ?", arg.Wid)
}
if err = db.Model(model.Like{}).Count(&count).Error; err != nil {
log.Error("db.Model(model.Like{}).Count() arg(%v) error(%v) ", arg, err)
return
}
offset = (arg.Page - 1) * arg.PageSize
if err = db.Offset(offset).Limit(arg.PageSize).Order("id asc").Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("db.Model(model.Like{}).Find() arg(%v) error(%v)", arg, err)
return
}
likeList = make(map[int64]*model.Like, len(list))
ids = make([]int64, 0, len(list))
wids = make([]int64, 0, len(list))
mids = make([]int64, 0, len(list))
for _, val := range list {
ids = append(ids, val.ID)
wids = append(wids, val.Wid)
mids = append(mids, val.Mid)
likeList[val.ID] = val
//like 根据最新的逻辑获取,现在无法获取 todo
likeList[val.ID].Like = 0
}
if len(list) > 0 {
if err = s.GetContent(c, likeSubject.Type, likeList, ids, wids, mids); err != nil {
log.Error("s.GetContent(%d,%v,%v,%v,%v) error(%v)", likeSubject.Type, likeList, ids, mids, wids, err)
return
}
}
outRes = &model.LikesRes{
Likes: likeList,
}
outRes.Size = arg.PageSize
outRes.Num = arg.Page
outRes.Total = count
return
}
// Likes .
func (s *Service) Likes(c context.Context, Sid int64, lids []int64) (likeList map[int64]*model.Like, err error) {
var (
likeSubject *model.ActSubject
like []*model.Like
ids, wids, mids []int64
)
if likeSubject, err = s.dao.ActSubject(c, Sid); err != nil {
return
}
if err = s.DB.Where("id in (?)", lids).Find(&like).Error; err != nil {
log.Error("s.DB.Where(id in (%v)).Find() error(%v)", lids, err)
return
}
likeList = make(map[int64]*model.Like, len(like))
ids = make([]int64, 0, len(like))
wids = make([]int64, 0, len(like))
mids = make([]int64, 0, len(like))
for _, val := range like {
ids = append(ids, val.ID)
wids = append(wids, val.Wid)
mids = append(mids, val.Mid)
likeList[val.ID] = val
//like 根据最新的逻辑获取,现在无法获取 todo
likeList[val.ID].Like = 0
}
if len(like) > 0 {
if err = s.GetContent(c, likeSubject.Type, likeList, ids, wids, mids); err != nil {
log.Error("s.GetContent( %d, %v, %v, %v, %v) error(%v)", likeSubject.Type, likeList, ids, mids, wids, err)
}
}
return
}
// archiveWithTag get archives and tags.
func (s *Service) archiveWithTag(c context.Context, aids []int64, likes map[int64]*model.Like) (err error) {
var (
archives *arcmdl.ArcsReply
arcErr, tagErr error
tags map[int64][]*tagmdl.Tag
ip = metadata.String(c, metadata.RemoteIP)
)
group, errCtx := errgroup.WithContext(c)
group.Go(func() error {
if archives, arcErr = s.arcClient.Arcs(errCtx, &arcmdl.ArcsRequest{Aids: aids}); err != nil {
log.Error("s.arcClient.Arcs(%v, %s) error(%v)", aids, ip, err)
return arcErr
}
return nil
})
group.Go(func() error {
arg := &tagmdl.ArgResTags{Oids: aids, Type: _tagArcType, RealIP: ip}
if tags, tagErr = s.tagRPC.ResTags(errCtx, arg); tagErr != nil {
log.Error("ResTags接口错误 s.tag.ResTag(%+v) error(%v)", arg, tagErr)
return tagErr
}
return nil
})
if err = group.Wait(); err != nil {
return
}
for _, val := range likes {
if val.Wid != 0 {
tem := make(map[string]interface{}, 2)
if arch, ok := archives.Arcs[val.Wid]; ok && arch.IsNormal() {
tem["archives"] = arch
}
if tag, ok := tags[val.Wid]; ok {
temps := make([]string, 0, len(tag))
for _, val := range tag {
temps = append(temps, val.Name)
}
tem["tags"] = temps
}
val.Object = tem
}
}
return
}
// accountAndContent get likecontent and accountinfo .
func (s *Service) accountAndContent(c context.Context, ids []int64, mids []int64, likes map[int64]*model.Like) (err error) {
var (
contents map[int64]*model.LikeContent
accRly *acccli.CardsReply
)
if contents, err = s.dao.GetLikeContent(c, ids); err != nil {
log.Error(" s.dao.GetLikeContent(%v) error(%v)", ids, err)
return
}
if accRly, err = s.accClient.Cards3(c, &acccli.MidsReq{Mids: mids}); err != nil {
log.Error("s.AccountsInfo(%v) error(%v)", mids, err)
return
}
for _, val := range likes {
temp := make(map[string]interface{}, 2)
if cont, ok := contents[val.ID]; ok {
temp["content"] = cont
}
if val.Mid != 0 && accRly != nil {
if acct, ok := accRly.Cards[val.Mid]; ok {
temp["owner"] = map[string]interface{}{
"mid": acct.Mid,
"name": acct.Name,
"face": acct.Face,
"sex": acct.Sex,
"level": acct.Level,
}
}
}
val.Object = temp
}
return
}
// articles .
func (s *Service) articles(c context.Context, wids []int64, likes map[int64]*model.Like) (err error) {
var artiRes map[int64]*artmdl.Meta
if artiRes, err = s.artRPC.ArticleMetas(c, &artmdl.ArgAids{Aids: wids}); err != nil {
log.Error("s.ArticleMetas(%v) error(%v)", wids, err)
return
}
for _, val := range likes {
if val.Wid != 0 {
if v, ok := artiRes[val.Wid]; ok {
val.Object = map[string]interface{}{
"article": v,
}
}
}
}
return
}
// musicsAndAct .
func (s *Service) musicsAndAct(c context.Context, wids, mids []int64, likes map[int64]*model.Like) (err error) {
var (
musics *model.MusicRes
accRly *acccli.CardsReply
ip = metadata.String(c, metadata.RemoteIP)
)
if musics, err = s.dao.Musics(c, wids, ip); err != nil {
log.Error("s.dao.Musics(%v) error(%+v)", wids, err)
return
}
if accRly, err = s.accClient.Cards3(c, &acccli.MidsReq{Mids: mids}); err != nil {
log.Error("s.AccountsInfo(%v) error(%v)", mids, err)
return
}
for _, val := range likes {
temp := make(map[string]interface{}, 2)
if v, ok := musics.Data[val.Wid]; ok {
temp["music"] = v
}
if val.Mid != 0 && accRly != nil {
if acct, ok := accRly.Cards[val.Mid]; ok {
temp["owner"] = map[string]interface{}{
"mid": acct.Mid,
"name": acct.Name,
"face": acct.Face,
"sex": acct.Sex,
"level": acct.Level,
}
}
}
val.Object = temp
}
return
}
// GetContent get act_subjet extensions .
func (s *Service) GetContent(c context.Context, likeSubType int, likes map[int64]*model.Like, ids []int64, wids []int64, mids []int64) (err error) {
switch likeSubType {
case model.PICTURE, model.PICTURELIKE, model.DRAWYOO, model.DRAWYOOLIKE, model.TEXT, model.TEXTLIKE, model.QUESTION:
err = s.accountAndContent(c, ids, mids, likes)
case model.VIDEO, model.VIDEOLIKE, model.ONLINEVOTE, model.VIDEO2, model.PHONEVIDEO, model.SMALLVIDEO:
err = s.archiveWithTag(c, wids, likes)
case model.ARTICLE:
err = s.articles(c, wids, likes)
case model.MUSIC:
err = s.musicsAndAct(c, wids, mids, likes)
default:
err = ecode.RequestErr
}
return
}
// ItemUp .
func (s *Service) ItemUp(c context.Context, sid, wid int64, state int) (likeList *model.Like, err error) {
var likeSubject *model.ActSubject
if likeSubject, err = s.dao.ActSubject(c, sid); err != nil {
log.Error("s.GetLikesSubjectByID(%d) error(%v)", sid, err)
return
}
likeList = new(model.Like)
if err = s.DB.Where("sid =?", likeSubject.ID).Where("wid = ?", wid).Last(likeList).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Model(model.Like{}).Where(sid =? %d).Where(wid = ?, %d).Last(),error(%v)", likeSubject.ID, wid, err)
return
}
if likeList.ID == 0 {
err = nil
return
}
likeList.State = state
likeList.Mtime = xtime.Time(time.Now().Unix())
if err = s.DB.Model(&model.Like{}).Where("id =?", likeList.ID).Update(map[string]interface{}{"state": state, "mtime": likeList.Mtime.Time().Format("2006-01-02 15:04:05")}).Error; err != nil {
log.Error("s.DB.Model(&model.Like{}).Where(id =?, %d).Update() error(%v) ", likeList.ID, err)
}
return
}
// ItemAdd .
func (s *Service) ItemAdd(c context.Context, args *model.AddLikes) (likeList *model.Like, err error) {
var (
likeSubject *model.ActSubject
ip = metadata.String(c, metadata.RemoteIP)
)
if likeSubject, err = s.dao.ActSubject(c, args.Sid); err != nil {
log.Error(" s.GetLikesSubjectByID(%d) error(%v) ", args.Sid, err)
return
}
//怀疑原代码这里是个bug todo
if args.Type != likeSubject.Type {
err = errors.New("ItemAdd params liketype error")
return
}
likeList = new(model.Like)
if err = s.DB.Where("sid =?", likeSubject.ID).Where("wid = ?", args.Wid).Last(likeList).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Model(model.Like{}).Where(sid =?, %d).Where(wid = ?, %d).Last() error(%v)", likeSubject.ID, args.Wid, err)
return
}
if err == gorm.ErrRecordNotFound {
addLike := &model.Like{
Type: args.Type,
Wid: args.Wid,
Sid: likeSubject.ID,
Mid: args.Mid,
State: args.State,
}
ipv6 := net.ParseIP(ip)
if ipv6 == nil {
ipv6 = []byte{}
}
addLikeContent := &model.LikeContent{
Plat: args.Plat,
Device: args.Device,
Message: "no",
Image: "no",
IPv6: ipv6,
}
tx := s.DB.Begin()
if err = tx.Create(addLike).Error; err != nil {
log.Error("db.Model(&model.Like{}).Create(%v) error(%v)", addLike, err)
tx.Rollback()
return
}
addLikeContent.ID = addLike.ID
if err = tx.Create(addLikeContent).Error; err != nil {
log.Error("db.Model(&model.LikeContent{}).Create(%v) error(%v)\n", addLikeContent, err)
tx.Rollback()
return
}
tx.Commit()
likeList = addLike
} else {
likeList.State = args.State
likeList.Mtime = xtime.Time(time.Now().Unix())
if err = s.DB.Model(&model.Like{}).Where("id =?", likeList.ID).Update(map[string]interface{}{"state": args.State, "mtime": likeList.Mtime.Time().Format("2006-01-02 15:04:05")}).Error; err != nil {
log.Error("s.DB.Model(&model.Like{}).Where(id =?, %d).Update() error(%v) ", likeList.ID, err)
}
}
return
}
// AddPicContent .
func (s *Service) AddPicContent(c context.Context, args *model.AddPic) (likeID int64, err error) {
var (
likeSubject *model.ActSubject
ip = metadata.String(c, metadata.RemoteIP)
)
if likeSubject, err = s.dao.ActSubject(c, args.Sid); err != nil {
log.Error(" s.GetLikesSubjectByID(%d) error(%v) ", args.Sid, err)
return
}
likes := &model.Like{
Sid: likeSubject.ID,
Wid: args.Wid,
Type: args.Type,
Mid: args.Mid,
State: _pending,
}
ipv6 := net.ParseIP(ip)
if ipv6 == nil {
ipv6 = []byte{}
}
likeContent := &model.LikeContent{
IPv6: ipv6,
Plat: args.Plat,
Device: args.Device,
Message: args.Message,
Link: args.Link,
Image: args.Image, //只支持传image串需要支持传文件todo
}
tx := s.DB.Begin()
if err = tx.Create(likes).Error; err != nil {
log.Error("db.Model(&model.Like{}).Create(%v) error(%v)", likes, err)
tx.Rollback()
return
}
likeContent.ID = likes.ID
if err = tx.Create(likeContent).Error; err != nil {
log.Error("db.Model(&model.LikeContent{}).Create(%v) error(%v)\n", likeContent, err)
tx.Rollback()
return
}
tx.Commit()
likeID = likes.ID // need to update todo
return
}
// BatchLikes .
func (s *Service) BatchLikes(c context.Context, args *model.BatchLike) (err error) {
var (
likes []*model.Like
likeMap map[int64]*model.Like
addWid []int64
ipv6 = net.ParseIP(metadata.String(c, metadata.RemoteIP))
)
if ipv6 == nil {
ipv6 = []byte{}
}
if err = s.DB.Where(fmt.Sprintf("sid = ? and wid in (%s)", xstr.JoinInts(args.Wid)), args.Sid).Find(&likes).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Where(%d,%v) error(%v)", args.Sid, args.Wid, err)
return
}
if err == gorm.ErrRecordNotFound {
addWid = args.Wid
} else {
likeMap = make(map[int64]*model.Like, len(likes))
for _, v := range likes {
likeMap[v.Wid] = v
}
addWid = make([]int64, 0, len(args.Wid))
for _, v := range args.Wid {
if _, ok := likeMap[v]; !ok {
addWid = append(addWid, v)
}
}
}
if len(addWid) == 0 {
return
}
item := &model.Like{
Sid: args.Sid,
Mid: args.Mid,
Type: args.Type,
State: _pending,
}
if err = s.dao.BatchLike(c, item, addWid, ipv6); err != nil {
log.Error("s.dao.BatchLike(%v) error(%+v)", addWid, err)
}
return
}
// VideoAdd .
func (s *Service) VideoAdd(c context.Context, args *model.AddLikes) (likeList *model.Like, err error) {
var (
likeSubject *model.ActSubject
ip = metadata.String(c, metadata.RemoteIP)
)
if likeSubject, err = s.dao.ActSubject(c, args.Sid); err != nil {
log.Error("s.dao.ActSubject(%d) error(%v) ", args.Sid, err)
return
}
if likeSubject.Type != model.VIDEO && likeSubject.Type != model.VIDEOLIKE && likeSubject.Type != model.VIDEO2 {
err = errors.New("VideoAdd params liketype error")
return
}
likeList = new(model.Like)
if err = s.DB.Where("sid =?", likeSubject.ID).Where("wid = ?", args.Wid).Last(likeList).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Model(&model.Like{}).Where(sid =?, %d).Where(wid = ?, %d).Last() error(%v)", likeSubject.ID, args.Wid, err)
return
}
if err == gorm.ErrRecordNotFound {
addLike := &model.Like{
Type: args.Type,
Wid: args.Wid,
Sid: likeSubject.ID,
Mid: args.Mid,
State: _approved,
}
ipv6 := net.ParseIP(ip)
if ipv6 == nil {
ipv6 = []byte{}
}
addLikeContent := &model.LikeContent{
IPv6: ipv6,
Plat: args.Plat,
Device: args.Device,
Message: "no",
Image: "no",
}
tx := s.DB.Begin()
if err = tx.Create(addLike).Error; err != nil {
log.Error("db.Model(&model.Like{}).Create(%v) error(%v)", addLike, err)
tx.Rollback()
return
}
addLikeContent.ID = addLike.ID
if err = tx.Create(addLikeContent).Error; err != nil {
log.Error("tx.Model(&model.LikeContent{}).Create(%v) error(%v)", addLikeContent, err)
tx.Rollback()
return
}
tx.Commit()
likeList = addLike
} else {
likeList.State = _approved
likeList.Mtime = xtime.Time(time.Now().Unix())
if err = s.DB.Model(&model.Like{}).Where("id =?", likeList.ID).Update(map[string]interface{}{"state": _approved, "mtime": likeList.Mtime.Time().Format("2006-01-02 15:04:05")}).Error; err != nil {
log.Error("ls.DB.Model(&model.Like{}).Where(id =?, %d).Update() error(%v) ", likeList.ID, err)
}
}
return
}
// UpLikesState .
func (s *Service) UpLikesState(c context.Context, IDs []int64, state int, reply string, username string) (err error) {
if err = s.DB.Model(&model.Like{}).Where("id in (?)", xstr.JoinInts(IDs)).Update(map[string]interface{}{"state": state}).Error; err != nil {
log.Info("s.DB.Model(&model.Like{}).Where(id = ?,%d).Update() error(%v)", IDs, err)
return
}
if reply != "" {
s.DB.Model(&model.LikeContent{}).Where("id in (?)", xstr.JoinInts(IDs)).Update(map[string]interface{}{"reply": reply})
}
if state != 0 {
for _, v := range IDs {
likeLog := &model.ActLikeLog{
Lid: v,
User: username,
State: int64(state),
}
s.DB.Create(likeLog)
}
}
return
}
// UpLike .
func (s *Service) UpLike(c context.Context, args *model.UpLike, username string) (res int64, err error) {
likes := map[string]interface{}{
"Type": args.Type,
"Mid": args.Mid,
"Wid": args.Wid,
"State": args.State,
"StickTop": args.StickTop,
}
if err = s.DB.Model(model.Like{}).Where("id = ?", args.Lid).Update(likes).Error; err != nil {
log.Error("s.DB.Model(model.Like{}).Where(id = ?, %d).Update() error(%v)", args.Lid, err)
return
}
likeContent := map[string]interface{}{
"Message": args.Message,
"Reply": args.Reply,
"Link": args.Link,
"Image": args.Image,
}
if err = s.DB.Model(model.LikeContent{}).Where("id = ?", args.Lid).Update(likeContent).Error; err != nil {
log.Error("s.DB.Model(model.LikeContent{}).Where(id = ?,%d).Update() error(%v)", args.Lid, err)
return
}
if args.State != 0 {
likeLog := &model.ActLikeLog{
Lid: args.Lid,
User: username,
State: int64(args.State),
}
s.DB.Create(likeLog)
}
res = args.Lid
return
}
// AddLike .
func (s *Service) AddLike(c context.Context, args *model.AddLikes) (likesRes *model.Like, err error) {
switch args.DealType {
case "itemUp":
likesRes, err = s.ItemUp(c, args.Sid, args.Wid, args.State)
case "itemAdd":
likesRes, err = s.ItemAdd(c, args)
case "videoAdd":
likesRes, err = s.VideoAdd(c, args)
default:
err = errors.New("type error")
}
return
}
// UpWid .
func (s *Service) UpWid(c context.Context, args *model.UpWid) (err error) {
var (
subject *model.ActSubject
)
if subject, err = s.dao.ActSubject(c, args.Sid); err != nil {
return
}
like := map[string]interface{}{
"state": args.State,
"mtime": xtime.Time(time.Now().Unix()),
}
if err := s.DB.Model(&model.Like{}).Where("sid = ? and wid = ?", subject.ID, args.Wid).Update(like).Limit(1).Error; err != nil {
log.Error("actSrv.DB.Where(sid = %d and wid = %d).Update().Limit(1) error(%v)", subject.ID, args.Wid, err)
}
return
}

View File

@@ -0,0 +1,53 @@
package service
import (
"context"
"fmt"
"go-common/app/admin/main/activity/model"
"testing"
. "github.com/smartystreets/goconvey/convey"
)
func TestService_LikesByLid(t *testing.T) {
Convey("like get items", t, WithService(func(s *Service) {
res, err := s.LikesList(context.Background(), &model.LikesParam{Sid: 10256, PageSize: 10, Page: 1, Mid: 155551800, States: []int{0, 1}})
So(err, ShouldBeEmpty)
for _, v := range res.Likes {
fmt.Printf("%+v", v)
}
}))
}
func TestService_Likes(t *testing.T) {
Convey("like get items", t, WithService(func(s *Service) {
res, err := s.Likes(context.Background(), 10256, []int64{1185, 1256})
So(err, ShouldBeEmpty)
for _, v := range res {
fmt.Printf("%+v", v)
}
}))
}
func TestService_UpLike(t *testing.T) {
Convey("like get items", t, WithService(func(s *Service) {
res, err := s.AddLike(context.Background(), &model.AddLikes{DealType: "videoAdd", Sid: 10206, Wid: 10210488, Mid: 88895364, Device: 11, Plat: 12, State: 1, Type: 12})
So(err, ShouldBeEmpty)
fmt.Printf("%+v", res)
}))
}
func TestService_UpLikeContents(t *testing.T) {
Convey("like get items", t, WithService(func(s *Service) {
res, err := s.UpLike(context.Background(), &model.UpLike{Lid: 13557, Type: 13, State: 1, Message: "ii", Reply: "nono", Image: "jj", Link: "like", Mid: 12345, Wid: 12367, StickTop: 1}, "ly")
So(err, ShouldBeEmpty)
fmt.Printf("%+v", res)
}))
}
func TestService_BatchLikes(t *testing.T) {
Convey("like get items", t, WithService(func(s *Service) {
err := s.BatchLikes(context.Background(), &model.BatchLike{Sid: 10299, Type: 13, Mid: 12345, Wid: []int64{1, 4, 5, 6, 7}})
So(err, ShouldBeEmpty)
}))
}

View File

@@ -0,0 +1,56 @@
package service
import (
"context"
"go-common/app/admin/main/activity/conf"
"go-common/app/admin/main/activity/dao"
tagrpc "go-common/app/interface/main/tag/rpc/client"
artrpc "go-common/app/interface/openplatform/article/rpc/client"
acccli "go-common/app/service/main/account/api"
arcclient "go-common/app/service/main/archive/api"
"github.com/jinzhu/gorm"
)
// Service biz service def.
type Service struct {
c *conf.Config
dao *dao.Dao
DB *gorm.DB
accClient acccli.AccountClient
tagRPC *tagrpc.Service
artRPC *artrpc.Service
arcClient arcclient.ArchiveClient
}
// New new a Service and return.
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
dao: dao.New(c),
tagRPC: tagrpc.New2(c.TagRPC),
artRPC: artrpc.New(c.ArticlrRPC),
}
s.DB = s.dao.DB
var err error
if s.arcClient, err = arcclient.NewClient(c.ArcClient); err != nil {
panic(err)
}
if s.accClient, err = acccli.NewClient(c.AccClient); err != nil {
panic(err)
}
return s
}
// Ping check dao health.
func (s *Service) Ping(c context.Context) (err error) {
return s.dao.Ping(c)
}
// Wait wait all closed.
func (s *Service) Wait() {}
// Close close all dao.
func (s *Service) Close() {
s.dao.Close()
}

View File

@@ -0,0 +1,36 @@
package service
import (
"flag"
"path/filepath"
"testing"
"time"
"go-common/app/admin/main/activity/conf"
. "github.com/smartystreets/goconvey/convey"
)
var svr *Service
func init() {
dir, _ := filepath.Abs("../cmd/activity-admin-test.toml")
flag.Set("conf", dir)
conf.Init()
svr = New(conf.Conf)
time.Sleep(time.Second)
}
func WithService(f func(s *Service)) func() {
return func() {
Reset(func() {})
f(svr)
}
}
func Test_Service(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
s.Wait()
s.Close()
}))
}

View File

@@ -0,0 +1,307 @@
package service
import (
"context"
"time"
"go-common/app/admin/main/activity/model"
articlemodel "go-common/app/interface/openplatform/article/model"
"go-common/library/log"
"go-common/library/net/metadata"
"github.com/jinzhu/gorm"
)
// GetArticleMetas from rpc .
func (s *Service) GetArticleMetas(c context.Context, aids []int64) (res map[int64]*articlemodel.Meta, err error) {
if res, err = s.artRPC.ArticleMetas(c, &articlemodel.ArgAids{Aids: aids}); err != nil {
log.Error("s.ArticleMetas(%v) error(%v)", aids, err)
}
return
}
// SubjectList get subject list .
func (s *Service) SubjectList(c context.Context, listParams *model.ListSub) (listRes *model.SubListRes, err error) {
var (
count int64
list []*model.ActSubject
)
db := s.DB
if listParams.Keyword != "" {
names := listParams.Keyword + "%"
db = db.Where("`id` = ? or `name` like ? or `author` like ?", listParams.Keyword, names, names)
}
if listParams.Sctime != 0 {
parseScime := time.Unix(listParams.Sctime, 0)
db = db.Where("ctime >= ?", parseScime.Format("2006-01-02 15:04:05"))
}
if listParams.Ectime != 0 {
parseEcime := time.Unix(listParams.Ectime, 0)
db = db.Where("etime <= ?", parseEcime.Format("2006-01-02 15:04:05"))
}
if len(listParams.States) > 0 {
db = db.Where("state in (?)", listParams.States)
}
if len(listParams.Types) > 0 {
db = db.Where("type in (?)", listParams.Types)
}
if err = db.Offset((listParams.Page - 1) * listParams.PageSize).Limit(listParams.PageSize).Order("id desc").Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error(" db.Model(&model.ActSubject{}).Find() args(%v) error(%v)", listParams, err)
return
}
if err = db.Model(&model.ActSubject{}).Count(&count).Error; err != nil {
log.Error("db.Model(&model.ActSubject{}).Count() args(%v) error(%v)", listParams, err)
return
}
listRes = &model.SubListRes{
List: list,
Page: &model.PageRes{
Num: listParams.Page,
Size: listParams.PageSize,
Total: count,
},
}
return
}
// VideoList .
func (s *Service) VideoList(c context.Context) (res []*model.ActSubjectResult, err error) {
var (
types = []int{1, 4}
list []*model.ActSubject
likeList []*model.Like
)
db := s.DB
if err = db.Where("state = ?", 1).Where("type in (?)", types).Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("db.Model(&model.ActSubject{}).Where(state = ?, 1).Where(type in (?), %v).Find() error(%v)", types, err)
return
}
listCount := len(list)
if listCount == 0 {
return
}
sids := make([]int64, 0, listCount)
for _, value := range list {
sids = append(sids, value.ID)
}
if err = db.Where("sid in (?)", sids).Where("wid > ?", 0).Find(&likeList).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("db.Model(&model.Like{}).Where(sid in (?), %v).Find() error(%v)", sids, err)
return
}
hashList := make(map[int64][]int64)
for _, value := range likeList {
hashList[value.Sid] = append(hashList[value.Sid], value.Wid)
}
res = make([]*model.ActSubjectResult, 0, len(list))
for _, value := range list {
rs := &model.ActSubjectResult{
ActSubject: value,
}
if v, ok := hashList[value.ID]; ok {
rs.Aids = v
}
res = append(res, rs)
}
return
}
// AddActSubject .
func (s *Service) AddActSubject(c context.Context, params *model.AddList) (res int64, err error) {
if params.ScreenSet != 2 {
params.ScreenSet = 1
}
protect := &model.ActSubjectProtocol{
Protocol: params.Protocol,
Types: params.Types,
Pubtime: params.Pubtime,
Deltime: params.Deltime,
Editime: params.Editime,
Tags: params.Tags,
Hot: params.Hot,
BgmID: params.BgmID,
Oids: params.Oids,
ScreenSet: params.ScreenSet,
PasterID: params.PasterID,
}
actTime := &model.ActTimeConfig{
Interval: params.Interval,
Tlimit: params.Tlimit,
Ltime: params.Ltime,
}
if params.Tags != "" {
if err = s.dao.AddTags(c, params.Tags, metadata.String(c, metadata.RemoteIP)); err != nil {
log.Error("s.AddTags(%s,) error(%v)", params.Tags, err)
return
}
}
actSub := &model.ActSubject{
Oid: params.ActSubject.Oid,
Type: params.ActSubject.Type,
State: params.ActSubject.State,
Level: params.ActSubject.Level,
Flag: params.ActSubject.Flag,
Rank: params.ActSubject.Rank,
Stime: params.ActSubject.Stime,
Etime: params.ActSubject.Etime,
Lstime: params.ActSubject.Lstime,
Letime: params.ActSubject.Letime,
Uetime: params.ActSubject.Uetime,
Ustime: params.ActSubject.Ustime,
Name: params.ActSubject.Name,
Author: params.ActSubject.Author,
ActURL: params.ActSubject.ActURL,
Cover: params.ActSubject.Cover,
Dic: params.ActSubject.Dic,
H5Cover: params.ActSubject.H5Cover,
LikeLimit: params.ActSubject.LikeLimit,
AndroidURL: params.ActSubject.AndroidURL,
IosURL: params.ActSubject.IosURL,
}
if err = s.DB.Create(actSub).Error; err != nil {
log.Error("s.DB.Create(%v) error(%v)", actSub, err)
return
}
protect.Sid = actSub.ID
if err = s.DB.Create(protect).Error; err != nil {
log.Error("s.DB.Create(%v) error(%v)", protect, err)
return
}
if params.Type == model.ONLINEVOTE {
actTime.Sid = actSub.ID
if err = s.DB.Create(actTime).Error; err != nil {
log.Error("s.DB.Create(%v) error(%v)", actTime, err)
return
}
}
res = actSub.ID
return
}
// UpActSubject .
func (s *Service) UpActSubject(c context.Context, params *model.AddList, sid int64) (res int64, err error) {
if params.ScreenSet != 2 {
params.ScreenSet = 1
}
onlineData := &model.ActTimeConfig{
Interval: params.Interval,
Tlimit: params.Tlimit,
Ltime: params.Ltime,
}
actSubject := new(model.ActSubject)
if err = s.DB.Where("id = ?", sid).Last(actSubject).Error; err != nil {
log.Error("s.DB.Where(id = ?, %d).Last(%v) error(%v)", sid, actSubject, err)
return
}
data := map[string]interface{}{
"Oid": params.Oid,
"Type": params.Type,
"State": params.State,
"Level": params.Level,
"Flag": params.Flag,
"Rank": params.Rank,
"Stime": params.Stime,
"Etime": params.Etime,
"Lstime": params.Lstime,
"Uetime": params.Uetime,
"Ustime": params.Ustime,
"Name": params.Name,
"Author": params.Author,
"ActURL": params.ActURL,
"Cover": params.Cover,
"Dic": params.Dic,
"H5Cover": params.H5Cover,
"LikeLimit": params.LikeLimit,
"AndroidURL": params.AndroidURL,
"IosURL": params.IosURL,
}
if err = s.DB.Model(&model.ActSubject{}).Where("id = ?", sid).Update(data).Error; err != nil {
log.Error("s.DB.Model(&model.ActSubject{}).Where(id = ?, %d).Update(%v) error(%v)", sid, data, err)
return
}
item := new(model.ActSubjectProtocol)
if err = s.DB.Where("sid = ? ", sid).Last(item).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Where(sid = ? , %d).Last(%v) error(%v)", sid, item, err)
return
}
//item有值
if item.ID > 0 {
if params.Tags != "" {
if item.Tags != params.Tags {
if err = s.dao.AddTags(c, params.Tags, metadata.String(c, metadata.RemoteIP)); err != nil {
log.Error("s.AddTags(%s) error(%v)", params.Tags, err)
return
}
}
}
upProtectData := map[string]interface{}{
"Protocol": params.Protocol,
"Types": params.Types,
"Pubtime": params.Pubtime,
"Deltime": params.Deltime,
"Editime": params.Editime,
"Hot": params.Hot,
"BgmID": params.BgmID,
"Oids": params.Oids,
"ScreenSet": params.ScreenSet,
"PasterID": params.PasterID,
"Tags": params.Tags,
}
if err = s.DB.Model(&model.ActSubjectProtocol{}).Where("id = ?", item.ID).Update(upProtectData).Error; err != nil {
log.Error("s.DB.Model(&model.ActSubjectProtocol{}).Where(id = ?, %d).Update(%v) error(%v)", item.ID, upProtectData, err)
return
}
} else {
protectDtata := &model.ActSubjectProtocol{
Protocol: params.Protocol,
Types: params.Types,
Pubtime: params.Pubtime,
Deltime: params.Deltime,
Editime: params.Editime,
Hot: params.Hot,
BgmID: params.BgmID,
Oids: params.Oids,
ScreenSet: params.ScreenSet,
PasterID: params.PasterID,
Sid: sid,
}
if err = s.DB.Create(protectDtata).Error; err != nil {
log.Error("s.DB.Create(%v) error(%v)", protectDtata, err)
return
}
}
if actSubject.Type == model.ONLINEVOTE {
onlineData.Sid = sid
output := new(model.ActTimeConfig)
if err = s.DB.Where("sid = ?", sid).Last(output).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Where(sid = ?, %d).Last(%v) error(%v)", sid, output, err)
return
}
if output.ID > 0 {
if err = s.DB.Model(&model.ActTimeConfig{}).Where("id = ?", output.ID).Update(onlineData).Error; err != nil {
log.Error("s.DB.Model(&model.ActTimeConfig{}).Where(id = ?, %d).Update(%v) error(%v)", output.ID, onlineData, err)
return
}
}
}
res = sid
return
}
// SubProtocol .
func (s *Service) SubProtocol(c context.Context, sid int64) (res *model.ActSubjectProtocol, err error) {
res = &model.ActSubjectProtocol{}
if err = s.DB.Where("sid = ?", sid).First(res).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("s.DB.Where(sid = %d ) error(%v)", sid, err)
}
return
}
// TimeConf .
func (s *Service) TimeConf(c context.Context, sid int64) (res *model.ActTimeConfig, err error) {
res = new(model.ActTimeConfig)
if err = s.DB.Where("sid = ?", sid).First(res).Error; err != nil && err != gorm.ErrRecordNotFound {
log.Error("actSrv.DB.Where(sid = ?, %d) error(%v)", sid, err)
}
return
}

View File

@@ -0,0 +1,166 @@
package service
import (
"context"
"fmt"
"testing"
"go-common/app/admin/main/activity/model"
xtime "go-common/library/time"
"time"
. "github.com/smartystreets/goconvey/convey"
)
func TestService_SubjectList(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
p := &model.ListSub{
Page: 1,
PageSize: 15,
Keyword: "layang123",
States: []int{1},
Types: []int{18},
Sctime: 1534835169,
Ectime: 1546272001,
}
list, err := s.SubjectList(context.Background(), p)
So(err, ShouldBeNil)
for _, v := range list.List {
fmt.Printf("%+v", v)
}
}))
}
func TestService_VideoList(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
list, err := s.VideoList(context.Background())
So(err, ShouldBeNil)
for _, v := range list {
fmt.Printf("%+v %+v", v.ActSubject, v.Aids)
}
}))
}
func TestService_AddActSubject(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
p := &model.AddList{
ActSubject: model.ActSubject{
Oid: 11,
Type: 9,
State: 1,
Level: 5,
Rank: 100,
Stime: xtime.Time(time.Now().Unix()),
Etime: xtime.Time(time.Now().Unix()),
Ctime: xtime.Time(time.Now().Unix()),
Mtime: xtime.Time(time.Now().Unix()),
Lstime: xtime.Time(time.Now().Unix()),
Letime: xtime.Time(time.Now().Unix()),
Uetime: xtime.Time(time.Now().Unix()),
Ustime: xtime.Time(time.Now().Unix()),
Name: "test one",
Author: "layang",
ActURL: "http://www.baidu.com/",
Cover: "cover",
Flag: 128,
Dic: "dif",
H5Cover: "H5Cover",
LikeLimit: 5,
AndroidURL: "AndroidURL",
IosURL: "IosURL",
},
Protocol: "Protocol",
Types: "1,2,3",
Pubtime: xtime.Time(time.Now().Unix()),
Deltime: xtime.Time(time.Now().Unix()),
Editime: xtime.Time(time.Now().Unix()),
Tags: "由三",
Interval: 1,
Tlimit: 123,
Ltime: 124,
Hot: 1,
BgmID: 3,
PasterID: 4,
Oids: "5,7,8",
ScreenSet: 1,
}
res, err := s.AddActSubject(context.Background(), p)
So(err, ShouldBeNil)
fmt.Printf("%d", res)
}))
}
func TestService_UpActSubject(t *testing.T) {
Convey("service test", t, WithService(func(s *Service) {
p := &model.AddList{
ActSubject: model.ActSubject{
Oid: 12,
Type: 9,
State: 0,
Level: 6,
Rank: 101,
Stime: xtime.Time(time.Now().Unix()),
Etime: xtime.Time(time.Now().Unix()),
Ctime: xtime.Time(time.Now().Unix()),
Mtime: xtime.Time(time.Now().Unix()),
Lstime: xtime.Time(time.Now().Unix()),
Letime: xtime.Time(time.Now().Unix()),
Uetime: xtime.Time(time.Now().Unix()),
Ustime: xtime.Time(time.Now().Unix()),
Name: "test two",
Author: "layang2",
ActURL: "http://www.baidu.com/2",
Cover: "cover2",
Flag: 129,
Dic: "dif2",
H5Cover: "H5Cover2",
LikeLimit: 6,
AndroidURL: "AndroidURL2",
IosURL: "IosURL2",
},
Protocol: "Protocol2",
Types: "1,2,3,4",
Pubtime: xtime.Time(time.Now().Unix()),
Deltime: xtime.Time(time.Now().Unix()),
Editime: xtime.Time(time.Now().Unix()),
Tags: "由三2",
Interval: 2,
Tlimit: 124,
Ltime: 125,
Hot: 0,
BgmID: 4,
PasterID: 8,
Oids: "5,7,8.9",
ScreenSet: 2,
}
res, err := s.UpActSubject(context.Background(), p, 10298)
So(err, ShouldBeNil)
fmt.Printf("%+v", res)
}))
}
func TestService_SubProtocol(t *testing.T) {
Convey("sub protovol ", t, WithService(func(s *Service) {
list, err := s.SubProtocol(context.Background(), 10256)
So(err, ShouldBeNil)
fmt.Printf("%+v", list)
}))
}
func TestService_TimeConf(t *testing.T) {
Convey("sub TimeConf ", t, WithService(func(s *Service) {
list, err := s.TimeConf(context.Background(), 10298)
So(err, ShouldBeNil)
fmt.Printf("%+v", list)
}))
}
func TestService_GetArticleMetas(t *testing.T) {
Convey("sub TimeConf ", t, WithService(func(s *Service) {
list, err := s.GetArticleMetas(context.Background(), []int64{1412})
So(err, ShouldBeNil)
fmt.Printf("%+v", list)
}))
}