diff --git a/main.go b/main.go index 2483998..8cdcedc 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,11 @@ func convErrorHandler(str string, err error) string { return str } +type RequestError struct { + Code string `json:"code"` + Message string `json:"messaage"` +} + func run() error { // load environment file err := godotenv.Load() @@ -76,10 +81,12 @@ func (h *stopInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { enc := json.NewEncoder(w) ctx := context.Background() + w.Header().Set("Content-Type", "application/json") + conn, err := pool.Acquire(ctx) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } defer conn.Release() @@ -92,7 +99,7 @@ func (h *stopInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if searchQuery == "" { w.WriteHeader(400) - _, _ = w.Write([]byte("'query' is required")) + _ = enc.Encode(RequestError{Code: "0000", Message: "'query' is required"}) return } @@ -105,17 +112,16 @@ func (h *stopInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { stations, err := queries.GetStationsByName(ctx, queryPgText) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } - w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) err = enc.Encode(stations) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0002", Message: "Could not write response: " + err.Error()}) return } @@ -128,10 +134,12 @@ func (h *stopIdInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { enc := json.NewEncoder(w) ctx := context.Background() + w.Header().Set("Content-Type", "application/json") + conn, err := pool.Acquire(ctx) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } defer conn.Release() @@ -143,7 +151,7 @@ func (h *stopIdInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { var stopId = r.PathValue("id") if stopId == "" { w.WriteHeader(400) - _, _ = w.Write([]byte("'id' is required")) + _ = enc.Encode(RequestError{Code: "0000", Message: "'id' is required"}) return } @@ -151,18 +159,17 @@ func (h *stopIdInfoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { stations, err := queries.GetStationById(ctx, stopId) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } // Return - w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) err = enc.Encode(stations) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0002", Message: "Could not write response: " + err.Error()}) return } @@ -176,11 +183,13 @@ func (h *stopDeparturesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request enc := json.NewEncoder(w) ctx := context.Background() + w.Header().Set("Content-Type", "application/json") + // Acquire DB Connection conn, err := pool.Acquire(ctx) if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0000", Message: "'id' is required"}) return } defer conn.Release() @@ -191,7 +200,7 @@ func (h *stopDeparturesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request var stopId = r.PathValue("id") if stopId == "" { w.WriteHeader(400) - _, _ = w.Write([]byte("'id' is required")) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } stopIdPg := pgtype.Text{String: stopId, Valid: true} @@ -242,7 +251,7 @@ func (h *stopDeparturesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0001", Message: "DB Error: " + err.Error()}) return } @@ -253,7 +262,7 @@ func (h *stopDeparturesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request if err != nil { w.WriteHeader(500) - _, _ = w.Write([]byte(err.Error())) + _ = enc.Encode(RequestError{Code: "0002", Message: "Could not write response: " + err.Error()}) return }