54 lines
1.3 KiB
Go
54 lines
1.3 KiB
Go
package response
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
app "haixun-backend/internal/library/errors"
|
|
"haixun-backend/internal/library/errors/code"
|
|
"haixun-backend/internal/types"
|
|
|
|
"github.com/zeromicro/go-zero/rest/httpx"
|
|
)
|
|
|
|
func Write(ctx context.Context, w http.ResponseWriter, data any, err error) {
|
|
if err != nil {
|
|
status, body := buildError(err)
|
|
httpx.WriteJsonCtx(ctx, w, status, body)
|
|
return
|
|
}
|
|
|
|
httpx.WriteJsonCtx(ctx, w, http.StatusOK, types.Status{
|
|
Code: code.DefaultSuccessFullCodeInt,
|
|
Message: code.DefaultSuccessMessage,
|
|
Data: data,
|
|
})
|
|
}
|
|
|
|
func buildError(err error) (int, types.Status) {
|
|
if appErr := app.FromError(err); appErr != nil {
|
|
return appErr.HTTPStatus(), types.Status{
|
|
Code: int64(appErr.Code()),
|
|
Message: appErr.Error(),
|
|
Error: types.ErrorDetail{
|
|
BizCode: appErr.DisplayCode(),
|
|
Scope: int64(appErr.Scope()),
|
|
Category: int64(appErr.Category()),
|
|
Detail: int64(appErr.Detail()),
|
|
},
|
|
}
|
|
}
|
|
|
|
fallback := app.For(code.Unset).SysInternal("internal server error")
|
|
return http.StatusInternalServerError, types.Status{
|
|
Code: int64(fallback.Code()),
|
|
Message: fallback.Error(),
|
|
Error: types.ErrorDetail{
|
|
BizCode: fallback.DisplayCode(),
|
|
Scope: int64(fallback.Scope()),
|
|
Category: int64(fallback.Category()),
|
|
Detail: int64(fallback.Detail()),
|
|
},
|
|
}
|
|
}
|