This commit is contained in:
cangui 2025-05-09 17:34:32 +02:00
parent 97900074f9
commit 3c6a00b96e
2 changed files with 58 additions and 18 deletions

View File

@ -56,7 +56,7 @@ func AdminUserEdit(db *gorm.DB) http.HandlerFunc {
renderPartial(w, "admin_user_edit", data) renderPartial(w, "admin_user_edit", data)
} }
} }
func AdminUserCreate(db *gorm.DB) http.HandlerFunc { func CreateUserHandler(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil { if err := r.ParseForm(); err != nil {
http.Error(w, "Formulaire invalide", http.StatusBadRequest) http.Error(w, "Formulaire invalide", http.StatusBadRequest)
@ -65,34 +65,53 @@ func AdminUserCreate(db *gorm.DB) http.HandlerFunc {
email := r.FormValue("email") email := r.FormValue("email")
password := r.FormValue("password") password := r.FormValue("password")
role := models.UserRole(r.FormValue("role")) role := r.FormValue("role")
monthlyCreditsStr := r.FormValue("monthly_credits")
waToken := r.FormValue("whatsapp_token")
waPhoneID := r.FormValue("whatsapp_phone_number_id")
hashed, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if email == "" || password == "" {
http.Error(w, "Email et mot de passe requis", http.StatusBadRequest)
return
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil { if err != nil {
http.Error(w, "Erreur hash", http.StatusInternalServerError) http.Error(w, "Erreur hash mot de passe", http.StatusInternalServerError)
return return
} }
ssoid := "sso_" + uuid.New().String() monthlyCredits := uint(100)
user := models.User{ if monthlyCreditsStr != "" {
if val, err := strconv.Atoi(monthlyCreditsStr); err == nil {
monthlyCredits = uint(val)
}
}
newUser := models.User{
Email: email, Email: email,
Password: string(hashed), Password: string(hashedPassword),
Role: role, Role: models.UserRole(role),
SSOID: uuid.New().String(),
IsActive: true, IsActive: true,
SSOID: ssoid, MonthlyCredits: monthlyCredits,
CurrentMonthCredits: monthlyCredits,
WhatsappToken: waToken,
WhatsappPhoneNumberID: waPhoneID,
} }
if err := db.Create(&user).Error; err != nil { if err := db.Create(&newUser).Error; err != nil {
http.Error(w, "Erreur enregistrement", http.StatusInternalServerError) http.Error(w, "Erreur lors de la création", http.StatusInternalServerError)
return return
} }
w.Header().Set("HX-Trigger", `{"userCreated":"Utilisateur créé avec succès"}`) w.Header().Set("HX-Trigger", "userCreated")
w.Header().Set("HX-Remove", "true") // cache le form w.WriteHeader(http.StatusOK)
renderPartial(w, "admin_user_row", map[string]interface{}{"User": user}) w.Write([]byte("<article class='message is-success'><div class='message-body'>Utilisateur créé avec succès.</div></article>"))
} }
} }
func AdminUserCreateForm() http.HandlerFunc { func AdminUserCreateForm() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
renderPartial(w, "admin_user_create", nil) renderPartial(w, "admin_user_create", nil)

View File

@ -27,12 +27,33 @@
</div> </div>
</div> </div>
<div class="field is-grouped"> <div class="field">
<label class="label">Crédits mensuels</label>
<div class="control">
<input class="input" type="number" name="monthly_credits" placeholder="100" min="1">
</div>
</div>
<div class="field">
<label class="label">WhatsApp Token</label>
<div class="control">
<input class="input" type="text" name="whatsapp_token" placeholder="EAAxxxxxxxxxxxxxxxxxx">
</div>
</div>
<div class="field">
<label class="label">Phone Number ID</label>
<div class="control">
<input class="input" type="text" name="whatsapp_phone_number_id" placeholder="123456789">
</div>
</div>
<div class="field is-grouped mt-4">
<div class="control"> <div class="control">
<button class="button is-success" type="submit">✅ Créer</button> <button class="button is-success" type="submit">✅ Créer</button>
</div> </div>
<div class="control"> <div class="control">
<button type="button" class="button is-light" hx-get="javascript:void(0)" onclick="document.getElementById('createForm').innerHTML = ''">❌ Annuler</button> <button type="button" class="button is-light" onclick="document.getElementById('createForm').innerHTML = ''">❌ Annuler</button>
</div> </div>
</div> </div>