Skip to content

Commit

Permalink
feat: ENT-7918 Added academy tags to Algolia index
Browse files Browse the repository at this point in the history
  • Loading branch information
IrfanUddinAhmad committed Nov 25, 2023
1 parent d75f2c1 commit b7df4a4
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
37 changes: 30 additions & 7 deletions enterprise_catalog/apps/api/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ def add_metadata_to_algolia_objects(
customer_uuids,
catalog_queries,
academy_uuids,
academy_tags,
):
"""
Convert ContentMetadata objects into Algolia products and accumulate results into `algolia_products_by_object_id`.
Expand All @@ -650,6 +651,7 @@ def add_metadata_to_algolia_objects(
catalog_uuids (list of str): Associated catalog UUIDs.
customer_uuids (list of str): Associated customer UUIDs.
academy_uuids (list of str): Associated academy UUIDs.
academy_tags (list of str): Associated academy tags.
catalog_queries (list of tuple(str, str)): Associated catalog queries, as a list of (UUID, title) tuples.
"""
# add enterprise-related uuids to json_metadata
Expand Down Expand Up @@ -688,6 +690,16 @@ def add_metadata_to_algolia_objects(
)
_add_in_algolia_products_by_object_id(algolia_products_by_object_id, batched_metadata)

# academy tags
academy_tags = sorted(list(academy_tags))
batched_metadata = _batched_metadata(
json_metadata,
academy_tags,
'academy_tags',
'{}-academy-tags-{}',
)
_add_in_algolia_products_by_object_id(algolia_products_by_object_id, batched_metadata)

# enterprise catalog queries (tuples of (query uuid, query title)), note: account for None being present
# within the list
queries = sorted(list(catalog_queries))
Expand Down Expand Up @@ -750,10 +762,12 @@ def _get_algolia_products_for_batch(
customer_uuids_by_key = defaultdict(set)
catalog_queries_by_key = defaultdict(set)
academy_uuids_by_key = defaultdict(set)
academy_tags_by_key = defaultdict(set)

catalog_query_uuid_by_catalog_uuid = defaultdict(set)
customer_uuid_by_catalog_uuid = defaultdict(set)
academy_uuids_by_catalog_uuid = defaultdict(set)
academy_tags_by_catalog_uuid = defaultdict(set)

# Create a shared convenience queryset to prefetch catalogs for all metadata lookups below.
all_catalog_queries = CatalogQuery.objects.prefetch_related('enterprise_catalogs')
Expand Down Expand Up @@ -822,8 +836,13 @@ def _get_algolia_products_for_batch(
customer_uuid_by_catalog_uuid[str(catalog.uuid)] = str(catalog.enterprise_uuid)
associated_academies = catalog.academies.all()
for academy in associated_academies:
associated_academy_tags = academy.tags.all()
academy_uuids_by_key[content_key].add(str(academy.uuid))
academy_uuids_by_catalog_uuid[str(catalog.uuid)].add(str(academy.uuid))
for tag in associated_academy_tags:
academy_tags_by_key[content_key].add(str(tag.title))
academy_tags_by_catalog_uuid[str(catalog.uuid)].add(str(tag.title))


# Second pass. This time the goal is to capture indirect relationships on programs:
# * For each program:
Expand All @@ -843,18 +862,20 @@ def _get_algolia_products_for_batch(
common_catalogs = set()
if catalog_uuids_for_all_courses_of_program:
common_catalogs = set.intersection(*catalog_uuids_for_all_courses_of_program)
for course_metadata in program_to_courses_mapping[program_content_key]:
catalog_queries_by_key[program_content_key].update(
catalog_query_uuid_by_catalog_uuid[catalog_uuid] for catalog_uuid in common_catalogs
)
catalog_uuids_by_key[program_content_key].update(common_catalogs)
customer_uuids_by_key[program_content_key].update(
customer_uuid_by_catalog_uuid[catalog_uuid] for catalog_uuid in common_catalogs
)
for catalog_uuid in common_catalogs:
catalog_queries_by_key[program_content_key].update(
catalog_query_uuid_by_catalog_uuid[catalog_uuid]
)
customer_uuids_by_key[program_content_key].update(
customer_uuid_by_catalog_uuid[catalog_uuid]
)
academy_uuids_by_key[program_content_key].update(
academy_uuids_by_catalog_uuid[catalog_uuid]
)
academy_tags_by_key[program_content_key].update(
academy_tags_by_catalog_uuid[catalog_uuid]
)

# Third pass. This time the goal is to capture indirect relationships on pathways:
# * For each pathway:
Expand All @@ -870,6 +891,7 @@ def _get_algolia_products_for_batch(
catalog_uuids_by_key[pathway_content_key].update(catalog_uuids_by_key[metadata.content_key])
customer_uuids_by_key[pathway_content_key].update(customer_uuids_by_key[metadata.content_key])
academy_uuids_by_key[pathway_content_key].update(academy_uuids_by_key[metadata.content_key])
academy_tags_by_key[pathway_content_key].update(academy_tags_by_key[metadata.content_key])

# Extra disabled logic to additionally absorb UUIDs from courses linked to this pathway indirectly via a
# program (chain of association is course -> program -> pathway). This doesn't work because
Expand Down Expand Up @@ -905,6 +927,7 @@ def _get_algolia_products_for_batch(
customer_uuids_by_key[metadata.content_key],
catalog_queries_by_key[metadata.content_key],
academy_uuids_by_key[metadata.content_key],
academy_tags_by_key[metadata.content_key],
)

num_content_metadata_indexed += 1
Expand Down
2 changes: 2 additions & 0 deletions enterprise_catalog/apps/catalog/algolia_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
'enterprise_catalog_query_uuids',
'enterprise_customer_uuids',
'academy_uuids',
'academy_tags',
'full_description',
'key', # for links to Course about pages from the Learner Portal search page
'uuid',
Expand Down Expand Up @@ -105,6 +106,7 @@
'enterprise_catalog_query_uuids',
'enterprise_customer_uuids',
'academy_uuids',
'academy_tags',
'language',
'level_type',
'program_type',
Expand Down

0 comments on commit b7df4a4

Please sign in to comment.