ERP/internal/handlers/users.go
2026-02-08 14:20:18 +01:00

91 lines
2.3 KiB
Go

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)
}