xresponse

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2024 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type InterceptHandler

type InterceptHandler[D any, E any] interface {
	Handler(req *http.Request, res RestResponseValue[D, E])
}

A Async Function For Interceptor HTTP REST API

type ResponseSTD

type ResponseSTD[D any, E any] struct {
	Code    any    `json:"code"`
	Msg     string `json:"msg"`
	Data    D      `json:"data"`
	Err     E      `json:"err"`
	TraceID string `json:"traceId"`
	// contains filtered or unexported fields
}

A Standard Response For API

func (*ResponseSTD[D, E]) DelHeader

func (r *ResponseSTD[D, E]) DelHeader(key string) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) JSON

func (r *ResponseSTD[D, E]) JSON(w io.Writer)

func (*ResponseSTD[D, E]) JSONText

func (r *ResponseSTD[D, E]) JSONText() (string, error)

func (*ResponseSTD[D, E]) RestJSON

func (r *ResponseSTD[D, E]) RestJSON()

func (*ResponseSTD[D, E]) SetCode

func (r *ResponseSTD[D, E]) SetCode(code any) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetData

func (r *ResponseSTD[D, E]) SetData(data D) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetError

func (r *ResponseSTD[D, E]) SetError(err E) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetHeader

func (r *ResponseSTD[D, E]) SetHeader(key string, value string) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetMsg

func (r *ResponseSTD[D, E]) SetMsg(msg string) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetStatusCode

func (r *ResponseSTD[D, E]) SetStatusCode(code int) *ResponseSTD[D, E]

func (*ResponseSTD[D, E]) SetTraceID

func (r *ResponseSTD[D, E]) SetTraceID(traceId string) *ResponseSTD[D, E]

type RestResponseSTD

type RestResponseSTD[D any, E any] interface {
	Msg(msg string) RestResponseSTD[D, E]
	Code(code restkey.RestKey) RestResponseSTD[D, E]
	AnyCode(code any) RestResponseSTD[D, E]
	Data(data D) RestResponseSTD[D, E]
	Error(err E) RestResponseSTD[D, E]

	// Setter HTTP Response Status Code
	//
	// HTTP status codes as registered with IANA.
	// See: https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
	StatusCode(code int) RestResponseSTD[D, E]

	// Add HTTP Response Header, this is equal function with:
	//	responseWriter.Header().Add(key, value)
	AddHeader(key string, value string) RestResponseSTD[D, E]

	// Delete HTTP Response Header by Key, this is equal function with:
	//	responseWriter.Header().Del(key)
	DelHeader(key string) RestResponseSTD[D, E]

	// A Method that Usefull for Run Interceptor Only,
	//
	// When you not need a response api that only need run interceptor.
	Done()

	// A JSON Response Encoder for HTTP Response Writer, this is also auto set header and status code
	//	responseWriter.Header().Add("Accept", "application/json")
	//	responseWriter.Header().Add("Content-Type", "application/json")
	//
	//	// Default httpStatusCode is 200
	//	responseWriter.WriteHeader(httpStatusCode)
	JSON()

	// A General Purpose JSON Response Encoder to text
	JSONText() (string, error)
}

A Wrapper Standard Response For HTTP REST API

HTTP Rest API Response Builder

func NewRestResponse

func NewRestResponse[D any, E any](r *http.Request, rw http.ResponseWriter) RestResponseSTD[D, E]

A Wrapper HTTP Rest API Response Builder Initiator

func NewRestResponseWithInterceptor

func NewRestResponseWithInterceptor[D any, E any](r *http.Request, rw http.ResponseWriter, handler InterceptHandler[D, E]) RestResponseSTD[D, E]

A Wrapper HTTP Rest API Response Builder Initiator With Interceptor, i.e:

// Interceptor
type SomeInterceptHandler struct{}

func NewSomeInterceptHandler() SomeInterceptHandler {
	return SomeInterceptHandler{}
}

func (SomeInterceptHandler) Handler(req *http.Request, res RestResponseValue[dto.SomeResDTO, dto.SomeResErrorDTO]) {
	// do something on here
}

// Controller / Handler
type SomeHandler struct{}

func NewSomeHandler() SomeHandler {
	return SomeHandler{}
}

func (SomeHandler) SomeAction(rw http.ResponseWriter, r *http.Request) {
	ctx := r.Context()
	res := xresponse.NewRestResponseWithInterceptor(r, rw, interceptor.NewSomeInterceptHandler())

	req := xhttputil.LoadInput[dto.SomeReqDTO](ctx)
	if err := req.ValidateWithContext(ctx); err != nil {
		return res.StatusCode(http.StatusUnprocessableEntity).Code(restkey.INVALID_ARGUMENT).Msg("invalid request data").JSON()
	}

	// continue your bussines logic ...
}

type RestResponseValue

type RestResponseValue[D any, E any] interface {
	GetMsg() string
	GetCode() restkey.RestKey
	GetAnyCode() any
	GetData() D
	GetError() E
	GetStatusCode() int
	GetResponseHeader() http.Header
	JSONText() (string, error)
}

A Wrapper Standard Response For HTTP REST API

HTTP Rest API Response Getter For Interceptor

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL