Skip to content

Commit

Permalink
docs: initialize app for vertical tagging in course-discovery and add…
Browse files Browse the repository at this point in the history
… an ADR for it (#4542)

* chore: initialize tagging app

* docs: add vertical tagging ADR
  • Loading branch information
AfaqShuaib09 authored Jan 16, 2025
1 parent 0ab4e42 commit 01a8aaa
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 0 deletions.
Empty file.
Empty file.
6 changes: 6 additions & 0 deletions course_discovery/apps/tagging/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class TaggingConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'course_discovery.apps.tagging'
Empty file.
Empty file.
Empty file.
Empty file.
1 change: 1 addition & 0 deletions course_discovery/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@
'course_discovery.apps.publisher_comments',
'course_discovery.apps.learner_pathway',
'course_discovery.apps.taxonomy_support',
'course_discovery.apps.tagging',
]

ES_APPS = [
Expand Down
52 changes: 52 additions & 0 deletions docs/decisions/0031-vertical-content-tagging.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
31. Vertical Content Tagging
=============================

Status
--------
Accepted (January 2025)

Context
---------
The Open edX `course-discovery` service currently lacks an efficient and flexible way to categorize courses by
granular subject areas and verticals. The existing mechanisms (e.g., tags, Primary Subject) are limited, primarily
partner-driven, and often misaligned with business-specific needs for taxonomy and categorization.

For example, a partner might categorize a Python course under the broad umbrella of programming languages, aligning with general usage.
However, the business may wish to categorize the same course under Data Science tools,
highlighting its primary focus on enabling learners to apply Python in Data Science.

It is important to note that here `partner` and `business` can represent distinct entities with different taxonomical needs.
However, in some installations, the partner and business could represent the same entity, so this distinction may not always apply.

Objective
-----------
1. Introduce a structured approach to categorizing courses by aligning them with specific business objectives
2. Enable more effective classification of courses based on verticals, ensuring that courses can be easily discovered and grouped according to strategic priorities, thereby improving overall discoverability.

Decision
----------
A new app will be created for the Vertical Content Tagging functionality.

The following models will be added to the app:

- **Vertical:** This model will store the list of verticals that can be associated with product types to define the portfolio of products
that fall under a specific vertical.
- **SubVertical:** This model stores sub-verticals, which can be associated with vertical filters. These sub-verticals allow further
categorization and refinement within a vertical.
- **BaseVertical:** This abstract model will be used to associate vertical and sub-vertical filters across product types.
- **CourseVertical:** This model will extend BaseVertical to enable the assignment of vertical and sub-vertical filters to courses.

Currently, the intention is to support vertical tagging for courses only. In the future,
the same functionality can be extended to other product types (e.g., Programs, Degrees, etc.).

A new user group will be created to grant access to the admin panel for assigning vertical and sub-vertical tags to courses.
However, this user group will not have the permission to manage vertical and sub-vertical filters, this functionality will be restricted to superusers only.

This new user group will be managed using a base settings configuration variable.

Alternatives Considered
-------------------------
- Add New Models in course_metadata: Keeping functionality within a single app, simplifying integration.
However, it risks app bloat, increased coupling, and reduced readability due to the large number of existing models.
- Create a Separate Plugin: Decouples vertical tagging for better scalability and modularity, with a plug-and-play structure.
However, it requires significant initial effort, coordination, and limits Django ORM relationships with course-discovery models.

0 comments on commit 01a8aaa

Please sign in to comment.