Friendly duplicate-name errors on create/edit
UNIQUE constraint violations from rack/device/model creation and editing now show readable messages like 'A rack named X already exists, onii-chan' instead of raw SQLite error strings or silent redirects.master
parent
56c525cb26
commit
75255d5551
|
|
@ -3,6 +3,7 @@ package handlers
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"lostcavewireplanner/internal/models"
|
"lostcavewireplanner/internal/models"
|
||||||
)
|
)
|
||||||
|
|
@ -84,7 +85,11 @@ func (h *Handlers) DeviceCreate(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
id, err := h.Store.DeviceCreate(device)
|
id, err := h.Store.DeviceCreate(device)
|
||||||
if err != nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,11 @@ func (h *Handlers) ModelCreate(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
_, err := h.Store.ModelCreate(m, "uploads")
|
_, err := h.Store.ModelCreate(m, "uploads")
|
||||||
if err != nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -138,7 +142,11 @@ func (h *Handlers) ModelUpdate(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := h.Store.ModelUpdate(m); err != nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package handlers
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"lostcavewireplanner/internal/models"
|
"lostcavewireplanner/internal/models"
|
||||||
)
|
)
|
||||||
|
|
@ -86,7 +87,11 @@ func (h *Handlers) RackCreate(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
_, err := h.Store.RackCreate(rack)
|
_, err := h.Store.RackCreate(rack)
|
||||||
if err != nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
h.redirect(w, r, "/")
|
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)
|
http.Error(w, errMsg, http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func renderDeviceCreateError(h *Handlers, w http.ResponseWriter, errMsg string) {
|
||||||
|
renderOverviewError(h, w, errMsg)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -146,7 +146,11 @@ func (h *Handlers) RackEdit(w http.ResponseWriter, r *http.Request) {
|
||||||
rack.Comment = r.FormValue("comment")
|
rack.Comment = r.FormValue("comment")
|
||||||
|
|
||||||
if err := h.Store.RackUpdate(rack); err != nil {
|
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
|
return
|
||||||
}
|
}
|
||||||
h.redirect(w, r, "/racks/"+idStr)
|
h.redirect(w, r, "/racks/"+idStr)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue