From 0b2490ed46d1958625dc3c660455a5465adaf763 Mon Sep 17 00:00:00 2001 From: Michael Hunteman Date: Sat, 18 May 2024 15:04:43 -0700 Subject: Add more error handling --- server/cmd/main.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/server/cmd/main.go b/server/cmd/main.go index ed4f748..3cd118d 100644 --- a/server/cmd/main.go +++ b/server/cmd/main.go @@ -35,11 +35,13 @@ func (h *guestHandler) getGuests(w http.ResponseWriter, _ *http.Request) { guests, err := h.store.Get() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } jsonBytes, err := json.Marshal(guests) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } w.WriteHeader(http.StatusOK) @@ -55,6 +57,19 @@ func (h *guestHandler) createGuest(w http.ResponseWriter, r *http.Request) { return } + guests, err := h.store.Get() + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + for _, g := range guests { + if g.Id == guest.Id { + http.Error(w, "Id already exists", http.StatusBadRequest) + return + } + } + err = h.store.Add(guest.Id, guest) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) @@ -68,6 +83,7 @@ func (h *guestHandler) updateGuest(w http.ResponseWriter, r *http.Request) { matches := guestIdRe.FindStringSubmatch(r.URL.Path) if len(matches) < 2 { http.Error(w, "No id found", http.StatusBadRequest) + return } var guest guests.Guest @@ -75,16 +91,19 @@ func (h *guestHandler) updateGuest(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) + return } id, err := strconv.Atoi(matches[1]) if err != nil { http.Error(w, "Cannot convert string to integer", http.StatusBadRequest) + return } err = h.store.Update(id, guest) if err != nil { http.Error(w, "Guest not found", http.StatusBadRequest) + return } } @@ -96,6 +115,8 @@ func (h *guestHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { h.createGuest(w, r) case r.Method == http.MethodPut && guestIdRe.MatchString(r.URL.Path): h.updateGuest(w, r) + default: + w.WriteHeader(http.StatusNotFound) } } -- cgit v1.2.3