Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This document details the design options for introducing scores as part of group aggregate API and reports.

Design

Option1: Assessments as individual activity

Currently, only trackable collections and their progress are stored in user_activity_agg table.
Below is the flow used to show scores in group aggregates.

AssessmentAggregator job changes:

For score aggregates, store Create a new process function to compute the best attempted score of each assessment as a separate activity in the below formatand store it in user_activity_agg table in below format.

activity_type

activity_id

user_id

context_id

agg

agg_last_updated

Assessment

do_123(assessmentId)Course

collectionId

user_123

cb:batch_123

{'score:assessmentId_1': <best attempted score>,
'score:assessmentId_2': <best attempted score>}

{'score:assessmentId_1': ‘timestamp’}

Group Aggregate API changes:

Create a new v2 endpoint and accept list of activityIds in the input and response is based on the activityId

Request:

...

,
'score:assessmentId_2':: ‘timestamp’}

Implementation steps:

  • Read the best score from assessment_aggregate table using courseId, userId, batchId and contentId from the event

  • Partial update the agg and agg_last_updated columns in user_activity_agg

Group Aggregate API changes:

The response contains the score aggregates also if the collection contains self assessments.

Response:

Code Block
{
    "id": "api.group.activity.agg",
    "ver": "v2v1",
    "ts": "2021-04-0714 0517:5349:3230:742782+00000530",
    "params": {
        "resmsgid": null,
        "msgid": "62ae69c970b89413-edf7fe1f-4486482a-bbfcb92a-c84454add954e27d4af0ae4f",
        "err": null,
        "status": "success",
        "errmsg": null
    },
    "responseCode": "OK",
    "result": {
    "assessmentId_1": {       "activity": {
            "id": "assessmentId_1collectionId",
            "type": "AssessmentCourse",
            "agg": [
                {
                    "metric": "scoreenrolmentCount",
                    "lastUpdatedOn": 15966477006131618390479814,
                    "value": 1 <totla number of enrolments>
                }
            ]
        },
        "groupId": "b0c4a645-807e-41c7-972e-5c48c5b5e5e7groupId",
        "members": [
            {
                "agg": [
              {      {
        "metric": "score",               "valuemetric": 20"completedCount",
              "lastUpdatedOn": 1596647700613         "value": 2,
  }           ],           "namelastUpdatedOn": "Creation",1596647700613
          "role": "admin",           "status": "active"},
          "createdBy": "874ed8a5-782e-4f6c-8f36-e0288455901e",          {
"userId": "874ed8a5-782e-4f6c-8f36-e0288455901e"         }       ]     },    "metric": "score:assessmentId_21":,
{       "activity": {         "id": "assessmentId_2",
        "typevalue": "Assessment"10, <best attempted score>
      "agg": [           {      "lastUpdatedOn": 1618390479814
     "metric": "score",             "lastUpdatedOn": 1596647700613},
            "value": 1         {
 }         ]       },       "groupIdmetric": "b0c4a645-807e-41c7-972e-5c48c5b5e5e7score:assessmentId_2",

     "members": [         {           "aggvalue": [20, <best attempted score>
         {               "metriclastUpdatedOn": "score",1618390479814
              "value": 30,     }
         "lastUpdatedOn": 1596647700613      ],
      }           ],
    "name": "",
     "name": "Creation",           "role": "admin",
                "status": "active",
                "createdBy": "874ed8a5-782e-4f6c-8f36-e0288455901euserId",
                "userId": "874ed8a5-782e-4f6c-8f36-e0288455901e"userId"
            }
      ]  ]
  }   }
}