diff --git a/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_closed.py b/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_closed.py index 4941ae66..b8d03787 100644 --- a/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_closed.py +++ b/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_closed.py @@ -9,17 +9,17 @@ @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture def visit_member_landing_page_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._core_facade.visit_member_landing_page') + return mocker.patch('pythonpro.domain.user_domain._core_facade.visit_member_landing_page') @pytest.fixture def subscribe_to_waiting_list_mock(mocker): - return mocker.patch('pythonpro.checkout.views.user_facade.subscribe_to_waiting_list') + return mocker.patch('pythonpro.checkout.views.user_domain.subscribe_to_waiting_list') begin_and_finish = [ @@ -79,7 +79,7 @@ def test_post_with_user(dt, client, freezer, subscribe_to_waiting_list_mock, log @pytest.fixture def subscribe_anonymous_user_to_waiting_list_mock(mocker): - return mocker.patch('pythonpro.checkout.views.user_facade.subscribe_anonymous_user_to_waiting_list') + return mocker.patch('pythonpro.checkout.views.user_domain.subscribe_anonymous_user_to_waiting_list') @pytest.mark.parametrize('dt', begin_and_finish) diff --git a/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_open.py b/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_open.py index 2d11caf6..ee5ef6fd 100644 --- a/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_open.py +++ b/pythonpro/checkout/tests/test_bootcamp_lp_when_subscription_open.py @@ -9,7 +9,7 @@ @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/checkout/tests/test_bootcamp_redirects.py b/pythonpro/checkout/tests/test_bootcamp_redirects.py index 6444c630..154a8d22 100644 --- a/pythonpro/checkout/tests/test_bootcamp_redirects.py +++ b/pythonpro/checkout/tests/test_bootcamp_redirects.py @@ -8,7 +8,7 @@ @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') def assert_redirect_with_querystring(client, from_path, tag_as_mock, to_path): diff --git a/pythonpro/checkout/tests/test_waiting_list_ty.py b/pythonpro/checkout/tests/test_waiting_list_ty.py index 01363dcf..08b516d3 100644 --- a/pythonpro/checkout/tests/test_waiting_list_ty.py +++ b/pythonpro/checkout/tests/test_waiting_list_ty.py @@ -1,7 +1,7 @@ import pytest from django.urls import reverse -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain @pytest.fixture @@ -12,7 +12,7 @@ def subscription_closed(settings): @pytest.fixture def create_or_update_with_no_role_mock(mocker): create_or_update_with_no_role = mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_with_no_role.delay' + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_with_no_role.delay' ) return create_or_update_with_no_role @@ -40,7 +40,7 @@ def test_status_code(resp): def test_user_interacton(resp, logged_user): - assert 'WAITING_LIST' == user_facade.find_user_interactions(logged_user)[0].category + assert 'WAITING_LIST' == user_domain.find_user_interactions(logged_user)[0].category @pytest.fixture diff --git a/pythonpro/checkout/views.py b/pythonpro/checkout/views.py index 4b316b91..6023cfda 100644 --- a/pythonpro/checkout/views.py +++ b/pythonpro/checkout/views.py @@ -12,7 +12,7 @@ from pythonpro.checkout import forms as checkout_forms from pythonpro.checkout.forms import WaitingForm from pythonpro.core.facade import is_webdev -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain def _redirect_to_bootcamp_lp(request): @@ -36,9 +36,9 @@ def bootcamp_lp(request): source = request.GET.get('utm_source', default='unknown') data = form.cleaned_data if request.user.is_authenticated: - user_facade.subscribe_to_waiting_list(request.user, data['phone'], source) + user_domain.subscribe_to_waiting_list(request.user, data['phone'], source) else: - user_facade.subscribe_anonymous_user_to_waiting_list( + user_domain.subscribe_anonymous_user_to_waiting_list( data['email'], data['first_name'], data['phone'], source ) return redirect(reverse('checkout:waiting_list_ty')) @@ -46,7 +46,7 @@ def bootcamp_lp(request): if not checkout_facade.is_launch_open(): if request.user.is_authenticated: - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) form = checkout_forms.WaitingForm() return render(request, 'checkout/bootcamp_lp_subscription_closed.html', {'form': form}) @@ -57,7 +57,7 @@ def bootcamp_lp(request): def _no_wevdev_discount(request, discount_slug, promotion_end_date, template_name='checkout/bootcamp_lp_subscription_open.html'): if request.user.is_authenticated: - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) form = facade.ContactForm() payment_item_config = facade.find_payment_item_config(discount_slug) @@ -167,7 +167,7 @@ def bootcamp_lp_d3(request): return _redirect_to_bootcamp_lp(request) if request.user.is_authenticated: - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) form = facade.ContactForm() payment_item_config = no_discount_item_config = facade.find_payment_item_config('bootcamp') @@ -198,7 +198,7 @@ def bootcamp_lp_d3_webdev(request): if not is_debug and (has_discount or not (checkout_facade.is_launch_open() and is_webdev(user))): return _redirect_to_bootcamp_lp(request) - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) has_client_discount = True data = {'name': request.user.first_name, 'email': request.user.email} form = facade.ContactForm(data) @@ -284,7 +284,7 @@ def _render_with_webdev_and_first_day_discounts( request, client_discount_slug, first_day_discount_slug, promotion_end_date, template_name='checkout/bootcamp_lp_subscription_open.html' ): - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) has_client_discount = True data = {'name': request.user.first_name, 'email': request.user.email} form = facade.ContactForm(data) diff --git a/pythonpro/core/admin.py b/pythonpro/core/admin.py index 6f2aa792..b812d122 100644 --- a/pythonpro/core/admin.py +++ b/pythonpro/core/admin.py @@ -56,42 +56,42 @@ class UserAdmin(RolePermissionsUserAdminMixin, admin.ModelAdmin): actions = ['make_bootcamper', 'make_webdev', 'make_member', 'make_data_scientist', 'make_pythonista'] def make_webdev(self, request, queryset): - from pythonpro.domain import user_facade + from pythonpro.domain import user_domain for user in queryset: try: - user_facade.promote_webdev(user, 'django_admin') + user_domain.promote_webdev(user, 'django_admin') except UserRoleException: pass # No need to handle on admin def make_bootcamper(self, request, queryset): - from pythonpro.domain import user_facade + from pythonpro.domain import user_domain for user in queryset: try: - user_facade.promote_bootcamper(user, 'django_admin') + user_domain.promote_bootcamper(user, 'django_admin') except UserRoleException: pass # No need to handle on admin def make_pythonista(self, request, queryset): - from pythonpro.domain import user_facade + from pythonpro.domain import user_domain for user in queryset: try: - user_facade.promote_pythonista(user, 'django_admin') + user_domain.promote_pythonista(user, 'django_admin') except UserRoleException: pass # No need to handle on admin def make_data_scientist(self, request, queryset): - from pythonpro.domain import user_facade + from pythonpro.domain import user_domain for user in queryset: try: - user_facade.promote_data_scientist(user, 'django_admin') + user_domain.promote_data_scientist(user, 'django_admin') except UserRoleException: pass # No need to handle on admin def make_member(self, request, queryset): - from pythonpro.domain import user_facade + from pythonpro.domain import user_domain for user in queryset: try: - user_facade.promote_member(user, 'django_admin') + user_domain.promote_member(user, 'django_admin') except UserRoleException: pass # No need to handle on admin diff --git a/pythonpro/core/tests/test_admin.py b/pythonpro/core/tests/test_admin.py index 15d92819..2e2f56bc 100644 --- a/pythonpro/core/tests/test_admin.py +++ b/pythonpro/core/tests/test_admin.py @@ -4,23 +4,23 @@ from rolepermissions.roles import RolesManager from pythonpro.core.admin import UserAdmin -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain @pytest.fixture def sync_user_delay(mocker): - return mocker.patch('pythonpro.domain.user_facade.sync_user_on_discourse.delay') + return mocker.patch('pythonpro.domain.user_domain.sync_user_on_discourse.delay') @pytest.fixture def email_market_mocks(mocker): - maybe_function_names = dir(user_facade._email_marketing_facade) + maybe_function_names = dir(user_domain._email_marketing_facade) task_function_mocks = [] for name in maybe_function_names: - maybe_task_function = getattr(user_facade._email_marketing_facade, name) + maybe_task_function = getattr(user_domain._email_marketing_facade, name) if hasattr(maybe_task_function, 'delay'): task_function_mocks.append(mocker.patch( - f'pythonpro.domain.user_facade._email_marketing_facade.{name}.delay', side_effeict=maybe_task_function + f'pythonpro.domain.user_domain._email_marketing_facade.{name}.delay', side_effeict=maybe_task_function )) return task_function_mocks diff --git a/pythonpro/core/tests/test_lead_landing_page.py b/pythonpro/core/tests/test_lead_landing_page.py index 187cd42f..1498d468 100644 --- a/pythonpro/core/tests/test_lead_landing_page.py +++ b/pythonpro/core/tests/test_lead_landing_page.py @@ -74,7 +74,7 @@ def test_user_with_webdev_roles_can_access_landing_page(resp_with_user_with_webd @pytest.fixture def create_lead_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.create_or_update_lead.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.create_or_update_lead.delay') @pytest.fixture() @@ -141,7 +141,7 @@ def resp_lead_change_pasword(resp_lead_creation, client): @pytest.fixture(autouse=True) def sync_user_delay(mocker): - return mocker.patch('pythonpro.domain.user_facade.sync_user_on_discourse.delay') + return mocker.patch('pythonpro.domain.user_domain.sync_user_on_discourse.delay') def test_user_discourse_sync(resp_lead_creation, sync_user_delay): diff --git a/pythonpro/core/views.py b/pythonpro/core/views.py index 6fec50b9..b8222d1b 100644 --- a/pythonpro/core/views.py +++ b/pythonpro/core/views.py @@ -14,7 +14,7 @@ from pythonpro.core import facade as core_facade from pythonpro.core.forms import LeadForm, UserEmailForm, UserSignupForm, PythonProResetForm from pythonpro.core.models import User -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain def index(request): @@ -187,8 +187,8 @@ def _lead_form(request, *args, **kwargs): tags.append(f"{key}={value}") try: - user = user_facade.register_lead(first_name, email, source, tags=tags) - except user_facade.UserCreationException as e: + user = user_domain.register_lead(first_name, email, source, tags=tags) + except user_domain.UserCreationException as e: return render(request, 'core/lead_form_errors.html', context={'form': e.form}, status=400) login(request, user) diff --git a/pythonpro/dashboard/tests/test_interaction_creation.py b/pythonpro/dashboard/tests/test_interaction_creation.py index ef01a025..cb99dc1a 100644 --- a/pythonpro/dashboard/tests/test_interaction_creation.py +++ b/pythonpro/dashboard/tests/test_interaction_creation.py @@ -3,13 +3,13 @@ from model_bakery import baker from pythonpro.dashboard.models import TopicInteraction -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain from pythonpro.modules.models import Topic @pytest.fixture def remove_tags_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.remove_tags.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.remove_tags.delay') @pytest.fixture @@ -54,7 +54,7 @@ def test_user_mark_on_email_marketing(resp, remove_tags_mock, logged_user): def test_user_activation(resp, remove_tags_mock, logged_user): - assert 'ACTIVATED' == user_facade.find_user_interactions(logged_user)[0].category + assert 'ACTIVATED' == user_domain.find_user_interactions(logged_user)[0].category def test_topic_interaction_status_code(resp): diff --git a/pythonpro/dashboard/views.py b/pythonpro/dashboard/views.py index be389e6e..765b1853 100644 --- a/pythonpro/dashboard/views.py +++ b/pythonpro/dashboard/views.py @@ -5,7 +5,7 @@ from pythonpro.dashboard.facade import has_watched_any_topic from pythonpro.dashboard.forms import TopicInteractionForm -from pythonpro.domain import content_statistics_domain, user_facade +from pythonpro.domain import content_statistics_domain, user_domain from pythonpro.modules.models import Topic @@ -45,7 +45,7 @@ def topic_interaction(request): form = TopicInteractionForm(data) if form.is_valid(): if not has_watched_any_topic(user): - user_facade.activate_user(user, None) + user_domain.activate_user(user, None) topic_id = int(request.POST['topic']) current_topic_duration = Topic.objects.values('duration').get(id=topic_id)['duration'] maybe_new_topic_duration = form.cleaned_data['topic_duration'] diff --git a/pythonpro/discourse/tests/test_sync.py b/pythonpro/discourse/tests/test_sync.py index 1a1a31ab..80a420ef 100644 --- a/pythonpro/discourse/tests/test_sync.py +++ b/pythonpro/discourse/tests/test_sync.py @@ -1,7 +1,7 @@ import pytest import responses -import pythonpro.domain.user_facade +import pythonpro.domain.user_domain from pythonpro.discourse import facade @@ -15,21 +15,21 @@ def test_missing_discourse_api_key(settings, no_responses): settings.DISCOURSE_API_KEY = '' settings.DISCOURSE_BASE_URL = 'https://forum.python.pro.br/' with pytest.raises(facade.MissingDiscourseAPICredentials): - pythonpro.domain.user_facade.sync_user_on_discourse(None) + pythonpro.domain.user_domain.sync_user_on_discourse(None) def test_missing_discourse_api_user(settings, no_responses): settings.DISCOURSE_API_USER = '' settings.DISCOURSE_BASE_URL = 'https://forum.python.pro.br/' with pytest.raises(facade.MissingDiscourseAPICredentials): - pythonpro.domain.user_facade.sync_user_on_discourse(None) + pythonpro.domain.user_domain.sync_user_on_discourse(None) def test_no_integration_on_missing_url_config(settings, no_responses): settings.DISCOURSE_API_USER = '' settings.DISCOURSE_API_KEY = '' settings.DISCOURSE_BASE_URL = '' - assert pythonpro.domain.user_facade.sync_user_on_discourse(None) is None + assert pythonpro.domain.user_domain.sync_user_on_discourse(None) is None @pytest.fixture @@ -44,7 +44,7 @@ def resps(settings): def test_user_sync(logged_user, resps): - pythonpro.domain.user_facade.sync_user_on_discourse(logged_user) + pythonpro.domain.user_domain.sync_user_on_discourse(logged_user) success_response = { diff --git a/pythonpro/domain/__init__.py b/pythonpro/domain/__init__.py index 9ac10d68..6c2d025a 100644 --- a/pythonpro/domain/__init__.py +++ b/pythonpro/domain/__init__.py @@ -1,7 +1,7 @@ -from pythonpro.domain import (checkout_domain, content_statistics_domain, user_facade) +from pythonpro.domain import (checkout_domain, content_statistics_domain, user_domain) __all__ = [ 'content_statistics_domain', - 'user_facade', + 'user_domain', 'checkout_domain' ] diff --git a/pythonpro/domain/checkout_domain.py b/pythonpro/domain/checkout_domain.py index 782ac8f7..d2a17b86 100644 --- a/pythonpro/domain/checkout_domain.py +++ b/pythonpro/domain/checkout_domain.py @@ -3,7 +3,7 @@ from django_pagarme import facade as django_pagarme_facade from pythonpro.core import facade as core_facade -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain from pythonpro.domain.hotzapp_domain import verify_purchase, send_purchase_notification from pythonpro.email_marketing import facade as email_marketing_facade @@ -39,7 +39,7 @@ def user_factory(pagarme_transaction): customer = pagarme_transaction['customer'] customer_email = customer['email'].lower() customer_first_name = customer['name'].split()[0] - return user_facade.force_register_lead(customer_first_name, customer_email) + return user_domain.force_register_lead(customer_first_name, customer_email) django_pagarme_facade.set_user_factory(user_factory) @@ -77,18 +77,18 @@ def payment_handler_task(payment_id): def _promote(user, slug: str): if slug.startswith('membership'): - user_facade.promote_member(user, 'unknown') + user_domain.promote_member(user, 'unknown') elif slug == 'pacote-proximo-nivel-67-discount': - user_facade.promote_pythonista(user, 'unknown') + user_domain.promote_pythonista(user, 'unknown') elif slug.startswith('webdev'): - user_facade.promote_webdev(user, 'unknown') + user_domain.promote_webdev(user, 'unknown') elif slug.startswith('data-science'): - user_facade.promote_data_scientist(user, 'unknown') + user_domain.promote_data_scientist(user, 'unknown') elif slug in {'bootcamp', 'bootcamp-webdev'}: - user_facade.promote_bootcamper(user, 'unknown') - user_facade.promote_pythonista(user, 'unknown') + user_domain.promote_bootcamper(user, 'unknown') + user_domain.promote_pythonista(user, 'unknown') elif slug.startswith('bootcamp'): - user_facade.promote_bootcamper(user, 'unknown') + user_domain.promote_bootcamper(user, 'unknown') else: raise ValueError(f'{slug} should contain webdev or membership or data-science') diff --git a/pythonpro/domain/tests/test_checkout/test_boleto_generation.py b/pythonpro/domain/tests/test_checkout/test_boleto_generation.py index 9eab338c..672dd321 100644 --- a/pythonpro/domain/tests/test_checkout/test_boleto_generation.py +++ b/pythonpro/domain/tests/test_checkout/test_boleto_generation.py @@ -26,7 +26,7 @@ def pagarme_responses(transaction_json, captura_json): @pytest.fixture def create_or_update_lead_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_lead.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_lead.delay', side_effect=email_marketing_facade.create_or_update_lead ) @@ -46,7 +46,7 @@ def tag_as_mock(mocker): @pytest.fixture def sync_on_discourse_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade.sync_user_on_discourse.delay') + return mocker.patch('pythonpro.domain.user_domain.sync_user_on_discourse.delay') @pytest.fixture diff --git a/pythonpro/domain/tests/test_checkout/test_credit_card_payment.py b/pythonpro/domain/tests/test_checkout/test_credit_card_payment.py index f5c674b9..0efa5190 100644 --- a/pythonpro/domain/tests/test_checkout/test_credit_card_payment.py +++ b/pythonpro/domain/tests/test_checkout/test_credit_card_payment.py @@ -22,7 +22,7 @@ def pagarme_responses(transaction_json, captura_json): @pytest.fixture def create_or_update_member_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_member.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_member.delay', side_effect=email_marketing_facade.create_or_update_member ) @@ -30,7 +30,7 @@ def create_or_update_member_mock(mocker): @pytest.fixture def create_or_update_lead_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_lead.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_lead.delay', side_effect=email_marketing_facade.create_or_update_lead ) @@ -45,18 +45,18 @@ def payment_handler_task_mock(mocker): @pytest.fixture def remove_tags_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.remove_tags.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.remove_tags.delay') @pytest.fixture def sync_on_discourse_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade.sync_user_on_discourse.delay') + return mocker.patch('pythonpro.domain.user_domain.sync_user_on_discourse.delay') @pytest.fixture def create_or_update_webdev_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_webdev.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_webdev.delay', side_effect=email_marketing_facade.create_or_update_webdev ) @@ -64,7 +64,7 @@ def create_or_update_webdev_mock(mocker): @pytest.fixture def create_or_update_data_scientist_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_data_scientist.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_data_scientist.delay', side_effect=email_marketing_facade.create_or_update_data_scientist ) @@ -72,7 +72,7 @@ def create_or_update_data_scientist_mock(mocker): @pytest.fixture def create_or_update_bootcamper_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_bootcamper.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_bootcamper.delay', side_effect=email_marketing_facade.create_or_update_bootcamper ) @@ -80,7 +80,7 @@ def create_or_update_bootcamper_mock(mocker): @pytest.fixture def create_or_update_pythonist_mock(mocker): return mocker.patch( - 'pythonpro.domain.user_facade._email_marketing_facade.create_or_update_pythonista.delay', + 'pythonpro.domain.user_domain._email_marketing_facade.create_or_update_pythonista.delay', side_effect=email_marketing_facade.create_or_update_pythonista ) diff --git a/pythonpro/domain/tests/test_lead.py b/pythonpro/domain/tests/test_lead.py index c99a99ca..03629221 100644 --- a/pythonpro/domain/tests/test_lead.py +++ b/pythonpro/domain/tests/test_lead.py @@ -1,20 +1,20 @@ import pytest -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain @pytest.fixture def create_or_update_lead_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.create_or_update_lead.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.create_or_update_lead.delay') @pytest.fixture def sync_user_delay(mocker): - return mocker.patch('pythonpro.domain.user_facade.sync_user_on_discourse.delay') + return mocker.patch('pythonpro.domain.user_domain.sync_user_on_discourse.delay') def test_creation(db, django_user_model, create_or_update_lead_mock, sync_user_delay): - user = user_facade.register_lead('Renzo Nuccitelli', 'renzo@python.pro.br', 'google_ads') + user = user_domain.register_lead('Renzo Nuccitelli', 'renzo@python.pro.br', 'google_ads') create_or_update_lead_mock.assert_called_once_with(user.first_name, user.email, id=user.id) assert not sync_user_delay.called assert django_user_model.objects.all().get() == user @@ -22,7 +22,7 @@ def test_creation(db, django_user_model, create_or_update_lead_mock, sync_user_d def test_should_create_lead_with_extra_tags( db, django_user_model, create_or_update_lead_mock, sync_user_delay): - user = user_facade.register_lead( + user = user_domain.register_lead( 'Renzo Nuccitelli', 'renzo@python.pro.br', 'google_ads', tags=['tag-1', 'tag-2'] ) create_or_update_lead_mock.assert_called_once_with(user.first_name, user.email, 'tag-1', 'tag-2', id=user.id) diff --git a/pythonpro/domain/user_facade.py b/pythonpro/domain/user_domain.py similarity index 100% rename from pythonpro/domain/user_facade.py rename to pythonpro/domain/user_domain.py diff --git a/pythonpro/launch/tests/test_cpl.py b/pythonpro/launch/tests/test_cpl.py index 0080daef..413ba603 100644 --- a/pythonpro/launch/tests/test_cpl.py +++ b/pythonpro/launch/tests/test_cpl.py @@ -12,7 +12,7 @@ @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/launch/tests/test_cpl1.py b/pythonpro/launch/tests/test_cpl1.py index b5cbbc9a..5df329bb 100644 --- a/pythonpro/launch/tests/test_cpl1.py +++ b/pythonpro/launch/tests/test_cpl1.py @@ -1,13 +1,13 @@ import pytest from django.urls import reverse -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions from pythonpro.launch.facade import LAUNCH_STATUS_CPL1, LAUNCH_STATUS_OPEN_CART, LAUNCH_STATUS_PPL @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/launch/tests/test_cpl2.py b/pythonpro/launch/tests/test_cpl2.py index 012b46fa..385ce5ec 100644 --- a/pythonpro/launch/tests/test_cpl2.py +++ b/pythonpro/launch/tests/test_cpl2.py @@ -1,13 +1,13 @@ import pytest from django.urls import reverse -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions from pythonpro.launch.facade import LAUNCH_STATUS_OPEN_CART, LAUNCH_STATUS_CPL2 @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/launch/tests/test_cpl3.py b/pythonpro/launch/tests/test_cpl3.py index d9ac77b6..61ac11dd 100644 --- a/pythonpro/launch/tests/test_cpl3.py +++ b/pythonpro/launch/tests/test_cpl3.py @@ -1,13 +1,13 @@ import pytest from django.urls import reverse -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions from pythonpro.launch.facade import LAUNCH_STATUS_OPEN_CART, LAUNCH_STATUS_CPL3 @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/launch/tests/test_cpl4.py b/pythonpro/launch/tests/test_cpl4.py index a996c04c..57dc6650 100644 --- a/pythonpro/launch/tests/test_cpl4.py +++ b/pythonpro/launch/tests/test_cpl4.py @@ -1,13 +1,13 @@ import pytest from django.urls import reverse -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions from pythonpro.launch.facade import LAUNCH_STATUS_OPEN_CART, LAUNCH_STATUS_CPL4 @pytest.fixture def tag_as_mock(mocker): - return mocker.patch('pythonpro.domain.user_facade._email_marketing_facade.tag_as.delay') + return mocker.patch('pythonpro.domain.user_domain._email_marketing_facade.tag_as.delay') @pytest.fixture diff --git a/pythonpro/launch/tests/test_landing_page.py b/pythonpro/launch/tests/test_landing_page.py index e3951a31..1d63826f 100644 --- a/pythonpro/launch/tests/test_landing_page.py +++ b/pythonpro/launch/tests/test_landing_page.py @@ -2,7 +2,7 @@ from django.urls import reverse from pythonpro.django_assertions import dj_assert_contains -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions @pytest.fixture diff --git a/pythonpro/launch/tests/test_ty.py b/pythonpro/launch/tests/test_ty.py index a225d749..bbed7fde 100644 --- a/pythonpro/launch/tests/test_ty.py +++ b/pythonpro/launch/tests/test_ty.py @@ -2,7 +2,7 @@ from django.urls import reverse from pythonpro.django_assertions import dj_assert_contains -from pythonpro.domain.user_facade import find_user_interactions +from pythonpro.domain.user_domain import find_user_interactions @pytest.fixture diff --git a/pythonpro/launch/views.py b/pythonpro/launch/views.py index 8c2842c7..ed5e33b9 100644 --- a/pythonpro/launch/views.py +++ b/pythonpro/launch/views.py @@ -7,7 +7,7 @@ from pythonpro.absolute_uri import build_absolute_uri from pythonpro.cohorts.facade import find_most_recent_cohort -from pythonpro.domain import user_facade +from pythonpro.domain import user_domain from pythonpro.email_marketing import facade as email_marketing_facade from pythonpro.launch.facade import ( get_launch_status, @@ -22,7 +22,7 @@ def landing_page(request): user = request.user if user.is_authenticated: form = LeadForm({'email': user.email}) - user_facade.visit_launch_landing_page(user, request.GET.get('utm_source', 'unknown')) + user_domain.visit_launch_landing_page(user, request.GET.get('utm_source', 'unknown')) else: form = LeadForm() return render(request, 'launch/landing_page.html', {'form': form}) @@ -51,13 +51,13 @@ def lead_form(request): def ty(request): user = request.user if user.is_authenticated: - user_facade.subscribe_launch_landing_page(user, request.GET.get('utm_source', 'unknown')) + user_domain.subscribe_launch_landing_page(user, request.GET.get('utm_source', 'unknown')) return render(request, 'launch/ty.html') def cpl1(request): user = request.user - visit_function = user_facade.visit_cpl1 + visit_function = user_domain.visit_cpl1 video_id = 'Rwt6wYrDeYY' video_id_next_class = 'WK1sCtvGjBU' description = ( @@ -72,7 +72,7 @@ def cpl1(request): def cpl2(request): user = request.user - visit_function = user_facade.visit_cpl2 + visit_function = user_domain.visit_cpl2 video_id = 'WK1sCtvGjBU' video_id_next_class = 'ADhQ7H8-hxw' title = 'AULA #2: Os Fundamentos da PROGRAMAÇÃO PROCEDURAL' @@ -89,7 +89,7 @@ def cpl2(request): def cpl3(request): user = request.user - visit_function = user_facade.visit_cpl3 + visit_function = user_domain.visit_cpl3 video_id = 'ADhQ7H8-hxw' video_id_next_class = 'QNo7gS_dsUw' title = 'AULA #3: Descobrindo o Mundo da ORIENTAÇÃO A OBJETO' @@ -107,7 +107,7 @@ def cpl3(request): def cpl4(request): user = request.user - visit_function = user_facade.visit_cpl3 + visit_function = user_domain.visit_cpl3 video_id = 'QNo7gS_dsUw' title = 'AULA #4: Voando com Python + Resumão' description = ( @@ -160,6 +160,6 @@ def onesignal_sdk_updater_worker(request): def _render_launch_page(is_launch_open, request, template_closed_launch, template_open_launch, redirect_path_name: str): user = request.user if user.is_authenticated: - user_facade.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) + user_domain.visit_member_landing_page(request.user, source=request.GET.get('utm_source', default='unknown')) template = template_closed_launch return render(request, template, {}) diff --git a/pythonpro/modules/facade.py b/pythonpro/modules/facade.py index 9baf4dde..ca0256aa 100644 --- a/pythonpro/modules/facade.py +++ b/pythonpro/modules/facade.py @@ -1,13 +1,26 @@ -from functools import partial +from functools import partial as _partial -from django.conf import settings -from django.core.cache import cache -from django.db.models import Prefetch +from django.conf import settings as _settings +from django.core.cache import cache as _cache +from django.db.models import Prefetch as _Prefetch from pythonpro.modules.models import ( Chapter as _Chapter, Module as _Module, Section as _Section, Topic as _Topic, ) +__all__ = [ + 'get_topic_model', + 'get_all_modules', + 'get_module_with_contents', + 'get_section_with_contents', + 'get_chapter_with_contents', + 'get_topic_with_contents', + 'get_topic_with_contents_by_id', + 'get_entire_content_forest', + 'get_tree', + 'topics_user_interacted_queryset', +] + def get_topic_model(): return _Topic @@ -18,8 +31,8 @@ def get_all_modules(): Search all modules on database sorted by order :return: tuple of Module """ - lazy_all_modules = partial(tuple, _Module.objects.order_by('order')) - return cache.get_or_set('ALL_MODULES', lazy_all_modules, settings.CACHE_TTL) + lazy_all_modules = _partial(tuple, _Module.objects.order_by('order')) + return _cache.get_or_set('ALL_MODULES', lazy_all_modules, _settings.CACHE_TTL) def get_module_with_contents(slug): @@ -30,10 +43,10 @@ def get_module_with_contents(slug): """ return _Module.objects.filter(slug=slug).prefetch_related( - Prefetch( + _Prefetch( 'section_set', queryset=_Section.objects.order_by('order').prefetch_related( - Prefetch( + _Prefetch( 'chapter_set', queryset=_Chapter.objects.order_by('order'), to_attr='chapters' @@ -50,7 +63,7 @@ def get_section_with_contents(slug): :return: Section """ return _Section.objects.filter(slug=slug).select_related('module').prefetch_related( - Prefetch( + _Prefetch( 'chapter_set', queryset=_Chapter.objects.order_by('order'), to_attr='chapters' @@ -66,7 +79,7 @@ def get_chapter_with_contents(slug): """ return _Chapter.objects.filter(slug=slug).select_related('section').select_related( 'section__module').prefetch_related( - Prefetch( + _Prefetch( 'topic_set', queryset=_Topic.objects.order_by('order'), to_attr='topics' @@ -99,13 +112,13 @@ def get_entire_content_forest(): :return: """ return list(_Module.objects.all().prefetch_related( - Prefetch( + _Prefetch( 'section_set', queryset=_Section.objects.order_by('order').prefetch_related( - Prefetch( + _Prefetch( 'chapter_set', queryset=_Chapter.objects.order_by('order').prefetch_related( - Prefetch( + _Prefetch( 'topic_set', queryset=_Topic.objects.order_by('order'), to_attr='topics' @@ -124,11 +137,11 @@ def get_tree(module): :return: """ sections = list(_Section.objects.filter(module=module).order_by('order').prefetch_related( - Prefetch( + _Prefetch( 'chapter_set', queryset=_Chapter.objects.order_by( 'order').prefetch_related( - Prefetch( + _Prefetch( 'topic_set', queryset=_Topic.objects.order_by( 'order'),