Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

This document covers the design and modifications needed to support events related use cases in Sunbird.

Below use cases have been considered when creating the spec

  • A single event listed (eg: a ask me anything session)

  • A collection of events (eg: a multi-day conference with one event each for the specific sessions)

  • Recurring events (eg: a 4 month course being taught on Mondays & Fridays)

  • A collection with an event within (eg: a content collection with training material, leading up to a live session)

Event Model

Event Attributes

"name", 
"code", //identifier
"description",
"status", // [live, draft, retired, cancelled]
"posterImage", //main image to show on the UI
"thumbnail", //small image to show for listing
"moreDetailsLink", //link to more details of the event
"language",
"ageGroup",
"topics",
"participationMethod", //[by invitation link, by registration, by scope {<org>, <group>}]
"startDate",
"endDate",
"startTime",
"endTime",
"bookingStartDate",
"bookingEndDate",
"totalSeats",
"availableSeats",
"eventType", //[online, offline, online_and_offline]
"onlineProvider", //should this be an edge instead, as there would be a known set of providers ?
"onlineProviderConfig", //meeting id, password or direct links can be captured here
"venue", //venue of physical location in case of offline meeting. Should this be an edge instead?
"recordingLink",
"recordingLinkPassword",
"dialcodes",
"createdOn",
"createdBy",
"updatedOn",
"updatedBy",
"flagReasons",
"flags",
"flaggedBy",
"lastFlaggedOn"

Event Relations

eventSet hasSequenceMember event
collection hasSequenceMember event
event associatedTo content or collection //link to all the content shared as part of event

Event APIs

  • Create Event

  • Update Event

  • Publish Event

  • Read Event

  • Search Events

  • Link Content to Event

EventSet Attributes

EventSet will be a collection of Event objects. Below are the additional attributes that EventSet will have apart from Event, barring a few which will be stored at event level (startTime, endTime, recordingLink, flagReasons, flags, flaggedBy, lastFlaggedOne)

"scheduleType", //[recurring, non-recurring]
"schedule", 
  //recurring template -> 
      {
        repeatEvery:<N>, repeatEveryType:<days|weeks|months|years>, 
        //if weeks selected:
        repeatOnDays:[<day of week1>,..], //e.g. every Monday and Friday
        //if month selected:
        repeatOnWeek:<N>, repeatOnWeekday:<day of the week>, //e.g. Every Second Thursday of the month
        startTime: <startTime>,
        endTime: <endTime>
      }
  //non-recurring template
      [{date:<date>,startTime:<startTime>,endTime:<endTime>}]




EventSet Relations

eventSet hasSequenceMember event
collection hasSequenceMember eventSet

Updated Enrolment table design

Changes to be done:

  • Auto-create a batch for every event set & event on publish (similar to how auto batch creation is done for some courses currently).

  • Generalise user_enrolment table to work with any type of asset (not just collections).

  • Generalise content_state to capture status of child events in an event set or a collection (similar to how status of child content in a collection in currently captured)

  • Enhance enrolment and content-state APIs to work for all asset types (i.e. events and event sets).

  • Generalise async status_aggregator job to work for all asset types (i.e. events and event sets).

Iteration 2:

  • Generalisation of certificate config and certificate issue

  • Generalisation of reporting jobs

Iteration 3:

  • Make batches optional for enrolment and tracking

Telemetry and tracking - Online Events

When an online event is launched, the browser will redirect to the respective event platform, so telemetry events cannot be produced, since Sunbird is not in control of those platforms. However most platforms offer APIs to request attendee data, or webhooks to receive participant data. 

For each user who enrolled to the event, we need to be able to store

  • Did they join the event or not

  • How much time did they join for 

Based on this the “attendance” will be marked. 


The current user enrollment table does not have these, so a revised design of the enrollment table is necessary.


Venues & Configuration for online events

Offline events can be mapped to venues. For online events, we can use the various providers as venues. Each instance of the provider config will be a venue. This allows doing checks to ensure there is only one event at a time happening at a venue. 


Online Events Interface 

The online events will be implemented using an interface that allows integrating multiple providers like Zoom, Gotomeeting, Google Meet, Jitsi etc. Proposed interface methods

  • createEvent()

  • addParticipant()

  • getParticipantJoinLink()

  • getHostJoinLink()

  • getRecording()

  • getAttendance()


UI Components - Consumption

Each component will be configured via the form API. All decisions in the UI should be configured. This will give flexibility to the implementation to show / hide things. 

List of Events

<sb-event-list listconfig="[listConfig]"></sb-event-list>

<sb-event-calendar listconfig="[listConfig]"></sb-event-calendar>

<sb-event-grid listconfig="[listConfig]"></sb-event-grid>

Event Details

Event Details (with variations for upcoming, ongoing & complete stages, list of related content eg: recordings)

<sb-event-details identifier="[identifier]"></sb-event-details>

List of Attendees

For Event manager, screen to view attendees and download attendance data

<sb-event-attendees identifier="[identifier]"></sb-event-attendees>

UI Components - Creation

For creation, the new hierarchy editor will be used. A plugin will be created for adding support to create events within this editor. 

List of Services

  • getEventList(listConfig)

  • getEvent(identifier)

  • getParticipation()

  • getAttendeeJoinLink()

  • getHostJoinLink()

  • getEventFormConfig()

  • createEvent()

  • updateEvent()

  • deleteEvent()

  • getEventAttendees()

Additional Roles Needed

Event Creator

  • Can create / edit / publish events

  • Can view and download the attendee list for a event

API Endpoints (Work In Progress)

  • Create Event

  • Edit Event

  • Publish Event

  • Create Participation

  • Delete Participation

  • Get attendees list

  • Get attendees CSV export

  • Get join link

  • No labels