Problem statement :
Consumer want to show count of upcoming and ongoing open batches for a course. Since course is stored under learning platform and created batch from course are stored under sunbird-LMS.
There are two different system and they don't know each other apart from validation.
Proposed Solution 1:
As of now Sunbird is running a cron job on daily basis, to update some meta data inside course. This scheduler job will do following actions.
* Select all those batch whose startDate <= today date and countIncrementStatus is false.
* Select all those batch whose endDate >= yesterday date countDecrementStatus is false.
* Now based on above two query and batch type (open or invite-only) , it will update course meta data as follow.
* in case of course going to start now. it will add key as ""c_" + {"sunbird_installation"}+ "_open_batch_count" or c_{"sunbird_installation"}_private_batch_count. with value as int.
* in case of batch end , it will decrements count against same key.
Pros | Cons |
---|---|
As get course has meta data to indicate open batch count per installation, so no need to make any extra api call |
|
2. Data is updated by scheduler job and scheduler job is not 100% guaranteed | |
3. Some time due to content attribute changes , it's not able to update the content, so in that case meta data won't be updated. 4. TO add meta data for upcoming batch as well , will have more complexity to manage it when upcoming batch changes as ongoing. |
Note : So to support solution 1: we need to take following actions:
Actions |
---|
|
Proposed Solution 2:
Sunbird will expose a new api to get open batch count for list for ongoing and upcoming batches. New api details will be as follows:
URI: v1/course/batch/count?offset=0&limit=20 Methods: GET --- Internal work flow : When user call this api , it will internally make course batch search by passing different filters. It will internally make two ES call. first call to collect all courseIds with participant list . Based on that response it will keep count of same courseId and remove those courseId for which user is already enrolled. After that based on unique courseList it will fetch complete data and merge count in new response. { "request": { "filters":{ "status":["0","1"], "enrollmentType":"open" }, "offset":0, "limit":20 } } ---- Response: { "id": "api.course.batch.count", "ver": "v1", "ts": "2018-11-20 17:53:00:716+0000", "params": { "resmsgid": null, "msgid": "8e27cbf5-e299-43b0-bca7-8347f7e5abcf", "err": null, "status": "success", "errmsg": null }, "responseCode": "OK", "result": { "response": { "count": 8, "content": [ { "identifier": "", "createdFor": [ "", "" ], "courseAdditionalInfo": { "courseName": "SUBU_01", "leafNodesCount": "3", "description": "Why?", "courseLogoUrl": "https://sunbirdstaging.blob.core.windows.net/sunbird-content-staging/content/{}/artifact/images-1_1532061239427.thumb.jpg", "tocUrl": "https://sunbirdstaging.blob.core.windows.net/sunbird-content-staging/content/{}/artifact/{}toc.json", "status": "Live" }, "endDate": "2018-12-31", "description": "nieowhoifheoiw", "participant": { "userId": true }, "countIncrementStatus": false, "createdDate": "2018-11-21 04:47:18:306+0000", "createdBy": "", "courseCreator": "", "hashTagId": "0126384233410641921", "mentors": [], "countDecrementStatus": false, "name": "My batch", "id": "0126384233410641921", "enrollmentType": "open", "courseId": "do_212638416227246080157", "startDate": "2018-11-21", "status": 1, "openBatchCount":2 }, { ........ "courseId": "do_2126299478299033601672", "openBatchCount":2 } ] } } }
Pros | Cons |
---|---|
|
|
Proposed Solution 3:
User can make another api as batch search api by passing all courseIds and some extra filters.
{"request":{"filters":{ "courseId" : ["do_112634552998936576175","do_112634535631675392173","do_112633845274157056122"],"status":["0","1"],"enrollmentType":"open"}, "sort_by":{"createdDate":"desc"} } }
Pros | Cons |
---|---|
|
|
Open Questions :
- If one course have 3 open batches and caller already enrolled for one batch then do we need to sent open batch count as 3 or 2 or for him there is no open batch to do enroll.