@@ -38,6 +38,13 @@ from payments.models.payment_plan import PaymentPlan from payments.selectors.payment_plan_selector import PaymentPlanSelector from payments.services.payment_plan_service import PaymentPlanService +from django.conf import settings +from rest_framework.exceptions import APIException +import logging +import httpx + + +logger = logging.getLogger(__name__) class BusinessHostService: def __init__(self, user: CustomUserModel): @@ -113,10 +120,23 @@ class BusinessHostService: serializer = NewBusinessAccountSerializer(data=request.data) serializer.is_valid(raise_exception=True) - account = self.create_existing(**serializer.validated_data).account - return BusinessAccountDataSerializer( - account, context={'account_type': 'business_account'} - ) + email = serializer.validated_data['email'] + if CustomUserModel.objects.filter(email=serializer.validated_data.get("email")).exists(): + raise ValueError("Этот email уже зарегистрирован в системе.") + try: + response = httpx.get(settings.EMAIL_CHECKER_URL, params={'api_key': settings.EMAIL_CHECKER_API_KEY, 'email': email}) + if response.status_code == 422: + logger.error("Ошибка сервиса EMAILCHECKER.") + raise APIException(400, "не получилось отправить запрос, попробуйте позже") + elif response.status_code < 400 and response.json() and response.json().get('deliverability') == "DELIVERABLE": + account = self.create_existing(**serializer.validated_data).account + return BusinessAccountDataSerializer(account, context={'account_type': 'business_account'}) + else: + logger.error("Undeliverability email.") + raise Exception("Email недействительный") + except Exception as exc: + logger.exception("Ошибка при создании учетной записи:") + raise APIException(f"Произошла ошибка при создании учетной записи: {exc}") from exc def update_token_limit( self, @@ -326,6 +326,9 @@ GOOGLE_API_KEY = env.str('GOOGLE_API_KEY', default='defaultapikey') SERPER_API_KEY = env.str('SERPER_API_KEY', 'defaultapikey') FLUX_API_KEY = env.str('FLUX_API_KEY', 'defaultapikey') +EMAIL_CHECKER_API_KEY = env.str('EMAIL_CHECKER_API_KEY', 'defaultapikey') +EMAIL_CHECKER_URL = env.str('EMAIL_CHECKER_URL', 'https://emailvalidation.abstractapi.com/v1/') + OPENAI_PROXY_HOST = env.str('OPENAI_PROXY_HOST', 'neuron-proxy:8080') UPSCALE_MULTIPLIER_HOST = env.str('UPSCALE_MULTIPLIER_HOST', 'packet:8080')