69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/lib/pq"
|
|
)
|
|
|
|
var (
|
|
// 400
|
|
ErrBadRequestFormat = APIError{
|
|
Type: "bad_format",
|
|
HTTPCode: http.StatusBadRequest,
|
|
Description: "unable to read request body, please check that the json is valid",
|
|
}
|
|
ErrDataValidation = APIError{
|
|
Type: "data_validation",
|
|
HTTPCode: http.StatusBadRequest,
|
|
Description: "the data are not valid",
|
|
}
|
|
|
|
// 404
|
|
ErrNotFound = APIError{
|
|
Type: "not_found",
|
|
HTTPCode: http.StatusNotFound,
|
|
}
|
|
|
|
// 40x
|
|
ErrAlreadyExists = APIError{
|
|
Type: "already_exists",
|
|
HTTPCode: http.StatusConflict,
|
|
}
|
|
|
|
// 50x
|
|
ErrInternalServer = APIError{
|
|
Type: "internal_server_error",
|
|
HTTPCode: http.StatusInternalServerError,
|
|
}
|
|
)
|
|
|
|
type APIError struct {
|
|
HTTPCode int `json:"-"`
|
|
Type string `json:"error"`
|
|
Description string `json:"error_description"`
|
|
Details []FieldError `json:"error_details,omitempty"`
|
|
Headers map[string][]string `json:"-"`
|
|
}
|
|
|
|
type FieldError struct {
|
|
Field string `json:"field"`
|
|
Constraint string `json:"constraint"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
func (e *APIError) Error() string {
|
|
return fmt.Sprintf("error : %d, %s, %s, %v", e.HTTPCode, e.Type, e.Description, e.Details)
|
|
}
|
|
|
|
func FromPostgresError(err *pq.Error) *APIError {
|
|
return &APIError{
|
|
HTTPCode: 0,
|
|
Type: "",
|
|
Description: "",
|
|
Details: nil,
|
|
Headers: nil,
|
|
}
|
|
}
|