diff --git a/veza-backend-api/internal/core/auth/service.go b/veza-backend-api/internal/core/auth/service.go index 7764f5c2c..4dc4abdf5 100644 --- a/veza-backend-api/internal/core/auth/service.go +++ b/veza-backend-api/internal/core/auth/service.go @@ -113,12 +113,32 @@ func (s *AuthService) Register(ctx context.Context, email, username, password st return nil, err } + // Générer un slug unique à partir du username + // Le slug doit être unique, donc on vérifie et on ajoute un suffixe si nécessaire + baseSlug := strings.ToLower(username) + slug := baseSlug + counter := 1 + for { + var count int64 + err := s.db.WithContext(ctx).Model(&models.User{}).Where("slug = ?", slug).Count(&count).Error + if err == nil && count == 0 { + break + } + slug = fmt.Sprintf("%s%d", baseSlug, counter) + counter++ + if counter > 1000 { + // Fallback: utiliser un timestamp si trop de collisions + slug = fmt.Sprintf("user_%d", time.Now().Unix()) + break + } + } + // Créer l'utilisateur dans la base de données user := &models.User{ ID: uuid.New(), // Générer un nouvel UUID Email: email, Username: username, - Slug: strings.ToLower(username), + Slug: slug, PasswordHash: string(hashedPassword), Role: "user", // Valeur par défaut IsActive: true, // Valeur par défaut