Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: initialize app for vertical tagging in course-discovery and add an ADR for it #4542

Merged
merged 2 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
Loading