Content service

Data structures

The core responsibility of the content service is handling all operations related to content. Next to creating, modifying, and deleting content, this service also provides ways of structuring content and tracking the progress of users on content. The content entities stored in this service represent an abstraction of actual content. This means no actual data such as media files can be found in this service. Rather content entities in this service reference the actual content located in other services. Content can be structured by adding them into stages, which can be ordered in sections. A chapter can contain one or multiple sections. For further information on how and for what these sections and stages are used, we recommend reading our concept on non-linear curriculum.

A more technical description of the content service and its GraphQL endpoints can be found in our Github Repository README.

Content types

Currently, our system supports two different types of content:

  1. Media Content

  2. Assessments

Media content is provided by the media service. Media records in the media service are linked to one or more media contents in the content service. This is to allow for media to be reused in different chapters or courses. Assessments can be further specified into quizzes that are located on the quiz service and flashcard sets, located on the flashcard service.

Other than the type of content and a user’s progress on this content, the content service does not contain any more information on the exact content of content entities. The exact content is stored in the corresponding services. These services link their content to the content entities in the content service.

Tracking of user progress on content

For each user, progress on individual content can be tracked. Progress can be queried from this service, with options for aggregating progress. Currently, this service offers GraphQL endpoints to provide progress information on single content entities, aggregated progress on stages and aggregated progress for a whole chapter. The logging of new progress in content is done in the underlying services media service, quiz service, and flashcard service. These notify the content service of any changes and new user progress via event messages. The content service collects this information and in case of meaningful progress, notifies the reward service and the skill-level service via a different event message. For more information on user progress tracking in our application we recommend reading our documentation on user progress.

Content Suggestions

Next to offering information on a user’s progress for content, the content service also provides an option of suggesting content for an individual user. We recommend reading our suggestion concept for more information on content suggestions. Our current implementation of suggestions is done in the following way: Suggestions can be restricted by filter parameters:

  • chapters

  • skill types

  • number of suggestions

The content service will then retrieve all available content based on all reachable stages, containing content. A stage is reachable in a section if all previous stages have been completed. All content will then be filtered by if the content has not been learned yet or is ready for repetition (more details on repetitions can be found here). The remaining content will be divided into content that is labeled as required by stages and content labeled as optional. From the content set that is labeled as required our implementation selects the first x (defined by the filter above) contents. If there are fewer contents in this list than requested, the remaining spots are filled up by content from the optional set. Both sets are sorted in the following order:

  1. new or not yet learned content

  2. hasn’t been done in a long time

  3. reward points for completing content

  4. has been learned before

Management of Items and Skills

Each assessment has a list of items. Each item is a entity, that can be answered by a student. Current items are flashcards and questions. Items build the foundation for the calculation the knowledge status. For more information see the documentation for the calculation of the knowledge status. To each item belongs a list with skills associated with the item and a list with levels of Bloom’s Taxonomy, that are associated with the item. The content service is responsible for the management of the skills and levels of Bloom’s Taxonomy. The quiz service, and flashcard service notify the content service, when question or a flashcard is deleted. Additionally the content service is responsible for providing the skillLevel service with the necessary information regarding the items a user has answered. This is done by adding the required information to the user-progress event whenever the content service publishes this event.