File size: 2,693 Bytes
b025147
 
 
 
 
 
 
 
 
 
 
 
 
7e1e123
b025147
 
 
 
 
 
 
 
7e1e123
 
b025147
 
 
 
 
 
7e1e123
 
b025147
 
 
 
 
 
 
7e1e123
b025147
 
 
 
 
b55a115
b025147
7e1e123
b025147
 
 
 
 
 
 
7e1e123
b025147
 
 
 
 
4542d62
b55a115
 
 
 
 
 
 
 
 
 
4542d62
b55a115
 
 
 
 
 
 
b025147
 
7e1e123
b025147
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package utils

import (
	"errors"

	"abdanhafidz.com/go-boilerplate/models/dto"
	http_error "abdanhafidz.com/go-boilerplate/models/error"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

func ResponseOK[Tdata any, TMetaData any](c *gin.Context, metaData TMetaData, data Tdata) {
	c.JSON(200, dto.SuccessResponse[Tdata]{
		Status:   "success",
		Data:     data,
		Message:  "Data retrieved Successfully!",
		MetaData: metaData,
	})
}

func ResponseFAILED[TMetaData any](c *gin.Context, metaData TMetaData, err error) {
	if errors.Is(err, http_error.BAD_REQUEST_ERROR) {
		c.JSON(400, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  "Invalid request format!",
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.INTERNAL_SERVER_ERROR) {
		c.JSON(500, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  "Internal Server Error!",
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.UNAUTHORIZED) {
		c.JSON(401, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  "Unauthorized, you don't have permission to access this service!",
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.NOT_FOUND_ERROR) || errors.Is(err, gorm.ErrRecordNotFound) {
		c.JSON(404, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  "There is not data with given credential / given parameter!",
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.TIMEOUT) {
		c.JSON(504, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  "Server took to long to respond!",
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.FORBIDDEN_ERROR) || errors.Is(err, http_error.INVALID_CODE) {
		c.JSON(403, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  err.Error(),
			MetaData: metaData,
		})
		return
	} else if errors.Is(err, http_error.EVENT_START_DATE_IN_PAST) ||
		errors.Is(err, http_error.EVENT_START_DATE_INVALID) ||
		errors.Is(err, http_error.EVENT_END_DATE_INVALID) ||
		errors.Is(err, http_error.INVALID_DATE_FORMAT) {
		c.JSON(400, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  err.Error(),
			MetaData: metaData,
		})
		return
	} else {
		c.JSON(405, dto.ErrorResponse{
			Status:   "error",
			Error:    err,
			Message:  err.Error(),
			MetaData: metaData,
		})
		return
	}

}

func SendResponse[Tdata any, TMetaData any](c *gin.Context, metaData TMetaData, data Tdata, err error) {
	if !c.IsAborted() {
		if err != nil {
			ResponseFAILED(c, metaData, err)
			c.Abort()
			return
		} else {
			ResponseOK(c, metaData, data)
			c.Abort()
			return
		}
	}

}