bilibili-backup/app/service/main/tv/internal/dao/yst.go
2019-04-22 02:59:20 +00:00

128 lines
3.4 KiB
Go

package dao
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
"go-common/app/service/main/tv/internal/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
const (
ystUrl = "https://%s/%s"
ystCreateOrderPath = "getBiliOrder"
ystRenewOrderPath = "papPayApply"
ystOrderStatePath = "getBiliOrderState"
)
// YstClient represents http client for sending requests to yst.
type YstClient struct {
cli *bm.Client
}
// NewYstClient news a yst client.
func NewYstClient(cli *bm.Client) *YstClient {
return &YstClient{cli: cli}
}
// Post sends one post request.
func (yc *YstClient) Post(c context.Context, uri string, data interface{}, res interface{}) error {
req, err := yc.NewRequest(uri, data)
if err != nil {
return err
}
return yc.cli.Do(c, req, res)
}
// NewRequest news a post request.
func (yc *YstClient) NewRequest(uri string, data interface{}) (request *http.Request, err error) {
var dataBytes []byte
dataBytes, err = json.Marshal(data)
if err != nil {
return
}
request, err = http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(dataBytes))
if err != nil {
return
}
request.Header.Set("Content-Type", "application/json")
return request, nil
}
func resultCode2err(code string) error {
switch code {
case model.YstResultFail:
return ecode.TVIPYstRequestErr
case model.YstResultSysErr:
return ecode.TVIPYstSystemErr
default:
return ecode.TVIPYstUnknownErr
}
}
// CreateYstOrder creates one yst order.
func (d *Dao) CreateYstOrder(c context.Context, req *model.YstCreateOrderReq) (res *model.YstCreateOrderReply, err error) {
req.Sign, err = d.signer.Sign(req)
if err != nil {
return
}
res = &model.YstCreateOrderReply{}
uri := fmt.Sprintf(ystUrl, d.c.YST.Domain, ystCreateOrderPath)
if err = d.ystCli.Post(c, uri, req, res); err != nil {
log.Error("d.ystCli.Post(%s, %+v) err(%+v)", uri, req, err)
return
}
if res.ResultCode != model.YstResultSuccess {
log.Error("d.ystCli.Post(%s, %+v) res(%+v)", uri, req, res)
return nil, resultCode2err(res.ResultCode)
}
log.Info("dao.CreateYstOrder(%+v) res(%+v)", req, res)
return
}
// RenewYstOrder creates one renew order.
func (d *Dao) RenewYstOrder(c context.Context, req *model.YstRenewOrderReq) (res *model.YstRenewOrderReply, err error) {
req.Sign, err = d.signer.Sign(req)
if err != nil {
return
}
res = &model.YstRenewOrderReply{}
uri := fmt.Sprintf(ystUrl, d.c.YST.Domain, ystRenewOrderPath)
if err = d.ystCli.Post(c, uri, req, res); err != nil {
log.Error("d.ystCli.Post(%s, %+v) err(%+v)", uri, req, err)
return
}
if res.ResultCode != model.YstResultSuccess {
log.Error("d.ystCli.Post(%s, %+v) res(%+v)", uri, req, res)
return nil, resultCode2err(res.ResultCode)
}
log.Info("dao.RenewYstOrder(%+v) res(%+v)", req, res)
return
}
// YstOrderState queries order details from yst.
func (d *Dao) YstOrderState(c context.Context, req *model.YstOrderStateReq) (res *model.YstOrderStateReply, err error) {
req.Sign, err = d.signer.Sign(req)
if err != nil {
return
}
res = &model.YstOrderStateReply{}
uri := fmt.Sprintf(ystUrl, d.c.YST.Domain, ystOrderStatePath)
if err = d.ystCli.Post(c, uri, req, res); err != nil {
log.Error("d.ystCli.Post(%s, %+v) err(%+v)", uri, req, err)
return
}
if res.Result != model.YstResultSuccess {
log.Error("d.ystCli.Post(%s, %+v) res(%+v)", uri, req, res)
return nil, resultCode2err(res.Result)
}
log.Info("dao.YstOrderState(%+v) res(%+v)", req, res)
return
}