You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.9 KiB
111 lines
2.9 KiB
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 |
|
}
|
|
|