This commit is contained in:
2024-07-19 17:04:42 +02:00
commit 5e0d0ec69f
71 changed files with 3316 additions and 0 deletions

View 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)
}

View 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)
}