46 lines
838 B
Go
46 lines
838 B
Go
package photosapi
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
var (
|
|
ErrReqMissingBody = errors.New("missing body")
|
|
)
|
|
|
|
type ErrorWithDetails struct {
|
|
Err string `json:"error"`
|
|
Details []string `json:"details"`
|
|
}
|
|
|
|
func (u *ErrorWithDetails) Error() string {
|
|
if len(u.Details) == 0 {
|
|
return u.Err
|
|
}
|
|
return fmt.Sprintf("%s: \n - %s", u.Err, strings.Join(u.Details, "\n - "))
|
|
}
|
|
|
|
func (s *Service) HandleError(c *gin.Context) {
|
|
c.Next()
|
|
err := c.Errors.Last()
|
|
if err == nil {
|
|
return
|
|
}
|
|
|
|
errWithDetails := &ErrorWithDetails{err.Error(), nil}
|
|
|
|
if errWithDetails.Err == "EOF" {
|
|
errWithDetails.Err = "missing body"
|
|
}
|
|
|
|
if err.Type == gin.ErrorTypeBind {
|
|
errWithDetails.Err, errWithDetails.Details = "binding error", strings.Split(errWithDetails.Err, "\n")
|
|
}
|
|
|
|
c.JSON(-1, errWithDetails)
|
|
}
|