Design: Categories [Draft]

Category Object Definition

  • Name - Name of the category

  • Description - Description of the category

  • Object Type - Content, Collection, Question, QuestionSet

  • ObjectMetadata - any of the user provided metadata attributes can be configured for the category.

    • name: name of the attribute, e.g: trackable, mimeType

    • defaultValue: default value to be set, e.g.: trackable = true

    • enum: list of allowed values for the attribute when creating objects for this category, e.g: mimeType: [pdf, mp4]

    • modifiable: true/false, if the default value specified for the attribute in the category definition can be modified by the creator

  • Organisation Framework Types

  • Target Framework Types

  • Display Categories - list of other categories that can be added as display categories for objects of this category

A category will have one definition for object type.

Channel Configuration

Each channel can configure the list of primary categories enabled for creators belonging to the channel.
Channel can also override the category definition.

 

 


Working Notes

  • Categories should be configurable

    • Default & Fixed Behaviours: “Course” category will always have “trackable = yes” (i.e. fixed behaviour) and will have “Visibility = Public” by default (creator can modify it)

    • One category can be defined for Multiple object types: “TV Show“ category can be either a Content or a Collection object.

    • Primary Category to Display Categories mapping

  • Override Category Configuration by Channel

    • Platform level will have a master list of categories and their default definitions

    • A Channel can configure the following:

      • Applicable primary categories for the channel creators

      • Override definitions (optionally) for the selected categories

  • Hierarchy Structure for collection categories

    • E.g.: “Textbook” category - {unit: “Chapter”, children: {unit: “Sub-Chapter”, objectTypes: [], categories: []}}

 

Category Objects:

  • TV Show - for object type Content

  • TV Show - for object type Collection

  • TV Show - for object type Collection & for channel “xyz“

  • Course - for object type Collection & for channel “xyz“

 

Category Object:

  • name

  • description

  • objectType

  • channel

  • displayCategories

  • objectMetadata:

    • name: trackable, hierarchyStructure, …

    • defaultValue

    • enum

    • modifiable: true/false

Category APIs:

  • validate the objectMetadata definitions for category - should be subset of object schema

  • cache on publish

  • updates to category need not modify already created objects

 

Behaviour:

  • “Primary Category” is required in create API

  • Primary Category in not modifiable

  • Schema validation (in both create & update):

    • used to happen against object schema.

    • Object schema should be overlaid with category schema (specific for the channel)

    • Overlaying should not happen at runtime… Cache all versions of the schema - per object, per category, per channel, etc…

 

Backward Compatibility:

  • Content types mapping with category & other attributes

 

Data Migration of existing objects:

  • Bulk or on-demand?