Design Document: Notify users on critical actions for trackable collections.

This document will help us to achieve the implementation of the notification feature for any specific activity on groups workflow.

Background:

As per the ticket https://project-sunbird.atlassian.net/browse/SB-24361, we are trying to notify the users when there is some action happened in groups workflow.

 

As discussed with the UP team, we can use the existing the feed APIs to

  1. Notify the users of some actions made in the group scenario.

  2. Mark any notification read

Trigger a notification:

curl --location --request POST 'https://dev.sunbirded.org/api/user/feed/v1/create' \ --header 'Authorization: Bearer <Bearer Key>' \ --header 'x-authenticated-user-token: <user-token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "request": { "userId": "e79ee6a4-d79c-4236-9e05-f754010932d6", "category": "group-feed", "priority": 1, "data": { "actionData": { "actionType": "groupNotify", "title": "Title for Notification", "description": "Description which will be displayed in Notification", "contentURL": "my-groups/group-details/c59cca34-c574-49ad-953b-c1cfc7ad50a3", "identifier": // } } }'

Response:

{ "id": "api.user.feed.create", "ver": "v1", "ts": "2021-05-07 06:08:30:954+0000", "params": { "resmsgid": null, "msgid": "9238f58b985ff0903692475346dc2cee", "err": null, "status": "success", "errmsg": null }, "responseCode": "OK", "result": { "response": "SUCCESS" } }

Read a notification:

curl --location --request GET 'https://dev.sunbirded.org/api/user/v1/feed/e79ee6a4-d79c-4236-9e05-f754010932d6' \ --header 'Authorization: Bearer <auth-token>' \ --header 'x-authenticated-user-token: <user-token of the given user>' \ --header 'Content-Type: application/json'

Response:

Mark notification as read:

To make a notification as read, we have two options here.

  1. We can make the update/feed API call to make a particular feed as read.

  2. Delete a particular feed once it is read.

Update feed:
Delete feed:
Response:

Proposed solutions :

 

Solution 1: Generic solution

  • Triggering notification will be handled from CSL side

  • inside on click event handler, we’ll make a generic method in the portal side.

  • This will make sure irrespective of the category (user-feed, group-feed, etc), it will perform the defined action.

  • There won't be any hardcoded checks before redirecting.

  • redirection URL will also be part of the response.

Pros:

  • It can be used later as well.

  • There will not be any code changes required for this if it becomes generic.

Cons:

  • Since it is hardcoded in the portal side to support Category type as “notification“ to show the notifications, we need to make some code changes

Solution 2: Only to handle groups scenario:

  • create a method in group service.

  • It will take care of the redirection based on the category (group-feed).

  • It will only be bound to groups scenario.

Pros:

  • less code change

 

Cons:

  • It will be only related to groups scenario.

  • if any new requirements come, we need to modify the code once again.