package httpx import ( "encoding/json" "net/http" "common/types" "common/codes" ) func WriteJSON(w http.ResponseWriter, status int, ok bool, msg string, data interface{}) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(status) json.NewEncoder(w).Encode(types.Response{Status: ok, Message: msg, Data: data}) } func OK(w http.ResponseWriter, r *http.Request, data interface{}) { WriteJSON(w, http.StatusOK, true, string(codes.OK), addRequestID(r, data)) } func Created(w http.ResponseWriter, r *http.Request, data interface{}) { WriteJSON(w, http.StatusCreated, true, string(codes.OK), addRequestID(r, data)) } func BadRequest(w http.ResponseWriter, r *http.Request, msg string) { WriteJSON(w, http.StatusBadRequest, false, msg, addRequestID(r, map[string]string{"code": string(codes.InvalidInput)})) } func Unauthorized(w http.ResponseWriter, r *http.Request, msg string) { WriteJSON(w, http.StatusUnauthorized, false, msg, addRequestID(r, map[string]string{"code": string(codes.Unauthorized)})) } func Conflict(w http.ResponseWriter, r *http.Request, msg string) { WriteJSON(w, http.StatusConflict, false, msg, addRequestID(r, map[string]string{"code": string(codes.Conflict)})) } func MethodNotAllowed(w http.ResponseWriter, r *http.Request, msg string) { WriteJSON(w, http.StatusMethodNotAllowed, false, msg, addRequestID(r, map[string]string{"code": string(codes.MethodNotAllowed)})) } func InternalError(w http.ResponseWriter, r *http.Request) { WriteJSON(w, http.StatusInternalServerError, false, string(codes.InternalError), addRequestID(r, map[string]string{"code": string(codes.InternalError)})) } func addRequestID(r *http.Request, data interface{}) interface{} { rid := RequestIDFromContext(r) if m, ok := data.(map[string]string); ok { m["request_id"] = rid return m } if data == nil { return map[string]string{"request_id": rid} } return map[string]interface{}{"request_id": rid, "data": data} }