From 809f12b602377c38b45e0d75f60d64434ed4f687 Mon Sep 17 00:00:00 2001 From: Sujeet Kumar Gupta Date: Fri, 24 Jul 2026 14:57:11 +0000 Subject: [PATCH] feat: B2C Subscription Inclusion Flag for Program Algolia Reindex --- .../apps/course_metadata/algolia_models.py | 10 +++++++--- course_discovery/apps/course_metadata/index.py | 14 ++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/course_discovery/apps/course_metadata/algolia_models.py b/course_discovery/apps/course_metadata/algolia_models.py index eac6a0addb4..5e780ca1fff 100644 --- a/course_discovery/apps/course_metadata/algolia_models.py +++ b/course_discovery/apps/course_metadata/algolia_models.py @@ -80,10 +80,10 @@ def delegate_attributes(cls): product_type_fields = ['product_type'] search_fields = ['partner_names', 'partner_keys', 'product_title', 'product_source', 'primary_description', - 'secondary_description', 'tertiary_description'] + 'secondary_description', 'tertiary_description', 'product_b2c_subscription_inclusion'] facet_fields = ['availability_level', 'subject_names', 'levels', 'active_languages', 'staff_slugs', 'product_allowed_in', 'product_blocked_in', 'learning_type', 'learning_type_exp', - 'product_ai_languages', 'b2c_subscription_inclusion'] + 'product_ai_languages', 'product_b2c_subscription_inclusion'] ranking_fields = ['availability_rank', 'product_recent_enrollment_count', 'promoted_in_spanish_index', 'product_value_per_click_usa', 'product_value_per_click_international', 'product_value_per_lead_usa', 'product_value_per_lead_international'] @@ -93,7 +93,7 @@ def delegate_attributes(cls): 'product_organization_short_code_override', 'product_organization_logo_override', 'skills', 'product_meta_title', 'product_display_on_org_page', 'product_external_url', 'contentful_fields', 'subscription_eligible', 'subscription_prices', 'product_key', - 'product_marketing_video_url', 'b2c_subscription_inclusion'] + 'product_marketing_video_url', 'product_b2c_subscription_inclusion'] object_id_field = ['custom_object_id', ] fields = product_type_fields + search_fields + facet_fields + ranking_fields + result_fields + object_id_field for field in fields: @@ -187,6 +187,10 @@ def product_marketing_url(self): def product_recent_enrollment_count(self): return self.recent_enrollment_count + @property + def product_b2c_subscription_inclusion(self): + return self.b2c_subscription_inclusion + # For product_value_per_*, return default values if in_year_value is None to ensure that products don't get lost # in the ranking @property diff --git a/course_discovery/apps/course_metadata/index.py b/course_discovery/apps/course_metadata/index.py index e87f00587f7..bc637a489f0 100644 --- a/course_discovery/apps/course_metadata/index.py +++ b/course_discovery/apps/course_metadata/index.py @@ -77,13 +77,14 @@ class EnglishProductIndex(BaseProductIndex): search_fields = (('product_title', 'title'), ('partner_names', 'partner'), 'partner_keys', 'product_source', 'primary_description', 'secondary_description', 'tertiary_description', 'tags', - 'b2c_subscription_inclusion') + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) facet_fields = (('availability_level', 'availability'), ('subject_names', 'subject'), ('levels', 'level'), ('active_languages', 'language'), ('product_type', 'product'), ('program_types', 'program_type'), ('staff_slugs', 'staff'), ('product_allowed_in', 'allowed_in'), ('product_blocked_in', 'blocked_in'), 'subscription_eligible', 'subscription_prices', 'learning_type', 'learning_type_exp', - ('product_ai_languages', 'ai_languages'), 'b2c_subscription_inclusion') + ('product_ai_languages', 'ai_languages'), + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) ranking_fields = ('availability_rank', ('product_recent_enrollment_count', 'recent_enrollment_count'), ('product_value_per_click_usa', 'value_per_click_usa'), ('product_value_per_click_international', 'value_per_click_international'), @@ -98,7 +99,7 @@ class EnglishProductIndex(BaseProductIndex): ('product_external_url', 'external_url'), 'active_run_key', 'active_run_start', 'active_run_type', 'owners', 'course_titles', 'tags', 'skills', 'contentful_fields', 'product_key', 'product_marketing_video_url', - 'b2c_subscription_inclusion') + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) # Algolia needs this object_id_field = (('custom_object_id', 'objectID'), ) @@ -135,13 +136,14 @@ class SpanishProductIndex(BaseProductIndex): search_fields = (('product_title', 'title'), ('partner_names', 'partner'), 'partner_keys', 'product_source', 'primary_description', 'secondary_description', 'tertiary_description', 'tags', - 'b2c_subscription_inclusion') + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) facet_fields = (('availability_level', 'availability'), ('subject_names', 'subject'), ('levels', 'level'), ('active_languages', 'language'), ('product_type', 'product'), ('program_types', 'program_type'), ('staff_slugs', 'staff'), ('product_allowed_in', 'allowed_in'), ('product_blocked_in', 'blocked_in'), 'subscription_eligible', 'subscription_prices', 'learning_type', 'learning_type_exp', - ('product_ai_languages', 'ai_languages'), 'b2c_subscription_inclusion') + ('product_ai_languages', 'ai_languages'), + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) ranking_fields = ('availability_rank', ('product_recent_enrollment_count', 'recent_enrollment_count'), ('product_value_per_click_usa', 'value_per_click_usa'), ('product_value_per_click_international', 'value_per_click_international'), @@ -157,7 +159,7 @@ class SpanishProductIndex(BaseProductIndex): ('product_external_url', 'external_url'), 'active_run_start', 'active_run_type', 'owners', 'course_titles', 'tags', 'skills', 'contentful_fields', 'product_key', 'product_marketing_video_url', - 'b2c_subscription_inclusion') + ('product_b2c_subscription_inclusion', 'b2c_subscription_inclusion')) # Algolia uses objectID as unique identifier. Can't use straight uuids because a program and a course could # have the same one, so we add 'course' or 'program' as a prefix