Skip to content

Commit 12012f5

Browse files
feat: add error endpoint
1 parent e683cdd commit 12012f5

File tree

4 files changed

+44
-3
lines changed

4 files changed

+44
-3
lines changed

cmd/server/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"log"
55
"net/http"
66

7+
"github.com/speakeasy-api/speakeasy-api-test-service/internal/errors"
78
"github.com/speakeasy-api/speakeasy-api-test-service/internal/pagination"
89
"github.com/speakeasy-api/speakeasy-api-test-service/internal/responseHeaders"
910
"github.com/speakeasy-api/speakeasy-api-test-service/internal/retries"
@@ -25,6 +26,7 @@ func main() {
2526
r.HandleFunc("/pagination/limitoffset/offset", pagination.HandleLimitOffsetOffset).Methods(http.MethodGet, http.MethodPut)
2627
r.HandleFunc("/pagination/cursor", pagination.HandleCursor).Methods(http.MethodGet, http.MethodPut)
2728
r.HandleFunc("/retries", retries.HandleRetries).Methods(http.MethodGet)
29+
r.HandleFunc("/errors/{status_code}", errors.HandleErrors).Methods(http.MethodGet)
2830

2931
log.Println("Listening on :8080")
3032
if err := http.ListenAndServe(":8080", r); err != nil {

internal/errors/service.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package errors
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"net/http"
7+
"strconv"
8+
9+
"github.com/gorilla/mux"
10+
"github.com/speakeasy-api/speakeasy-api-test-service/internal/utils"
11+
12+
"github.com/speakeasy-api/speakeasy-api-test-service/pkg/models"
13+
)
14+
15+
func HandleErrors(w http.ResponseWriter, r *http.Request) {
16+
vars := mux.Vars(r)
17+
statusCode, ok := vars["status_code"]
18+
if !ok {
19+
utils.HandleError(w, fmt.Errorf("status_code is required"))
20+
return
21+
}
22+
23+
statusCodeInt, err := strconv.Atoi(statusCode)
24+
if err != nil {
25+
utils.HandleError(w, fmt.Errorf("status_code must be an integer"))
26+
return
27+
}
28+
29+
w.WriteHeader(statusCodeInt)
30+
31+
if err := json.NewEncoder(w).Encode(models.Error{
32+
Code: statusCode,
33+
Message: "an error occurred",
34+
}); err != nil {
35+
utils.HandleError(w, err)
36+
return
37+
}
38+
}

internal/utils/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func HandleError(w http.ResponseWriter, err error) {
1515
log.Println(err)
1616

1717
data, marshalErr := json.Marshal(models.ErrorResponse{
18-
Error: models.ErrorMessage{
18+
Error: models.Error{
1919
Message: err.Error(),
2020
},
2121
})

pkg/models/models.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package models
22

3-
type ErrorMessage struct {
3+
type Error struct {
44
Message string `json:"message"`
5+
Code string `json:"code"`
56
}
67

78
type ErrorResponse struct {
8-
Error ErrorMessage `json:"error"`
9+
Error Error `json:"error"`
910
}
1011

1112
type HeaderAuth struct {

0 commit comments

Comments
 (0)