66 lines
1022 B
Go
66 lines
1022 B
Go
package service
|
|
|
|
import "errors"
|
|
|
|
type Error struct {
|
|
Status int
|
|
Message string
|
|
Err error
|
|
}
|
|
|
|
func (e *Error) Error() string {
|
|
if e == nil {
|
|
return ""
|
|
}
|
|
|
|
return e.Message
|
|
}
|
|
|
|
func (e *Error) Unwrap() error {
|
|
if e == nil {
|
|
return nil
|
|
}
|
|
|
|
return e.Err
|
|
}
|
|
|
|
func newError(status int, message string, err error) error {
|
|
return &Error{
|
|
Status: status,
|
|
Message: message,
|
|
Err: err,
|
|
}
|
|
}
|
|
|
|
func badRequest(message string) error {
|
|
return newError(400, message, nil)
|
|
}
|
|
|
|
func NewValidationError(message string) error {
|
|
return badRequest(message)
|
|
}
|
|
|
|
func notFound(message string) error {
|
|
return newError(404, message, nil)
|
|
}
|
|
|
|
func internalError(message string, err error) error {
|
|
return newError(500, message, err)
|
|
}
|
|
|
|
func StatusCode(err error) int {
|
|
if serviceErr, ok := errors.AsType[*Error](err); ok {
|
|
return serviceErr.Status
|
|
}
|
|
|
|
return 500
|
|
}
|
|
|
|
func Message(err error) string {
|
|
if serviceErr, ok := errors.AsType[*Error](err); ok {
|
|
return serviceErr.Message
|
|
}
|
|
|
|
return "internal server error"
|
|
}
|