...
Allow the response processing of question to be done on server rather than client as happening today.
Scalable Response Processing Solution for Question Sets.
Score Calculation Based on Content State Update.
Solution to the question needs to be masqueraded or excluded from the Question Read API/ Question List API.
Response Processing can happen in two ways:
Entire Question Set Response Processing
Question by Question Response Processing
Solution Proposed
Proposed System:
...
Technical Design Details:
QuestionSet Hierarchy API : A new attribute in QuestionSet to be introduced to have evaluated response on server. (“evaluable“)“evaluable“). Every QuestionSet Hierarchy will attach “QuestionSetDigest“ based on hash of user-id and questionset-id.
Code Block |
---|
"questionSet": { "timeLimits": "{\"maxTime\":\"3600\"}", "questionSetDigest": "", //#Question Set Digest to be generated at hierarchy read API with combination of "Question Set ID + userID" "evaluable": true //#true for Server Side Valuation Default:#false for client side validation } |
Question Read API : Any Question Associated with evaluable behaviour to trim off response declaration from Question Set. Instead a responseKey to be shared along with responseDeclaration. responseKey is encrypted value of response. This is permenantly persisted as encrypted. Only QuestionRead API with questionCreator access should be able to access the decrypted value on demand.
Code Block |
---|
"evaluable": true, "responseDeclaration": { "response1": { "maxScore": 1, "cardinality": "single", "type": "integer", -- To be Trimmed off ---- "correctResponse": { "value": "0", "outcomes": { "SCORE": 1 } }, -- To be Trimmed off -- #Newly Introduced Attribute "responseKey": "#Computed Hash/Encrypted Value of the result" } }, |
Question Creation ImpactCreate API:
It is possible to permanently mark the question to be “evaluable“ in nature. Any Evaluable Question evaluable question would automatically qualify for evaluable question Set. These Questions can be part of Evaluable QuestionSet only. Question Read of Evaluable Questions should exhibit the behaviour mentioned above.
Question Creation API should accept the response from the Question Creator to generate the encrypted value of the response created. This responseKey will be persisted along with Question metadata. Since the actual response is encrypted there is no effective mechanism to derive the right answer. Any Subsequent question Read API will only generate responses with encryptString without actual result.
Info |
---|
KeySet (Futuristic): Any Responses on Question Set can be persisted separately to ensure the keyset can be used for administrative purposes. |
Response Evaluation:
...
QuestionResponseValidateAPI (Async API Behaviour):
...
Code Block |
---|
{ "request": { "userId": "843a9940-720f-43ed-a415-26bbfd3da9ef", "questionSetDigest": "", "assessments":[ { "assessmentTs": 1681284869464, "batchId": "0132677340746629120", "collectionId": "do_213267731619962880127", "userId": "843a9940-720f-43ed-a415-26bbfd3da9ef", "attemptId": "5486724f41afb4997118e6d97695684f", "contentId": "do_2129959063404544001107" }, responses:[{ "identifier":"<question-id>", "questionType": "", "userResponse":[""], "responseDeclaration": {}, "responseKey":["<response-key>"] }] }], "contents": [ { "contentId": "do_2132671468826214401203", "batchId": "0132677340746629120", "status": 2, "courseId": "do_213267731619962880127", "lastAccessTime": "2023-04-12 12:56:45:687+0530" }, ] } } |
The Above payload mimics ContentStateUpdate API to mimic responses as above.
Expand | ||
---|---|---|
| ||
|
Question Set Response Processing flow
...