go-common/app/interface/main/app-view/dao/act/dao.go
2019-04-22 18:49:16 +08:00

112 lines
2.9 KiB
Go

package act
import (
"context"
"net/url"
"strconv"
actmdl "go-common/app/interface/main/activity/model/like"
actrpc "go-common/app/interface/main/activity/rpc/client"
"go-common/app/interface/main/app-view/conf"
"go-common/library/ecode"
httpx "go-common/library/net/http/blademaster"
"github.com/pkg/errors"
)
const (
_actInfo = "/matsuri/api/get/videoviewinfo"
_lotteryTimes = "/matsuri/api/get/act/mylotterytimes"
)
// Dao is elec dao.
type Dao struct {
client *httpx.Client
actInfo string
lotteryTimes string
actRPC *actrpc.Service
}
// New elec dao
func New(c *conf.Config) (d *Dao) {
d = &Dao{
client: httpx.NewClient(c.HTTPClient),
actInfo: c.Host.Activity + _actInfo,
lotteryTimes: c.Host.Activity + _lotteryTimes,
actRPC: actrpc.New(c.ActivityRPC),
}
return
}
var _emptyList = []string{}
// Info mid+aid total elec info
func (d *Dao) Info(c context.Context, actID int64, randomCnt int64) (gifts, winners []string, err error) {
var res struct {
Code int `json:"code"`
Data struct {
Gifts []struct {
Img string `json:"sponsors_logo"`
} `json:"gifts"`
Winner []struct {
Gift string `json:"gift"`
UName string `json:"uname"`
} `json:"winner"`
} `json:"data"`
}
params := url.Values{}
params.Set("act_id", strconv.FormatInt(actID, 10))
params.Set("random_count", strconv.FormatInt(randomCnt, 10))
if err = d.client.Get(c, d.actInfo, "", params, &res); err != nil {
err = errors.Wrapf(err, "d.client.Get(%s)", d.actInfo+"?"+params.Encode())
return _emptyList, _emptyList, err
}
if res.Code != ecode.OK.Code() {
err = errors.Wrapf(ecode.Int(res.Code), "d.client.Get(%s)", d.actInfo+"?"+params.Encode())
return _emptyList, _emptyList, err
}
for _, v := range res.Data.Gifts {
gifts = append(gifts, v.Img)
}
for _, v := range res.Data.Winner {
winners = append(winners, v.UName+" 抽到了 "+v.Gift)
}
if gifts == nil {
gifts = _emptyList
}
if winners == nil {
winners = _emptyList
}
return
}
// LeftLotteryTimes 剩余抽奖次数
func (d *Dao) LeftLotteryTimes(c context.Context, actID, mid int64) (times int64, err error) {
var res struct {
Code int `json:"code"`
Data struct {
Times int64 `json:"times"`
} `json:"data"`
}
params := url.Values{}
params.Set("act_id", strconv.FormatInt(actID, 10))
params.Set("mid", strconv.FormatInt(mid, 10))
if err = d.client.Get(c, d.lotteryTimes, "", params, &res); err != nil {
err = errors.Wrapf(err, "d.client.Get(%s)", d.lotteryTimes+"?"+params.Encode())
return
}
if res.Code != ecode.OK.Code() {
err = errors.Wrapf(ecode.Int(res.Code), "d.client.Get(%s)", d.lotteryTimes+"?"+params.Encode())
return
}
times = res.Data.Times
return
}
// ActProtocol get act subject & protocol
func (d *Dao) ActProtocol(c context.Context, messionID int64) (protocol *actmdl.SubProtocol, err error) {
arg := &actmdl.ArgActProtocol{Sid: messionID}
protocol, err = d.actRPC.ActProtocol(c, arg)
return
}