plugins/plugins/zltx_v1/internal/zltx_v1.go

111 lines
2.3 KiB
Go

package internal
import (
"bytes"
"context"
"encoding/json"
"fmt"
"gitea.cdlsxd.cn/sdk/plugin/dctw/v1/api/direct"
"gitea.cdlsxd.cn/sdk/plugin/proto"
"io"
"net/http"
)
// 插件通信信息,若不对应则会报错panic
const (
Tag = "zltx_v1"
Version = 1
CookieKey = "zltx_v1"
CookieValue = "zltx_v1"
)
type ZLTXV1Service struct{}
func (p *ZLTXV1Service) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
c, err := transConfig(request.Config)
if err != nil {
return nil, err
}
server, err := c.server()
if err != nil {
return nil, err
}
req, err := c.orderReq(request)
if err != nil {
return nil, err
}
a := &direct.Direct{DctWServer: server}
resp, err := a.Order(ctx, req)
if err != nil {
if proto.IsResponseFail(err) {
return &proto.OrderResponse{Result: Result(err.Error())}, nil
}
return nil, err
}
if !resp.GetCode().IsSuccess() {
return nil, proto.ErrorRequestFail(resp.Message)
}
return orderResp(request, resp), nil
}
func (p *ZLTXV1Service) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
c, err := transConfig(request.Config)
if err != nil {
return nil, err
}
server, err := c.server()
if err != nil {
return nil, err
}
a := &direct.Direct{DctWServer: server}
resp, err := a.Query(ctx, c.queryReq(request))
if err != nil {
return nil, err
}
if !resp.GetCode().IsSuccess() {
return nil, proto.ErrorRequestFail(resp.Message)
}
return queryResp(request, resp)
}
func (p *ZLTXV1Service) Notify(ctx context.Context, request *proto.NotifyRequest) (*proto.NotifyResponse, error) {
c, err := transConfig(request.Config)
if err != nil {
return nil, err
}
server, err := c.server()
if err != nil {
return nil, err
}
httpHeaders := make(http.Header)
if err = json.Unmarshal(request.Headers, &httpHeaders); err != nil {
return nil, proto.ErrorParamFail(fmt.Sprintf("headers Unmarshal err [%v]", err))
}
newHeaders := make(http.Header)
for key, values := range httpHeaders {
newHeaders[key] = values
}
req := &http.Request{
Header: newHeaders,
Body: io.NopCloser(bytes.NewBuffer(request.Body)),
}
a := &direct.Direct{DctWServer: server}
resp, err := a.Notify(ctx, req)
if err != nil {
return nil, err
}
return notifyResp(resp)
}