This commit is contained in:
cangui 2025-05-09 17:50:18 +02:00
parent 43c3c53d7f
commit 6bab90e406
3 changed files with 40 additions and 22 deletions

View File

@ -539,20 +539,21 @@ func AdminUserDelete(db *gorm.DB) http.HandlerFunc {
id := mux.Vars(r)["id"]
var user models.User
if err := db.First(&user, id).Error; err != nil {
if err := db.Unscoped().First(&user, id).Error; err != nil {
http.Error(w, "Utilisateur introuvable", http.StatusNotFound)
return
}
if err := db.Delete(&user).Error; err != nil {
// Suppression définitive
if err := db.Unscoped().Delete(&user).Error; err != nil {
http.Error(w, "Erreur suppression", http.StatusInternalServerError)
return
}
// On retourne du HTML vide car on swap "outerHTML"
w.WriteHeader(http.StatusOK)
w.Write([]byte(""))
}
}

View File

@ -18,7 +18,6 @@ type User struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
NameClient string `gorm:"not null"`
Password string `gorm:"not null"` // hashé avec bcrypt

View File

@ -137,10 +137,11 @@ func AdminUserEditForm(db *gorm.DB) http.HandlerFunc {
}
func AdminUserUpdate(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
idStr := mux.Vars(r)["id"]
id, err := strconv.Atoi(idStr)
if err != nil {
http.Error(w, "ID invalide", http.StatusBadRequest)
id := mux.Vars(r)["id"]
var user models.User
if err := db.First(&user, id).Error; err != nil {
http.Error(w, "Utilisateur introuvable", http.StatusNotFound)
return
}
@ -149,33 +150,50 @@ func AdminUserUpdate(db *gorm.DB) http.HandlerFunc {
return
}
var user models.User
if err := db.First(&user, id).Error; err != nil {
http.Error(w, "Utilisateur introuvable", http.StatusNotFound)
return
email := r.FormValue("email")
password := r.FormValue("password")
role := r.FormValue("role")
isActive := r.FormValue("is_active") == "on"
waToken := r.FormValue("whatsapp_token")
waPhoneID := r.FormValue("whatsapp_phone_number_id")
monthlyCreditsStr := r.FormValue("monthly_credits")
user.Email = email
user.Role = models.UserRole(role)
user.IsActive = isActive
user.WhatsappToken = waToken
user.WhatsappPhoneNumberID = waPhoneID
if monthlyCreditsStr != "" {
if val, err := strconv.Atoi(monthlyCreditsStr); err == nil {
user.MonthlyCredits = uint(val)
}
}
// Mise à jour des champs
user.Email = r.FormValue("email")
user.Role = models.UserRole(r.FormValue("role"))
user.IsActive = r.FormValue("is_active") == "on"
if password != "" {
hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
http.Error(w, "Erreur de hachage du mot de passe", http.StatusInternalServerError)
return
}
user.Password = string(hash)
}
if err := db.Save(&user).Error; err != nil {
http.Error(w, "Erreur mise à jour", http.StatusInternalServerError)
http.Error(w, "Erreur lors de la mise à jour", http.StatusInternalServerError)
return
}
// Réafficher la ligne utilisateur mise à jour
data := map[string]interface{}{
"User": user,
}
renderPartial(w, "admin_user_row", data)
w.Header().Set("HX-Trigger", "userUpdated")
w.WriteHeader(http.StatusOK)
w.Write([]byte("<article class='message is-success'><div class='message-body'>Utilisateur mis à jour avec succès.</div></article>"))
}
}
func AdminConversationPage(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
idStr := mux.Vars(r)["id"]