haixunMaster/haixun-backend/internal/response/response.go

54 lines
1.3 KiB
Go
Raw Normal View History

2026-06-23 09:54:27 +00:00
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()),
},
}
}