gitee.com/h79/goutils@v1.22.10/api/api.go (about) 1 package api 2 3 import ( 4 "gitee.com/h79/goutils/common/option" 5 "gitee.com/h79/goutils/common/result" 6 "gitee.com/h79/goutils/request" 7 ) 8 9 type ResponseBuilder interface { 10 BuildError(head request.HeadV2, err error, data interface{}, opts ...option.Option) interface{} 11 Build(head request.HeadV2, result result.Result, data interface{}, opts ...option.Option) interface{} 12 Succeed() result.Result 13 } 14 15 var defResponseBuilder = &responseBuilder{} 16 17 type responseBuilder struct { 18 } 19 20 func (*responseBuilder) BuildError(head request.HeadV2, err error, data interface{}, opts ...option.Option) interface{} { 21 return NewResponseWithError(head, err, data, opts...) 22 } 23 24 func (*responseBuilder) Build(head request.HeadV2, result result.Result, data interface{}, opts ...option.Option) interface{} { 25 return NewResponse(head, result, data, opts...) 26 } 27 28 func (*responseBuilder) Succeed() result.Result { 29 return result.Succeed() 30 } 31 32 type Api struct { 33 Builder ResponseBuilder 34 } 35 36 func (a *Api) GetBuilder() ResponseBuilder { 37 if a.Builder == nil { 38 return defResponseBuilder 39 } 40 return a.Builder 41 } 42 43 func (a *Api) SendEx(ctx Context, httpCode int, result result.Result, data interface{}, opts ...option.Option) { 44 req := GetReqHead(ctx) 45 ctx.HttpContext().Send(httpCode, a.GetBuilder().Build(&req, result, data, opts...)) 46 } 47 48 func (a *Api) SendHead(ctx Context, httpCode int, req request.HeadV2, result result.Result, data interface{}, opts ...option.Option) { 49 ctx.HttpContext().Send(httpCode, a.GetBuilder().Build(req, result, data, opts...)) 50 } 51 52 func (a *Api) SendNHead(ctx Context, httpCode int, result result.Result, data interface{}, opts ...option.Option) { 53 req := GetReqHead(ctx) 54 ctx.HttpContext().Send(httpCode, a.GetBuilder().Build(&req, result, data, opts...)) 55 } 56 57 func (a *Api) SendMaybeError(ctx Context, httpCode int, data interface{}, err error, opts ...option.Option) { 58 req := GetReqHead(ctx) 59 if err != nil { 60 ctx.HttpContext().Send(httpCode, a.GetBuilder().BuildError(&req, err, data, opts...)) 61 } else { 62 ctx.HttpContext().Send(200, a.GetBuilder().Build(&req, a.GetBuilder().Succeed(), data, opts...)) 63 } 64 } 65 66 func (a *Api) SendException(ctx Context, httpCode int, req request.HeadV2, opts ...option.Option) { 67 ctx.HttpContext().Send(httpCode, a.GetBuilder().BuildError(req, result.RErrException, nil, opts...)) 68 }