Skip to content

Commit

Permalink
feat: ENT-7554 Added academies in Algolia index
Browse files Browse the repository at this point in the history
  • Loading branch information
IrfanUddinAhmad committed Nov 24, 2023
1 parent 9b0bd13 commit d75f2c1
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 12 deletions.
Empty file.
26 changes: 25 additions & 1 deletion enterprise_catalog/apps/api/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,7 @@ def add_metadata_to_algolia_objects(
catalog_uuids,
customer_uuids,
catalog_queries,
academy_uuids,
):
"""
Convert ContentMetadata objects into Algolia products and accumulate results into `algolia_products_by_object_id`.
Expand All @@ -648,6 +649,7 @@ def add_metadata_to_algolia_objects(
actually index.
catalog_uuids (list of str): Associated catalog UUIDs.
customer_uuids (list of str): Associated customer UUIDs.
academy_uuids (list of str): Associated academy UUIDs.
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 @@ -676,6 +678,16 @@ def add_metadata_to_algolia_objects(
)
_add_in_algolia_products_by_object_id(algolia_products_by_object_id, batched_metadata)

# academy uuids
academy_uuids = sorted(list(academy_uuids))
batched_metadata = _batched_metadata(
json_metadata,
academy_uuids,
'academy_uuids',
'{}-academy-uuids-{}',
)
_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 @@ -737,9 +749,11 @@ def _get_algolia_products_for_batch(
catalog_uuids_by_key = defaultdict(set)
customer_uuids_by_key = defaultdict(set)
catalog_queries_by_key = defaultdict(set)
academy_uuids_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)

# 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 @@ -799,13 +813,17 @@ def _get_algolia_products_for_batch(
for catalog_query in associated_catalog_queries:
catalog_queries_by_key[content_key].add((str(catalog_query.uuid), catalog_query.title))
# This line is possible thanks to `all_catalog_queries` with the prefectch_related() above.
associated_catalogs = catalog_query.enterprise_catalogs.all()
associated_catalogs = catalog_query.enterprise_catalogs.prefetch_related('academies').all()
for catalog in associated_catalogs:
catalog_uuids_by_key[content_key].add(str(catalog.uuid))
customer_uuids_by_key[content_key].add(str(catalog.enterprise_uuid))
# Cache UUIDs related to each catalog.
catalog_query_uuid_by_catalog_uuid[str(catalog.uuid)] = (str(catalog_query.uuid), catalog_query.title)
customer_uuid_by_catalog_uuid[str(catalog.uuid)] = str(catalog.enterprise_uuid)
associated_academies = catalog.academies.all()
for academy in associated_academies:
academy_uuids_by_key[content_key].add(str(academy.uuid))
academy_uuids_by_catalog_uuid[str(catalog.uuid)].add(str(academy.uuid))

# Second pass. This time the goal is to capture indirect relationships on programs:
# * For each program:
Expand Down Expand Up @@ -833,6 +851,10 @@ def _get_algolia_products_for_batch(
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:
academy_uuids_by_key[program_content_key].update(
academy_uuids_by_catalog_uuid[catalog_uuid]
)

# Third pass. This time the goal is to capture indirect relationships on pathways:
# * For each pathway:
Expand All @@ -847,6 +869,7 @@ def _get_algolia_products_for_batch(
catalog_queries_by_key[pathway_content_key].update(catalog_queries_by_key[metadata.content_key])
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])

# 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 @@ -881,6 +904,7 @@ def _get_algolia_products_for_batch(
catalog_uuids_by_key[metadata.content_key],
customer_uuids_by_key[metadata.content_key],
catalog_queries_by_key[metadata.content_key],
academy_uuids_by_key[metadata.content_key],
)

num_content_metadata_indexed += 1
Expand Down
Loading

0 comments on commit d75f2c1

Please sign in to comment.