Introduction
This wiki explains the design and implementation of bulk upload of questions.
Jira issue: https://project-sunbird.atlassian.net/browse/SB-23374
Problem Statement:
Enable Bulk question creation.
Enable Bulk question creation and link them to sections(Units).
Enable Bulk question creation with common metadata ex: questionType, channel, createdBy, status, licence and BGMS.
Solution 1:
Create a generate QuML API for various interaction types such that it takes required parameters as input and generates a QuML output. The API takes input as a CSV file and JSON body. This API is responsible for validating and creating questions on the platform.
The endpoint for bulk upload of Question is
/question/v1/bulkupload
Mandatory fields cannot be null or empty.
If the server doesn't support the media type, it should return HTTP status code 415 (Unsupported Media Type).
HEADER PARAMETERS:
Content-Type (*required) |
Media types can be:-
|
X-Channel-ID (*required) |
It the Unique Id to identify the root organization to which the user belongs |
REQUEST BODY: multipart/form-data
file (*required) |
This is a .csv file. Each line of the file is a data record, separated by commas |
Here is an example of a POST request that includes multipart/form-data:
curl --location --request POST '<HOST_URL>/question/v1/bulkupload' \ --header 'Authorization: Bearer <TOKEN>' \ --header 'X-Channel-ID: sunbird' \ --form 'File=@"/qumlTest.csv"'
REQUEST BODY: application/JSON:
fileUrl (*required) |
|
Additional Properties (Optional) | createdBy, questionType, author, stage OR status |
Here is an example of a POST request that includes JSON data:
curl --location --request POST '<HOST_URL>/question/v1/bulkupload' \ --header 'Authorization: Bearer <TOKEN>' \ --header 'X-Channel-ID: sunbird' \ --header 'Content-Type: application/json' \ --data-raw '{ "request" : { "fileUrl": "https://dockstaging.blob.com/do_123/test.csv", "questionType": "MCQ", "createdBy": "ae94b68c-a535-4dce-8e7a-fb9662b0ad68", "author": "SCERT Haryana", "status": "Live" } }'
Response Samples:
{ "id": "api.v1.bulkupload", "ver": "1.0", "ts": "2021-10-20T09:20:59.943Z", "params": { "resmsgid": "09faf370-3187-11ec-b57e-5ffde477525a", "msgid": "095a6db0-3187-11ec-b57e-5ffde477525a", "status": "successful", "err": null, "errmsg": null }, "responseCode": "OK", "result": { "processId": "112ed159-c805-4df5-9da3-3fcd73122cc2", } }
Solution 2:
Create a generate QuML API for various interaction types such that it takes required parameters as input and generates a QuML output. The API takes input as an array of questions.
The endpoint for bulk upload of Question is
/question/v1/bulkupload
Mandatory fields cannot be null or empty.
HEADER PARAMETERS:
Content-Type (*required) |
The possible media types can be:-
|
X-Channel-ID (*required) |
It the Unique Id to identify the root organization to which the user belongs |
REQUEST BODY SCHEMA: application/JSON:
JSON The body is the representation of the resource object for creating questions, which is an array of parameters that describes the question.
{ "request": { "question": [ { "metadata": { "framework": "ekstep_ncert_k-12", "channel": "01309282781705830427", "name": "TestQuestion", "code": "9ae33d1e-a682-f30c-04b5-9bda236650ac", "mimeType": "application/vnd.sunbird.question", "primaryCategory": "Multiple Choice Question", }, "collection": [ { "identifier": "do_11324642736155033614", "unitId": "do_11324642761348710417" } ], "stage": "Review" } ] } }
Response Samples:
{ "id": "api.v1.bulkupload", "ver": "1.0", "ts": "2021-10-20T09:20:59.943Z", "params": { "resmsgid": "09faf370-3187-11ec-b57e-5ffde477525a", "msgid": "095a6db0-3187-11ec-b57e-5ffde477525a", "status": "successful", "err": null, "errmsg": null }, "responseCode": "OK", "result": { "processId": "112ed159-c805-4df5-9da3-3fcd73122cc2", } }
Conclusion:
<TODO>