wip
This commit is contained in:
62
mangezmieux-backend/internal/responses/error.go
Normal file
62
mangezmieux-backend/internal/responses/error.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package responses
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var (
|
||||
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",
|
||||
}
|
||||
|
||||
ErrNotFound = APIError{
|
||||
Type: "not_found",
|
||||
HTTPCode: http.StatusNotFound,
|
||||
}
|
||||
|
||||
ErrAlreadyExists = APIError{
|
||||
Type: "already_exists",
|
||||
HTTPCode: http.StatusConflict,
|
||||
}
|
||||
|
||||
ErrUnauthorized = APIError{
|
||||
Type: "unauthorized",
|
||||
HTTPCode: http.StatusUnauthorized,
|
||||
}
|
||||
|
||||
ErrForbidden = APIError{
|
||||
Type: "forbidden",
|
||||
HTTPCode: http.StatusForbidden,
|
||||
}
|
||||
|
||||
ErrInternalServer = APIError{
|
||||
Type: "internal_server_error",
|
||||
HTTPCode: http.StatusInternalServerError,
|
||||
}
|
||||
)
|
||||
|
||||
type APIError struct {
|
||||
HTTPCode int `json:"-"`
|
||||
Type string `json:"error"`
|
||||
Description string `json:"errorDescription"`
|
||||
Details []FieldError `json:"errorDetails,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)
|
||||
}
|
||||
34
mangezmieux-backend/internal/responses/responses.go
Normal file
34
mangezmieux-backend/internal/responses/responses.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package responses
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"mangezmieux-backend/internal/ginserver"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func JSON(w http.ResponseWriter, status int, data interface{}) {
|
||||
w.Header().Set(ginserver.HeaderNameContentType, ginserver.HeaderValueApplicationJSONUTF8)
|
||||
w.WriteHeader(status)
|
||||
if data != nil {
|
||||
err := json.NewEncoder(w).Encode(data)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func JSONError(w http.ResponseWriter, e APIError) {
|
||||
if e.Headers != nil {
|
||||
for k, headers := range e.Headers {
|
||||
for _, headerValue := range headers {
|
||||
w.Header().Add(k, headerValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
JSON(w, e.HTTPCode, e)
|
||||
}
|
||||
|
||||
func JSONErrorWithMessage(w http.ResponseWriter, e APIError, message string) {
|
||||
e.Description = message
|
||||
JSONError(w, e)
|
||||
}
|
||||
Reference in New Issue
Block a user