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"] id := mux.Vars(r)["id"]
var user models.User 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) http.Error(w, "Utilisateur introuvable", http.StatusNotFound)
return 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) http.Error(w, "Erreur suppression", http.StatusInternalServerError)
return return
} }
// On retourne du HTML vide car on swap "outerHTML"
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
w.Write([]byte("")) w.Write([]byte(""))
} }
} }

View File

@ -18,7 +18,6 @@ type User struct {
ID uint `gorm:"primaryKey"` ID uint `gorm:"primaryKey"`
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
DeletedAt gorm.DeletedAt `gorm:"index"`
NameClient string `gorm:"not null"` NameClient string `gorm:"not null"`
Password string `gorm:"not null"` // hashé avec bcrypt 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 { func AdminUserUpdate(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
idStr := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
id, err := strconv.Atoi(idStr)
if err != nil { var user models.User
http.Error(w, "ID invalide", http.StatusBadRequest) if err := db.First(&user, id).Error; err != nil {
http.Error(w, "Utilisateur introuvable", http.StatusNotFound)
return return
} }
@ -149,33 +150,50 @@ func AdminUserUpdate(db *gorm.DB) http.HandlerFunc {
return return
} }
var user models.User email := r.FormValue("email")
if err := db.First(&user, id).Error; err != nil { password := r.FormValue("password")
http.Error(w, "Utilisateur introuvable", http.StatusNotFound) role := r.FormValue("role")
return 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 if password != "" {
user.Email = r.FormValue("email") hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
user.Role = models.UserRole(r.FormValue("role")) if err != nil {
user.IsActive = r.FormValue("is_active") == "on" 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 { 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 return
} }
// Réafficher la ligne utilisateur mise à jour w.Header().Set("HX-Trigger", "userUpdated")
data := map[string]interface{}{ w.WriteHeader(http.StatusOK)
"User": user, w.Write([]byte("<article class='message is-success'><div class='message-body'>Utilisateur mis à jour avec succès.</div></article>"))
}
renderPartial(w, "admin_user_row", data)
} }
} }
func AdminConversationPage(db *gorm.DB) http.HandlerFunc { func AdminConversationPage(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
idStr := mux.Vars(r)["id"] idStr := mux.Vars(r)["id"]