package response import ( "electricity_bill_calc/config" "net/http" "github.com/gin-gonic/gin" ) type Result struct { Ctx *gin.Context } type BaseResponse struct { Code int `json:"code"` Message string `json:"message"` } type PagedResponse struct { Page int `json:"current"` Size int `json:"pageSize"` Total int64 `json:"total"` } func NewResult(ctx *gin.Context) *Result { return &Result{Ctx: ctx} } func (r *Result) response(status, code int, msg string, payloads ...map[string]interface{}) { var finalPayload = make(map[string]interface{}, 0) finalPayload["code"] = code finalPayload["message"] = msg for _, m := range payloads { for k, v := range m { finalPayload[k] = v } } r.Ctx.JSON(status, finalPayload) } // 操作出错(未成功)响应 func (r *Result) Failure(code int, msg string) { r.response(http.StatusInternalServerError, code, msg) } // 操作出错(未成功)响应 func (r *Result) Error(code int, msg string) { r.response(http.StatusOK, code, msg) } // 用户未获得授权)响应 func (r *Result) Unauthorized(msg string) { r.response(http.StatusOK, http.StatusUnauthorized, msg) } // 简易操作成功信息 func (r *Result) Success(msg string) { r.response(http.StatusOK, http.StatusOK, msg) } // 数据成功创建 func (r *Result) Created(msg string, payloads ...map[string]interface{}) { r.response(http.StatusOK, http.StatusCreated, msg, payloads...) } // 数据成功更新 func (r *Result) Updated(msg string) { r.response(http.StatusOK, http.StatusAccepted, msg) } // 数据已成功删除 func (r *Result) Deleted(msg string) { r.response(http.StatusOK, http.StatusNoContent, msg) } // 指定操作未被接受 func (r *Result) BadRequest(msg string) { r.response(http.StatusOK, http.StatusBadRequest, msg) } // 指定操作未被接受 func (r *Result) NotAccept(msg string) { r.response(http.StatusOK, http.StatusNotAcceptable, msg) } // 数据未找到 func (r *Result) NotFound(msg string) { r.response(http.StatusOK, http.StatusNotFound, msg) } // 数据存在冲突 func (r *Result) Conflict(msg string) { r.response(http.StatusOK, http.StatusConflict, msg) } // 快速自由JSON格式响应 // ! 注意,给定的map中,同名的键会被覆盖。 func (r *Result) Json(code int, msg string, payloads ...map[string]interface{}) { r.response(http.StatusOK, code, msg, payloads...) } func NewPagedResponse(page int, total int64) *PagedResponse { return &PagedResponse{page, config.ServiceSettings.ItemsPageSize, total} } func (r PagedResponse) ToMap() map[string]interface{} { return gin.H{ "current": r.Page, "pageSize": r.Size, "total": r.Total, } }