Check if email already exists & fix last admin check

This commit is contained in:
William Bouzourène 2025-01-03 16:21:40 +01:00
parent 1705ac7353
commit 91300d957b

View file

@ -108,6 +108,16 @@ func UserAdd(c *fiber.Ctx) error {
user.Name = data.Name user.Name = data.Name
user.Email = data.Email user.Email = data.Email
var usersEmail []models.User
result := db.Find(&usersEmail, "email = ?", user.Email)
if result.Error != nil {
return result.Error
}
if result.RowsAffected > 0 {
errors = append(errors, "L'adresse email est déjà utilisée par un autre utilisateur")
}
passwordHash, err := helpers.HashPassword(data.Password) passwordHash, err := helpers.HashPassword(data.Password)
if err != nil { if err != nil {
return err return err
@ -119,7 +129,7 @@ func UserAdd(c *fiber.Ctx) error {
user.IsAdmin = (c.FormValue("is_admin") == "on") user.IsAdmin = (c.FormValue("is_admin") == "on")
if len(errors) == 0 { if len(errors) == 0 {
result := db.Create(&user) result = db.Create(&user)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} else { } else {
@ -191,6 +201,16 @@ func UserEdit(c *fiber.Ctx) error {
user.Name = data.Name user.Name = data.Name
user.Email = data.Email user.Email = data.Email
var usersEmail []models.User
result := db.Find(&usersEmail, "email = ? AND id <> ?", user.Email, user.ID)
if result.Error != nil {
return result.Error
}
if result.RowsAffected > 0 {
errors = append(errors, "L'adresse email est déjà utilisée par un autre utilisateur")
}
if len(data.Password) > 0 { if len(data.Password) > 0 {
passwordHash, err := helpers.HashPassword(data.Password) passwordHash, err := helpers.HashPassword(data.Password)
if err != nil { if err != nil {
@ -207,14 +227,16 @@ func UserEdit(c *fiber.Ctx) error {
user.IsAdmin = (c.FormValue("is_admin") == "on") user.IsAdmin = (c.FormValue("is_admin") == "on")
var users []models.User if !user.IsAdmin {
result := db.Find(&users, "is_admin = ?", true) var users []models.User
if result.Error != nil { result = db.Find(&users, "is_admin = ? AND id <> ?", true, user.ID)
return result.Error if result.Error != nil {
} return result.Error
}
if !user.IsAdmin && result.RowsAffected < 2 { if result.RowsAffected < 1 {
errors = append(errors, "Il doit y avoir au moins un administrateur") errors = append(errors, "Il doit y avoir au moins un administrateur")
}
} }
if len(errors) == 0 { if len(errors) == 0 {