91 lines
2.3 KiB
Go
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)
|
|
}
|