errors.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package api
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "gopkg.in/go-playground/validator.v9"
  7. )
  8. const (
  9. appErrDataCreationFailure = "data creation failure"
  10. appErrFormDecodingFailure = "form decoding failure"
  11. )
  12. func (app *App) handleUnprocessableEntity(err error, w http.ResponseWriter) {
  13. app.logger.Warn().Err(err).Msg("")
  14. w.WriteHeader(http.StatusUnprocessableEntity)
  15. fmt.Fprintf(w, `{"error": "%v"}`, appErrFormDecodingFailure)
  16. }
  17. func (app *App) handleErrorFormValidation(err error, w http.ResponseWriter) {
  18. // translate all validator errors
  19. errs := err.(validator.ValidationErrors)
  20. translation := errs.Translate(*app.translator)
  21. respBody, newErr := json.Marshal(translation)
  22. if newErr != nil {
  23. app.handleGenericInternalError(newErr, w)
  24. }
  25. fmt.Fprintf(w, `{"errors": %v}`, respBody)
  26. }
  27. func (app *App) handleDataWriteFailure(err error, w http.ResponseWriter) {
  28. app.logger.Warn().Err(err).Msg("")
  29. w.WriteHeader(http.StatusInternalServerError)
  30. fmt.Fprintf(w, `{"error": "%v"}`, appErrDataCreationFailure)
  31. }
  32. func (app *App) handleGenericInternalError(err error, w http.ResponseWriter) {
  33. app.logger.Warn().Err(err).Msg("")
  34. w.WriteHeader(http.StatusInternalServerError)
  35. fmt.Fprintf(w, `{"error": "Internal server error"}`)
  36. }