package gwtools import ( "git.sxidc.com/go-framework/baize/framework/core/api" "git.sxidc.com/go-framework/baize/framework/gateway" "net/http" ) func PostPassThrough(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func DeletePassThrough(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func PutPassThrough(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func GetPassThrough(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func PassThrough(builder *gateway.Builder, params *PassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, middlewares...) } func OnePostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func OneDeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func OnePutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func OneGetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func OnePassThrough(builder *gateway.Builder, params *OnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, middlewares...) } func PostCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func DeleteCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func PutCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func GetCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func CommonPassThrough(builder *gateway.Builder, params *CommonPassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, middlewares...) } type PassThroughRequestItem struct { Request gateway.BuilderRequest Callback gateway.RequestCallbackFunc } type SimplePassThroughParams struct { RelativePath string Request gateway.BuilderRequest } func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) { passThroughParams := &PassThroughParams{ HttpMethod: httpMethod, SimplePassThroughParams: params, } passThroughParams.passThrough(builder, middlewares...) } type PassThroughParams struct { HttpMethod string *SimplePassThroughParams } func (params *PassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) { copyBuilder := builder.Url(params.HttpMethod, params.RelativePath) switch req := params.Request.(type) { case *gateway.PostRequest: copyBuilder = copyBuilder.Post(req, nil) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req, nil) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req, nil) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req, nil) default: panic("不支持的请求类型") } copyBuilder.Build(middlewares...) } type SimpleOnePassThroughParams struct { RelativePath string RequestItem *PassThroughRequestItem } func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) { onePassThroughParams := &OnePassThroughParams{ HttpMethod: httpMethod, SimpleOnePassThroughParams: params, } onePassThroughParams.passThrough(builder, middlewares...) } type OnePassThroughParams struct { HttpMethod string *SimpleOnePassThroughParams } func (params *OnePassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) { copyBuilder := builder.Url(params.HttpMethod, params.RelativePath) switch req := params.RequestItem.Request.(type) { case *gateway.PostRequest: copyBuilder = copyBuilder.Post(req, params.RequestItem.Callback) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req, params.RequestItem.Callback) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req, params.RequestItem.Callback) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req, params.RequestItem.Callback) default: panic("不支持的请求类型") } copyBuilder.Build(middlewares...) } type SimpleCommonPassThroughParams struct { RelativePath string RequestItems []PassThroughRequestItem } func (params *SimpleCommonPassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...api.Handler) { passThroughParams := &CommonPassThroughParams{ HttpMethod: httpMethod, SimpleCommonPassThroughParams: params, } passThroughParams.passThrough(builder, middlewares...) } type CommonPassThroughParams struct { HttpMethod string *SimpleCommonPassThroughParams } func (params *CommonPassThroughParams) passThrough(builder *gateway.Builder, middlewares ...api.Handler) { copyBuilder := builder.Url(params.HttpMethod, params.RelativePath) for _, requestItem := range params.RequestItems { switch req := requestItem.Request.(type) { case *gateway.PostRequest: copyBuilder = copyBuilder.Post(req, requestItem.Callback) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req, requestItem.Callback) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req, requestItem.Callback) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req, requestItem.Callback) default: panic("不支持的请求类型") } } copyBuilder.Build(middlewares...) }