package handlers import ( "fmt" "net/http" "strconv" "erp_system/internal/models" ) func (h *Handler) UserList(w http.ResponseWriter, r *http.Request) { users, err := models.UserGetAll(h.DB) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } data := map[string]interface{}{ "Title": "Users", "ActivePage": "users", "Users": users, } h.render(w, r, []string{"layout.html", "users/list.html"}, data) } func (h *Handler) UserNew(w http.ResponseWriter, r *http.Request) { data := map[string]interface{}{ "Title": "New User", "ActivePage": "users", "User": &models.User{}, "IsNew": true, } h.render(w, r, []string{"layout.html", "users/form.html"}, data) } func (h *Handler) UserCreate(w http.ResponseWriter, r *http.Request) { username := r.FormValue("username") password := r.FormValue("password") role := r.FormValue("role") if username == "" || password == "" { data := map[string]interface{}{ "Title": "New User", "ActivePage": "users", "User": &models.User{Username: username, Role: role}, "IsNew": true, "Error": "Username and Password are required", } h.render(w, r, []string{"layout.html", "users/form.html"}, data) return } if err := models.UserCreate(h.DB, username, password, role); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if r.Header.Get("HX-Request") == "true" { w.Header().Set("HX-Redirect", "/users") return } http.Redirect(w, r, "/users", http.StatusSeeOther) } func (h *Handler) UserDelete(w http.ResponseWriter, r *http.Request) { id, _ := strconv.Atoi(r.PathValue("id")) // Prevent deleting yourself session, _ := h.Store.Get(r, "erp-session") currentUserID := session.Values["user_id"].(int) if id == currentUserID { w.Header().Set("HX-Trigger", `{"showMessage": "Cannot delete yourself"}`) w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Cannot delete yourself") return } if err := models.UserDelete(h.DB, id); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if r.Header.Get("HX-Request") == "true" { // Just remove the row from the table or reload // Since it's a delete action, usually redirect or reload list w.Header().Set("HX-Refresh", "true") return } http.Redirect(w, r, "/users", http.StatusSeeOther) }