Skip to content

Commit 135c690

Browse files
authored
feat: handle error response body (#11)
* add unionErrors routes * use more generic route to handle errors with response bodies * combine get and post routes
1 parent 0c2e53a commit 135c690

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

cmd/server/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func main() {
4141
r.HandleFunc("/pagination/cursor_non_numeric", pagination.HandleNonNumericCursor).Methods(http.MethodGet)
4242
r.HandleFunc("/retries", retries.HandleRetries).Methods(http.MethodGet, http.MethodPost)
4343
r.HandleFunc("/retries/after", retries.HandleRetries).Methods(http.MethodGet)
44-
r.HandleFunc("/errors/{status_code}", errors.HandleErrors).Methods(http.MethodGet)
44+
r.HandleFunc("/errors/{status_code}", errors.HandleErrors).Methods(http.MethodGet, http.MethodPost)
4545
r.HandleFunc("/optional", acceptHeaders.HandleAcceptHeaderMultiplexing).Methods(http.MethodGet)
4646
r.HandleFunc("/readonlyorwriteonly", readonlywriteonly.HandleReadOrWrite).Methods(http.MethodPost)
4747
r.HandleFunc("/readonlyandwriteonly", readonlywriteonly.HandleReadAndWrite).Methods(http.MethodPost)

internal/errors/service.go

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package errors
33
import (
44
"encoding/json"
55
"fmt"
6+
"io"
67
"net/http"
78
"strconv"
89

@@ -29,11 +30,27 @@ func HandleErrors(w http.ResponseWriter, r *http.Request) {
2930
w.Header().Set("Content-Type", "application/json")
3031
w.WriteHeader(statusCodeInt)
3132

32-
if err := json.NewEncoder(w).Encode(models.Error{
33-
Code: statusCode,
34-
Message: "an error occurred",
35-
Type: "internal",
36-
}); err != nil {
33+
var res interface{}
34+
if r.Method == http.MethodPost {
35+
body, err := io.ReadAll(r.Body)
36+
if err != nil {
37+
utils.HandleError(w, err)
38+
return
39+
}
40+
41+
if err := json.Unmarshal(body, &res); err != nil {
42+
utils.HandleError(w, err)
43+
return
44+
}
45+
} else {
46+
res = models.Error{
47+
Code: statusCode,
48+
Message: "an error occurred",
49+
Type: "internal",
50+
}
51+
}
52+
53+
if err := json.NewEncoder(w).Encode(res); err != nil {
3754
utils.HandleError(w, err)
3855
return
3956
}

0 commit comments

Comments
 (0)