package pass_through import ( "git.sxidc.com/go-framework/baize/framework/gateway" "net/http" ) func Post(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func Delete(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func Put(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func Get(builder *gateway.Builder, params *SimplePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func PostPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func DeletePassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func PutPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func GetPassThrough(builder *gateway.Builder, params *SimpleOnePassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } func PostCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPost, middlewares...) } func DeleteCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodDelete, middlewares...) } func PutCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodPut, middlewares...) } func GetCommonPassThrough(builder *gateway.Builder, params *SimpleCommonPassThroughParams, middlewares ...gateway.Handler) { params.passThrough(builder, http.MethodGet, middlewares...) } type PassThroughRequestItem struct { Request gateway.Request RequestResponseCallback gateway.RequestResponseCallback } type SimplePassThroughParams struct { RelativePath string Request gateway.Request } func (params *SimplePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.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 ...gateway.Handler) { builder.AddRoute(params.HttpMethod, params.RelativePath, func(requestBuilder *gateway.RequestBuilder) { switch req := params.Request.(type) { case *gateway.PostRequest: requestBuilder.Post(req) case *gateway.DeleteRequest: requestBuilder.Delete(req) case *gateway.PutRequest: requestBuilder.Put(req) case *gateway.GetRequest: requestBuilder.Get(req) default: panic("不支持的请求类型") } requestBuilder.Request() }, middlewares...) } type SimpleOnePassThroughParams struct { RelativePath string RequestItem *PassThroughRequestItem } func (params *SimpleOnePassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.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 ...gateway.Handler) { builder.AddRoute(params.HttpMethod, params.RelativePath, func(requestBuilder *gateway.RequestBuilder) { switch req := params.RequestItem.Request.(type) { case *gateway.PostRequest: requestBuilder.Post(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.DeleteRequest: requestBuilder.Delete(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.PutRequest: requestBuilder.Put(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) case *gateway.GetRequest: requestBuilder.Get(req, gateway.WithRequestResponseCallback(params.RequestItem.RequestResponseCallback)) default: panic("不支持的请求类型") } requestBuilder.Request() }, middlewares...) } type SimpleCommonPassThroughParams struct { RelativePath string RequestItems []PassThroughRequestItem } func (params *SimpleCommonPassThroughParams) passThrough(builder *gateway.Builder, httpMethod string, middlewares ...gateway.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 ...gateway.Handler) { builder.AddRoute(params.HttpMethod, params.RelativePath, func(requestBuilder *gateway.RequestBuilder) { for _, requestItem := range params.RequestItems { switch req := requestItem.Request.(type) { case *gateway.PostRequest: requestBuilder.Post(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.DeleteRequest: requestBuilder.Delete(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.PutRequest: requestBuilder.Put(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) case *gateway.GetRequest: requestBuilder.Get(req, gateway.WithRequestResponseCallback(requestItem.RequestResponseCallback)) default: panic("不支持的请求类型") } } requestBuilder.Request() }, middlewares...) }