aboutsummaryrefslogtreecommitdiff
path: root/utils/shortcuts/error.go
blob: c22e6b253b066b3a4a05c95b839a543a37c89159 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package shortcuts

import "github.com/gofiber/fiber/v2"

type ErrorKind string

const (
	BadRequest    ErrorKind = "bad_request"
	Forbidden     ErrorKind = "forbidden"
	Internal      ErrorKind = "internal"
	NotFound      ErrorKind = "not_found"
	Unauthorized  ErrorKind = "unauthorized"
	Unprocessable ErrorKind = "unprocessable"
)

type Error struct {
	Kind    ErrorKind
	Message string
}

func (self *Error) Error() string {
	return self.Message
}

var statusMap = map[ErrorKind]int{
	BadRequest:    fiber.StatusBadRequest,
	Forbidden:     fiber.StatusForbidden,
	Internal:      fiber.StatusInternalServerError,
	NotFound:      fiber.StatusNotFound,
	Unauthorized:  fiber.StatusUnauthorized,
	Unprocessable: fiber.StatusUnprocessableEntity,
}

func ServiceError(kind ErrorKind, message string) *Error {
	return &Error{
		Kind:    kind,
		Message: message,
	}
}

func HandleError(context *fiber.Ctx, serviceError *Error) error {
	statusCode, exists := statusMap[serviceError.Kind]
	if !exists {
		statusCode = fiber.StatusInternalServerError
	}

	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": serviceError.Message,
	}, statusCode)
}

func BadRequestError(context *fiber.Ctx, err error) error {
	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": err.Error(),
	}, fiber.StatusBadRequest)
}

func ForbiddenError(context *fiber.Ctx, err error) error {
	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": err.Error(),
	}, fiber.StatusForbidden)
}

func InternalServerError(context *fiber.Ctx, err error) error {
	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": err.Error(),
	}, fiber.StatusInternalServerError)
}

func NotFoundError(context *fiber.Ctx, err error) error {
	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": err.Error(),
	}, fiber.StatusNotFound)
}

func UnauthorizedError(context *fiber.Ctx, err error) error {
	return RenderWithStatus(context, "error", fiber.Map{
		"ErrorMessage": err.Error(),
	}, fiber.StatusUnauthorized)
}