package pass_through import ( "git.sxidc.com/go-framework/baize/framework/core/api" "git.sxidc.com/go-framework/baize/framework/gateway" "net/http" ) func Post(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func Delete(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func Put(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func Get(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func PostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func DeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func PutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func GetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...api.Handler) { params.passThrough(builder, http.MethodGet, 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...) } type PassThroughRequestItem struct { Request gateway.BuilderRequest RequestResponseCallback gateway.RequestResponseCallback } 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) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req) 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, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) 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, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.DeleteRequest: copyBuilder = copyBuilder.Delete(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.PutRequest: copyBuilder = copyBuilder.Put(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.GetRequest: copyBuilder = copyBuilder.Get(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) default: panic("不支持的请求类型") } } copyBuilder.Build(middlewares...) }