112 lines
2.9 KiB
Go
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
|
|
}
|