package gateway import ( "git.sxidc.com/go-framework/baize/framework/core/api" "git.sxidc.com/go-tools/utils/http_client" ) type UrlFormFunc func(c *api.Context, staticUrl string, historyRequests []BuilderRequest, resultMap map[string]any) (string, error) type HeadersFormFunc func(c *api.Context, staticHeaders map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error) type BodyFormFunc func(c *api.Context, staticBody any, historyRequests []BuilderRequest, resultMap map[string]any) (any, error) type QueryParamsFormFunc func(c *api.Context, staticQueryParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error) type PathParamsFormFunc func(c *api.Context, staticPathParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error) func FormJsonBodyWithTenantIDAndUserIDFunc(tenantIDFieldName string, userIDFieldName string) BodyFormFunc { return func(c *api.Context, staticBody any, historyRequests []BuilderRequest, resultMap map[string]any) (any, error) { err := AddJsonBodyTenantIDAndUserID(c, tenantIDFieldName, userIDFieldName) if err != nil { return nil, err } jsonBody, err := c.GetJsonBody() if err != nil { return nil, err } return jsonBody.Map(), nil } } func FormQueryParamsWithTenantIDAndUserIDFunc(tenantIDFieldName string, userIDFieldName string) QueryParamsFormFunc { return func(c *api.Context, staticQueryParams map[string]string, historyRequests []BuilderRequest, resultMap map[string]any) (map[string]string, error) { err := AddQueryParamsTenantIDAndUserID(c, tenantIDFieldName, userIDFieldName) if err != nil { return nil, err } return c.GetQueryParams().Map(), nil } } type BuilderRequest interface { Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) Response() *http_client.Response } type PostRequest struct { Url string Body any UrlFormFunc UrlFormFunc BodyFormFunc BodyFormFunc HeadersFormFunc HeadersFormFunc headers map[string]string response *http_client.Response } func (req *PostRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) { preparedRequest, err := req.prepare(c, historyRequests, resultMap) if err != nil { return nil, err } response, err := request.Post(preparedRequest.Url, preparedRequest.Body, http_client.WithRequestHeaders(preparedRequest.headers)) if err != nil { return nil, err } preparedRequest.response = response return preparedRequest, nil } func (req *PostRequest) Response() *http_client.Response { return req.response } func (req *PostRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*PostRequest, error) { preparedRequest := &PostRequest{ Url: req.Url, Body: req.Body, UrlFormFunc: req.UrlFormFunc, HeadersFormFunc: req.HeadersFormFunc, BodyFormFunc: req.BodyFormFunc, } // 赋值默认body if req.Body == nil { cacheBody, err := c.GetBytesBody() if err != nil { return nil, err } preparedRequest.Body = cacheBody.Bytes() } // 赋值默认headers preparedRequest.headers = c.GetHeader().Map() // 构造url if preparedRequest.UrlFormFunc != nil { formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Url = formedUrl } // 构造body if preparedRequest.BodyFormFunc != nil { formedBody, err := preparedRequest.BodyFormFunc(c, preparedRequest.Body, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Body = formedBody } // 构造headers if preparedRequest.HeadersFormFunc != nil { formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.headers = formedHeaders } return preparedRequest, nil } type DeleteRequest struct { Url string QueryParams map[string]string PathParams map[string]string UrlFormFunc UrlFormFunc HeadersFormFunc HeadersFormFunc QueryParamsFormFunc QueryParamsFormFunc PathParamsFormFunc PathParamsFormFunc headers map[string]string response *http_client.Response } func (req *DeleteRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) { preparedRequest, err := req.prepare(c, historyRequests, resultMap) if err != nil { return nil, err } response, err := request.Delete(preparedRequest.Url, http_client.WithRequestQueryParams(preparedRequest.QueryParams), http_client.WithRequestPathParams(preparedRequest.PathParams), http_client.WithRequestHeaders(preparedRequest.headers)) if err != nil { return nil, err } preparedRequest.response = response return preparedRequest, nil } func (req *DeleteRequest) Response() *http_client.Response { return req.response } func (req *DeleteRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*DeleteRequest, error) { preparedRequest := &DeleteRequest{ Url: req.Url, QueryParams: req.QueryParams, PathParams: req.PathParams, UrlFormFunc: req.UrlFormFunc, HeadersFormFunc: req.HeadersFormFunc, QueryParamsFormFunc: req.QueryParamsFormFunc, PathParamsFormFunc: req.PathParamsFormFunc, } // 赋值默认查询参数 if req.QueryParams == nil || len(req.QueryParams) == 0 { req.QueryParams = c.GetQueryParams().Map() } // 赋值默认路径参数 if req.PathParams == nil || len(req.PathParams) == 0 { req.PathParams = c.GetPathParams().Map() } // 赋值默认headers preparedRequest.headers = c.GetHeader().Map() // 构造url if preparedRequest.UrlFormFunc != nil { formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Url = formedUrl } // 构造查询参数 if preparedRequest.QueryParamsFormFunc != nil { formedQueryParams, err := preparedRequest.QueryParamsFormFunc(c, preparedRequest.QueryParams, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.QueryParams = formedQueryParams } // 构造路径参数 if preparedRequest.PathParamsFormFunc != nil { formedPathParams, err := preparedRequest.PathParamsFormFunc(c, preparedRequest.PathParams, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.PathParams = formedPathParams } // 构造headers if preparedRequest.HeadersFormFunc != nil { formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.headers = formedHeaders } return preparedRequest, nil } type PutRequest struct { Url string Body any UrlFormFunc UrlFormFunc BodyFormFunc BodyFormFunc HeadersFormFunc HeadersFormFunc headers map[string]string response *http_client.Response } func (req *PutRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) { preparedRequest, err := req.prepare(c, historyRequests, resultMap) if err != nil { return nil, err } response, err := request.Put(preparedRequest.Url, preparedRequest.Body, http_client.WithRequestHeaders(preparedRequest.headers)) if err != nil { return nil, err } preparedRequest.response = response return preparedRequest, nil } func (req *PutRequest) Response() *http_client.Response { return req.response } func (req *PutRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*PutRequest, error) { preparedRequest := &PutRequest{ Url: req.Url, Body: req.Body, UrlFormFunc: req.UrlFormFunc, HeadersFormFunc: req.HeadersFormFunc, BodyFormFunc: req.BodyFormFunc, } // 赋值默认body if req.Body == nil { cacheBody, err := c.GetBytesBody() if err != nil { return nil, err } preparedRequest.Body = cacheBody.Bytes() } // 赋值默认headers preparedRequest.headers = c.GetHeader().Map() // 构造url if preparedRequest.UrlFormFunc != nil { formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Url = formedUrl } // 构造body if preparedRequest.BodyFormFunc != nil { formedBody, err := preparedRequest.BodyFormFunc(c, preparedRequest.Body, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Body = formedBody } // 构造headers if preparedRequest.HeadersFormFunc != nil { formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.headers = formedHeaders } return preparedRequest, nil } type GetRequest struct { Url string QueryParams map[string]string PathParams map[string]string UrlFormFunc UrlFormFunc HeadersFormFunc HeadersFormFunc QueryParamsFormFunc QueryParamsFormFunc PathParamsFormFunc PathParamsFormFunc headers map[string]string response *http_client.Response } func (req *GetRequest) Request(c *api.Context, request *http_client.Request, historyRequests []BuilderRequest, resultMap map[string]any) (BuilderRequest, error) { preparedRequest, err := req.prepare(c, historyRequests, resultMap) if err != nil { return nil, err } response, err := request.Get(preparedRequest.Url, http_client.WithRequestQueryParams(preparedRequest.QueryParams), http_client.WithRequestPathParams(preparedRequest.PathParams), http_client.WithRequestHeaders(preparedRequest.headers)) if err != nil { return nil, err } preparedRequest.response = response return preparedRequest, nil } func (req *GetRequest) Response() *http_client.Response { return req.response } func (req *GetRequest) prepare(c *api.Context, historyRequests []BuilderRequest, resultMap map[string]any) (*DeleteRequest, error) { preparedRequest := &DeleteRequest{ Url: req.Url, QueryParams: req.QueryParams, PathParams: req.PathParams, UrlFormFunc: req.UrlFormFunc, HeadersFormFunc: req.HeadersFormFunc, QueryParamsFormFunc: req.QueryParamsFormFunc, PathParamsFormFunc: req.PathParamsFormFunc, } // 赋值默认查询参数 if req.QueryParams == nil || len(req.QueryParams) == 0 { req.QueryParams = c.GetQueryParams().Map() } // 赋值默认路径参数 if req.PathParams == nil || len(req.PathParams) == 0 { req.PathParams = c.GetPathParams().Map() } // 赋值默认headers preparedRequest.headers = c.GetHeader().Map() // 构造url if preparedRequest.UrlFormFunc != nil { formedUrl, err := preparedRequest.UrlFormFunc(c, preparedRequest.Url, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.Url = formedUrl } // 构造查询参数 if preparedRequest.QueryParamsFormFunc != nil { formedQueryParams, err := preparedRequest.QueryParamsFormFunc(c, preparedRequest.QueryParams, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.QueryParams = formedQueryParams } // 构造路径参数 if preparedRequest.PathParamsFormFunc != nil { formedPathParams, err := preparedRequest.PathParamsFormFunc(c, preparedRequest.PathParams, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.PathParams = formedPathParams } // 构造headers if preparedRequest.HeadersFormFunc != nil { formedHeaders, err := preparedRequest.HeadersFormFunc(c, preparedRequest.headers, historyRequests, resultMap) if err != nil { return nil, err } preparedRequest.headers = formedHeaders } return preparedRequest, nil }