Skip to content

Commit a6207f9

Browse files
committed
feat: added DebugData field to handler Response struct
1 parent 6e3def2 commit a6207f9

File tree

2 files changed

+76
-30
lines changed

2 files changed

+76
-30
lines changed

http/handler/handler.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@ type (
1414
r *http.Request,
1515
data interface{},
1616
) (err error)
17-
HandleSuccessResponse(w http.ResponseWriter, response *Response)
17+
HandleResponse(w http.ResponseWriter, response *Response)
1818
HandleErrorProneResponse(
1919
w http.ResponseWriter,
2020
successResponse *Response,
2121
errorResponse *Response,
2222
)
23-
HandleErrorResponse(w http.ResponseWriter, response *Response)
2423
}
2524

2625
// DefaultHandler struct
@@ -64,14 +63,27 @@ func (d *DefaultHandler) HandleRequest(
6463
return d.jsonDecoder.Decode(w, r, data)
6564
}
6665

67-
// HandleSuccessResponse handles the response
68-
func (d *DefaultHandler) HandleSuccessResponse(
66+
// HandleResponse handles the response
67+
func (d *DefaultHandler) HandleResponse(
6968
w http.ResponseWriter,
7069
response *Response,
7170
) {
72-
if response != nil && response.Code != nil {
71+
if response == nil {
72+
SendInternalServerError(w)
73+
return
74+
}
75+
76+
if response.Code != nil {
77+
if response.DebugData != nil && d.mode != nil && d.mode.IsDebug() {
78+
_ = d.jsonEncoder.Encode(w, response.DebugData, *response.Code)
79+
return
80+
}
7381
_ = d.jsonEncoder.Encode(w, response.Data, *response.Code)
7482
} else {
83+
if response.DebugData != nil && d.mode != nil && d.mode.IsDebug() {
84+
_ = d.jsonEncoder.Encode(w, response.DebugData, *response.Code)
85+
return
86+
}
7587
SendInternalServerError(w)
7688
}
7789
}
@@ -84,22 +96,10 @@ func (d *DefaultHandler) HandleErrorProneResponse(
8496
) {
8597
// Check if the error response is nil
8698
if errorResponse != nil {
87-
d.HandleErrorResponse(w, errorResponse)
99+
d.HandleResponse(w, errorResponse)
88100
return
89101
}
90102

91103
// Handle the success response
92-
d.HandleSuccessResponse(w, successResponse)
93-
}
94-
95-
// HandleErrorResponse handles the error response
96-
func (d *DefaultHandler) HandleErrorResponse(
97-
w http.ResponseWriter,
98-
response *Response,
99-
) {
100-
if response != nil && response.Code != nil {
101-
_ = d.jsonEncoder.Encode(w, response.Data, *response.Code)
102-
} else {
103-
SendInternalServerError(w)
104-
}
104+
d.HandleResponse(w, successResponse)
105105
}

http/handler/types.go

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package handler
33
type (
44
// Response struct
55
Response struct {
6-
Data interface{}
7-
Code *int
6+
Data interface{}
7+
DebugData interface{}
8+
Code *int
89
}
910

1011
// JSONErrorResponse struct
@@ -13,27 +14,72 @@ type (
1314
}
1415
)
1516

17+
// NewJSONErrorResponse creates a new error response
18+
func NewJSONErrorResponse(err error) JSONErrorResponse {
19+
return JSONErrorResponse{Error: err.Error()}
20+
}
21+
22+
// newResponse creates a new response
23+
func newResponse(
24+
data interface{},
25+
debugData interface{},
26+
code *int,
27+
) *Response {
28+
return &Response{Data: data, DebugData: debugData, Code: code}
29+
}
30+
31+
// NewDebugResponseWithCode creates a new response with a code
32+
func NewDebugResponseWithCode(
33+
data interface{},
34+
debugData interface{},
35+
code int,
36+
) *Response {
37+
return newResponse(data, debugData, &code)
38+
}
39+
40+
// NewDebugErrorResponseWithCode creates a new error response with a code
41+
func NewDebugErrorResponseWithCode(
42+
err error,
43+
debugErr error,
44+
code int,
45+
) *Response {
46+
return newResponse(
47+
NewJSONErrorResponse(err),
48+
NewJSONErrorResponse(debugErr),
49+
&code,
50+
)
51+
}
52+
1653
// NewResponseWithCode creates a new response with a code
1754
func NewResponseWithCode(data interface{}, code int) *Response {
18-
return &Response{Data: data, Code: &code}
55+
return newResponse(data, nil, &code)
1956
}
2057

2158
// NewErrorResponseWithCode creates a new error response with a code
2259
func NewErrorResponseWithCode(err error, code int) *Response {
23-
return &Response{Data: NewJSONErrorResponse(err), Code: &code}
60+
return newResponse(NewJSONErrorResponse(err), nil, &code)
61+
}
62+
63+
// NewDebugResponse creates a new response
64+
func NewDebugResponse(data interface{}, debugData interface{}) *Response {
65+
return newResponse(data, debugData, nil)
66+
}
67+
68+
// NewDebugErrorResponse creates a new error response
69+
func NewDebugErrorResponse(err error, debugErr error) *Response {
70+
return newResponse(
71+
NewJSONErrorResponse(err),
72+
NewJSONErrorResponse(debugErr),
73+
nil,
74+
)
2475
}
2576

2677
// NewResponse creates a new response
2778
func NewResponse(data interface{}) *Response {
28-
return &Response{Data: data}
79+
return newResponse(data, nil, nil)
2980
}
3081

3182
// NewErrorResponse creates a new error response
3283
func NewErrorResponse(err error) *Response {
33-
return &Response{Data: NewJSONErrorResponse(err)}
34-
}
35-
36-
// NewJSONErrorResponse creates a new error response
37-
func NewJSONErrorResponse(err error) JSONErrorResponse {
38-
return JSONErrorResponse{Error: err.Error()}
84+
return newResponse(NewJSONErrorResponse(err), nil, nil)
3985
}

0 commit comments

Comments
 (0)