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 (
|
||||
"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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue