diff --git a/internal/handlers/devices.go b/internal/handlers/devices.go index a9e8a1a..4b378ec 100644 --- a/internal/handlers/devices.go +++ b/internal/handlers/devices.go @@ -3,6 +3,7 @@ package handlers import ( "net/http" "strconv" + "strings" "lostcavewireplanner/internal/models" ) @@ -84,7 +85,11 @@ func (h *Handlers) DeviceCreate(w http.ResponseWriter, r *http.Request) { id, err := h.Store.DeviceCreate(device) if err != nil { - h.redirect(w, r, "/") + msg := err.Error() + if strings.Contains(strings.ToLower(msg), "unique") { + msg = "A device named '" + name + "' already exists, onii-chan." + } + renderDeviceCreateError(h, w, msg) return } diff --git a/internal/handlers/models.go b/internal/handlers/models.go index 9a5b160..57ecdc1 100644 --- a/internal/handlers/models.go +++ b/internal/handlers/models.go @@ -84,7 +84,11 @@ func (h *Handlers) ModelCreate(w http.ResponseWriter, r *http.Request) { _, err := h.Store.ModelCreate(m, "uploads") if err != nil { - h.render(w, "model_form.html", ModelFormData{Model: m, IsEdit: false, Error: err.Error()}) + msg := err.Error() + if strings.Contains(strings.ToLower(msg), "unique") { + msg = "A model named '" + m.Name + "' already exists, onii-chan." + } + h.render(w, "model_form.html", ModelFormData{Model: m, IsEdit: false, Error: msg}) return } @@ -138,7 +142,11 @@ func (h *Handlers) ModelUpdate(w http.ResponseWriter, r *http.Request) { } if err := h.Store.ModelUpdate(m); err != nil { - h.render(w, "model_form.html", ModelFormData{Model: m, IsEdit: true, Error: err.Error()}) + msg := err.Error() + if strings.Contains(strings.ToLower(msg), "unique") { + msg = "A model named '" + m.Name + "' already exists, onii-chan." + } + h.render(w, "model_form.html", ModelFormData{Model: m, IsEdit: true, Error: msg}) return } diff --git a/internal/handlers/overview.go b/internal/handlers/overview.go index f65af8c..8c125a0 100644 --- a/internal/handlers/overview.go +++ b/internal/handlers/overview.go @@ -3,6 +3,7 @@ package handlers import ( "net/http" "strconv" + "strings" "lostcavewireplanner/internal/models" ) @@ -86,7 +87,11 @@ func (h *Handlers) RackCreate(w http.ResponseWriter, r *http.Request) { } _, err := h.Store.RackCreate(rack) if err != nil { - h.renderError(w, "overview.html", err.Error()) + msg := err.Error() + if strings.Contains(strings.ToLower(msg), "unique") { + msg = "A rack with this name already exists, onii-chan." + } + h.renderError(w, "overview.html", msg) return } h.redirect(w, r, "/") @@ -133,3 +138,7 @@ func (h *Handlers) renderError(w http.ResponseWriter, page string, errMsg string http.Error(w, errMsg, http.StatusBadRequest) } } + +func renderDeviceCreateError(h *Handlers, w http.ResponseWriter, errMsg string) { + renderOverviewError(h, w, errMsg) +} diff --git a/internal/handlers/racks.go b/internal/handlers/racks.go index ce25fe0..227ad0e 100644 --- a/internal/handlers/racks.go +++ b/internal/handlers/racks.go @@ -146,7 +146,11 @@ func (h *Handlers) RackEdit(w http.ResponseWriter, r *http.Request) { rack.Comment = r.FormValue("comment") if err := h.Store.RackUpdate(rack); err != nil { - h.renderRackError(w, *rack, "Failed to update: "+err.Error()) + msg := err.Error() + if strings.Contains(strings.ToLower(msg), "unique") { + msg = "A rack named '" + rack.Name + "' already exists, onii-chan." + } + h.renderRackError(w, *rack, msg) return } h.redirect(w, r, "/racks/"+idStr)