Problem Statement
Currently to update the content implementation team needs to make multiple calls, which makes it a difficult process. Additionally there is no auditing in place to track as content was updated by whom. There should be an easier way to update the content.
Jira Legacy | ||||||||
---|---|---|---|---|---|---|---|---|
|
Solution Approach
Solution approach to overcome the problem has below components
- Sunbird Platform will expose an API for end user to initiate update content
- Sunbird Platform will internally call Content Service with the request provided by User
- Content Service will validate the request
- With valid request, Content Service will initiate the update process through kafka pipeline and will return unique process ID identifying the process.
- With Invalid request, Content Service will return error message which Sunbird platform will return to User
- For valid response from Content Service, processId with other details will be saved in Sunbird platform DB
Problem Statement
What is the API for update content?
Solution approach
URL:
POST /v1/content/update
Headers:
Authorization
X-authenticated-user-token
Request Params:
name | type | description |
---|---|---|
script | String | name of the script to be run by Content Service |
version | String | the version of the script |
content | Map | additional parameters which would work as arguments for the scripts |
Response Params:
name | type | description |
---|---|---|
processId | String | unique identifier of the process started for the request, needed to get the status of the process |
Errors:
status code | error code | error message |
---|---|---|
400 | MANDATORY_PARAMETER_MISSING | Mandatory parameter {script,version} is missing. |
400 | UPDATE_FAILED | Data updation failed due to invalid Request |
Sample Request and Response:
No Format | ||
---|---|---|
| ||
Request
{
request : {
"script" : "course_rename",
"version" : "1.2",
"content" : {
"oldName" : "AB",
"newName" : "ab"
}
}
}
Response
{
"id": "api.content.update",
"result": {
"processId" : "01262366359399628812"
}
}
|
Problem Statement
How we store the process information in DB
Solution approach
content_update_process table structure should be as below
column | type | description |
---|---|---|
id | text | holds process id |
request | text | holds the input request as it is |
status | text | the status last received from content service |
message | text | message from content service in case of failure |
createdby | text | userid of one who invoked the process |
createdat | timestamp | when the process was started |
updatedat | timestamp | when the process was last updated |
Problem Statement
What is the API for getting the process status
Solution approach
URL:
GET /v1/content/update/status/{processId}
Headers:
Authorization
Request Params:
None
Response Params:
name | type | description |
---|---|---|
status | text | status as COMPLETED or FAILURE |
message | text | contains error messages in case of failure |
Errors:
status code | error code | error message |
---|---|---|
400 | INVALID_PROCESS_ID | Invalid Process Id |
Sample Request and Response:
No Format | ||
---|---|---|
| ||
Request
GET /v1/content/update/status/01262366359399628812
Response
{
"id": "api.content.update.status",
"result": {
"status" : "FAILURE",
"message" : "Operation to update failed"
}
}
|
Deprecated SOLUTION APPROACH
Solution approach is divided into multiple part
There should be generated key to facilitate the process of update of content in a channel by anyone who has the key, hence bypassing the user authentication process . The details of the master key generation design and approach are here (Master Key APIs).Auditing of the update of the content by keys.