package users import ( "errors" "server/internal/systemUtils" "time" "github.com/gofiber/fiber/v3" "gorm.io/gorm" ) func UpdateUserPassword(db *gorm.DB, req UpdatePasswordRequest, uuid string) error { user := User{} if err := db.Where("uuid = ?", uuid).First(&user).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return fiber.NewError(fiber.StatusNotFound, "user not found") } return fiber.NewError(fiber.StatusInternalServerError, "failed to load user") } hashedPassword, err := systemUtils.HashPassword(req.Password) if err != nil { return fiber.NewError(fiber.StatusInternalServerError, "failed to secure password") } now := time.Now().UTC() if err := db.Model(&user).Updates(map[string]any{ "password": hashedPassword, "updated_at": now, }).Error; err != nil { return fiber.NewError(fiber.StatusInternalServerError, "failed to update password") } if err := db.Where("user_id = ?", user.ID).Delete(&Session{}).Error; err != nil { return fiber.NewError(fiber.StatusInternalServerError, "failed to revoke sessions") } return nil }