...
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_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:
...
, |
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" } ] ] } } } |