package routing import ( "lishwist/api/db" "lishwist/rsvp" "net/http" ) func Users(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response { if !currentUser.IsAdmin { return NotFound(h, r) } users, err := db.GetAllUsers() if err != nil { return rsvp.Error(http.StatusInternalServerError, "Failed to get users: %s", err) } return rsvp.Data("", users) } func User(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response { if !currentUser.IsAdmin { return NotFound(h, r) } reference := r.PathValue("userReference") user, err := db.GetUserByReference(reference) if err != nil { return rsvp.Error(http.StatusInternalServerError, "Failed to get user: %s", err) } if user == nil { return rsvp.Error(http.StatusNotFound, "User not found") } return rsvp.Data("", user) } func UserPost(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response { if !currentUser.IsAdmin { return NotFound(h, r) } form := r.ParseForm() reference := r.PathValue("userReference") if reference == currentUser.Reference { return rsvp.Error(http.StatusForbidden, "You cannot delete yourself.") } user, err := db.GetAnyUserByReference(reference) if err != nil { return rsvp.Error(http.StatusInternalServerError, "Failed to get user: %s", err) } if user == nil { return rsvp.Error(http.StatusNotFound, "User not found") } intent := form.Get("intent") if intent != "" { err = user.SetLive(intent != "delete") if err != nil { return rsvp.Error(http.StatusInternalServerError, "Failed to delete user: %s", err) } } return rsvp.Data("", user) }