httpx.go 864 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package httpx
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "cmr-backend/internal/apperr"
  6. )
  7. func WriteJSON(w http.ResponseWriter, status int, payload any) {
  8. w.Header().Set("Content-Type", "application/json; charset=utf-8")
  9. w.WriteHeader(status)
  10. _ = json.NewEncoder(w).Encode(payload)
  11. }
  12. func WriteError(w http.ResponseWriter, err error) {
  13. if appErr := apperr.From(err); appErr != nil {
  14. WriteJSON(w, appErr.Status, map[string]any{
  15. "error": map[string]any{
  16. "code": appErr.Code,
  17. "message": appErr.Message,
  18. },
  19. })
  20. return
  21. }
  22. WriteJSON(w, http.StatusInternalServerError, map[string]any{
  23. "error": map[string]any{
  24. "code": "internal_error",
  25. "message": "internal server error",
  26. },
  27. })
  28. }
  29. func DecodeJSON(r *http.Request, dst any) error {
  30. decoder := json.NewDecoder(r.Body)
  31. decoder.DisallowUnknownFields()
  32. return decoder.Decode(dst)
  33. }