diff --git a/apps/custom_email/service.py b/apps/custom_email/service.py index 6409ee9..b2a8dac 100644 --- a/apps/custom_email/service.py +++ b/apps/custom_email/service.py @@ -17,7 +17,11 @@ def get_theme_logo_url(instance, theme_key): if not setting: return f"{host}/static/images/branding/{default_logo}" - theme = setting.themes.filter(theme_key=theme_key).first() + themes = getattr(setting, "_prefetched_objects_cache", {}).get("themes") + if themes is not None: + theme = next((item for item in themes if item.theme_key == theme_key), None) + else: + theme = setting.themes.filter(theme_key=theme_key).first() if not theme or not theme.logo: return f"{host}/static/images/branding/{default_logo}" diff --git a/apps/custom_email/views.py b/apps/custom_email/views.py index 1298b79..4541749 100644 --- a/apps/custom_email/views.py +++ b/apps/custom_email/views.py @@ -1,15 +1,25 @@ from common.pagination.base_pagination import BasePagination +from django.db.models import Prefetch from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import OrderingFilter from apps.custom_email.models import OrganizationEmail from apps.custom_email.serializers import OrganizationEmailSerializer +from apps.organization_setting.models import OrganizationTheme from utils.views import OrganizationListAPIView class ListCustomEmailView(OrganizationListAPIView): serializer_class = OrganizationEmailSerializer - queryset = OrganizationEmail.objects.all() + queryset = OrganizationEmail.objects.select_related( + "organization", + "organization__organization_settings", + ).prefetch_related( + Prefetch( + "organization__organization_settings__themes", + queryset=OrganizationTheme.objects.all(), + ) + ) organization_field = "organization" pagination_class = BasePagination filterset_fields = ["email_type"] diff --git a/apps/organization_roles/services.py b/apps/organization_roles/services.py index de21d5e..7fa7679 100644 --- a/apps/organization_roles/services.py +++ b/apps/organization_roles/services.py @@ -108,22 +108,26 @@ def create_default_policies(organization): - organization_policies = [] - for policy in default_policies: - organization_policy = OrganizationPolicy(**policy, organization=organization) - organization_policy.save() - organization_policies.append(organization_policy.pk) + organization_policies = [ + OrganizationPolicy(**policy, organization=organization) + for policy in default_policies + ] + OrganizationPolicy.objects.bulk_create(organization_policies) return organization_policies -def create_default_organization_role_by_policy_tag(name, tag, organization): - policies = OrganizationPolicy.objects.filter( - tags__icontains=tag, organization=organization - ).all() +def create_default_organization_role_by_policy_tag( + name, tag, organization, policies=None +): + if policies is None: + policies = OrganizationPolicy.objects.filter( + tags__contains=[tag], organization=organization + ).all() + else: + policies = [policy for policy in policies if tag in policy.tags] organization_role = OrganizationRole(name=name, organization=organization) organization_role.save() organization_role.policies.set([policy.pk for policy in policies]) - organization_role.save() return organization_role diff --git a/bootstrap_service/management/commands/init_organization.py b/bootstrap_service/management/commands/init_organization.py index b28298c..244a646 100644 --- a/bootstrap_service/management/commands/init_organization.py +++ b/bootstrap_service/management/commands/init_organization.py @@ -119,7 +119,8 @@ def _create_organization_with_roles(self, org_id, org_name, org_slug, result): ) self.stdout.write(self.style.SUCCESS(f"Created organization: {org_name}")) - create_default_policies(organization) + organization_policies = create_default_policies(organization) + create_default_pages(organization) create_default_organization_email(organization) create_default_organization_setting(organization) @@ -135,7 +136,7 @@ def _create_organization_with_roles(self, org_id, org_name, org_slug, result): owner_role = None for role_type, policy_tag in role_mappings: role = create_default_organization_role_by_policy_tag( - role_type, policy_tag, organization + role_type, policy_tag, organization, organization_policies ) if role_type == OrganizationRoleType.OWNER_ROLE: owner_role = role diff --git a/bootstrap_service/settings.py b/bootstrap_service/settings.py index 4212eea..f74dfbd 100644 --- a/bootstrap_service/settings.py +++ b/bootstrap_service/settings.py @@ -143,6 +143,7 @@ def silky_intercept_func(request): SILKY_MAX_RESPONSE_BODY_SIZE = 0 SILKY_META = True SILKY_INTERCEPT_PERCENT = 10 + SILKY_MAX_RECORDED_REQUESTS = 500 SILKY_MAX_RECORDED_REQUESTS_CHECK_PERCENT = 10 # Internationalization