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  }