@@ -0,0 +1,25 @@ +# Generated by Django 5.0.11 on 2025-11-06 08:20 + +from django.db import migrations + +from core.utils import slugify + + +def change_user_username(apps, schema_editor): + BusinessAccount = apps.get_model('authentication', 'BusinessAccount') + CustomUserModel = apps.get_model('authentication', 'CustomUserModel') + user_bulk_update = [] + for b_acc in BusinessAccount.objects.all(): + b_acc.user.username = slugify(b_acc.user.email.split('@')[0]) + user_bulk_update.append(b_acc.user) + CustomUserModel.objects.bulk_update(user_bulk_update, ['username']) + + +class Migration(migrations.Migration): + dependencies = [ + ('authentication', '0024_alter_customusermodel_email'), + ] + + operations = [ + migrations.RunPython(change_user_username, reverse_code=migrations.RunPython.noop) + ] @@ -1,3 +1,5 @@ +import itertools +import re from decimal import Decimal from typing import Any, Tuple @@ -49,6 +51,7 @@ from authentication.services.business_account_service import ( ) from authentication.services.email_service import EmailService from authentication.utils import generate_token +from core.utils import slugify from ml_model.models import NeuronModel from ml_model.utils import random_with_N_digits from payments.models.payment_plan import PaymentPlan @@ -66,7 +69,20 @@ class BusinessHostService: token_limit: Decimal | None = None, account_privileges: Tuple[str, Any] | None = None, ) -> BusinessAccountService: - username = f'{self.user.host_account.company_name}_{random_with_N_digits(6)}' + username = f'{slugify(email.split('@')[0])}' + similar_users = CustomUserModel.objects.filter( + username__regex=rf'^{re.escape(username)}\d*$' + ).values_list('username', flat=True) + if similar_users: + suffixes = [ + int(re.match(rf'^{re.escape(username)}(\d*)$', u).group(1) or 0) + for u in similar_users + ] + for i in itertools.count(0): + if i not in suffixes: + if i > 0: + username += str(i) + break password = generate_token(15) user = CustomUserModel.objects.create_user(username=username, email=email, password=password) user.save() @@ -237,7 +237,7 @@ class NewBusinessHostSerializer(serializers.Serializer): usage_intensity = serializers.ChoiceField(choices=UsageIntensity.choices) ITN = serializers.IntegerField() PSRN = serializers.IntegerField() - company_name = serializers.CharField() + company_name = serializers.CharField(required=False) preferred_name = serializers.CharField(required=False) corporate_email = serializers.EmailField(required=False) corporate_phone = serializers.CharField(required=False)