From 0b2490ed46d1958625dc3c660455a5465adaf763 Mon Sep 17 00:00:00 2001
From: Michael Hunteman <michael@huntm.net>
Date: Sat, 18 May 2024 15:04:43 -0700
Subject: Add more error handling

---
 server/cmd/main.go | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

(limited to 'server/cmd')

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