Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/main/java/org/sunbird/common/util/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,13 @@ public class Constants {
public static final String PUBLIC_COURSE_LIST = "exploreOpenCourseList";
public static final String LAST_UPDATED_ON = "lastUpdatedOn";
public static final String DESCENDING_ORDER = "desc";


public static final String NOTIFICATION_PREFERENCE="notification_preference";
public static final String NOTIFICATION_USERID = "user_Id";
public static final String TABLE_USER_NOTIFICATION_PREFERENCE = "user_notification_preference";
public static final String API_READ_NOTIFICATION_PREFERENCE = "api.read.notification.preference";
public static final String API_UPDATE_NOTIFICATION_PREFERENCE = "api.update.notification.preference";

private Constants() {
throw new IllegalStateException("Utility class");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,17 @@ private ResponseEntity<?> adminMigrateUser(@RequestHeader(Constants.X_AUTH_TOKEN
SBApiResponse response = profileService.migrateUser(request, userToken, authToken);
return new ResponseEntity<>(response, response.getResponseCode());
}

@GetMapping("/user/v1/notificationpreference")
public ResponseEntity<?> getNotificationPreferences(@RequestHeader(Constants.X_AUTH_USER_ID) String userId) {
SBApiResponse response = profileService.getNotificationPreferencesById(userId);
return new ResponseEntity<>(response, response.getResponseCode());
}

@PostMapping("/user/v1/notificationpreference")
public ResponseEntity<?> updateNotificationPreferences(@RequestHeader(Constants.X_AUTH_USER_ID) String userId,
@RequestBody Map<String,Object> request) {
SBApiResponse response = profileService.updateNotificationPreference(userId,request);
return new ResponseEntity<>(response, response.getResponseCode());
}
}
4 changes: 4 additions & 0 deletions src/main/java/org/sunbird/profile/service/ProfileService.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,8 @@ public interface ProfileService {
SBApiResponse userAutoComplete(String searchTerm);

SBApiResponse migrateUser(Map<String, Object> request, String userToken, String authToken);

SBApiResponse getNotificationPreferencesById(String userId);

SBApiResponse updateNotificationPreference(String userId,Map<String,Object> request);
}
85 changes: 81 additions & 4 deletions src/main/java/org/sunbird/profile/service/ProfileServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -38,6 +39,8 @@

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

@Service
@SuppressWarnings({ "unchecked", "serial" })
Expand Down Expand Up @@ -494,7 +497,7 @@ public SBApiResponse userBasicInfo(String userId) {
return response;
}

@Override
@Override
public SBApiResponse userAutoComplete(String searchTerm) {
SBApiResponse response = new SBApiResponse();
response.setResponseCode(HttpStatus.BAD_REQUEST);
Expand All @@ -514,8 +517,7 @@ public SBApiResponse userAutoComplete(String searchTerm) {
response.getParams().setStatus(Constants.SUCCESS);
response.put(Constants.RESPONSE, resultResp);
} catch (Exception e) {
response.getParams()
.setErrmsg("Failed to get user details from ES. Exception: " + e.getMessage());
response.getParams().setErrmsg("Failed to get user details from ES. Exception: " + e.getMessage());
}
return response;
}
Expand Down Expand Up @@ -957,7 +959,7 @@ private String syncUserData(String userId) {
}
return errMsg;
}

public List<Map<String, Object>> getUserSearchData(String searchTerm) throws Exception {
List<Map<String, Object>> resultArray = new ArrayList<>();
Map<String, Object> result;
Expand All @@ -978,4 +980,79 @@ public List<Map<String, Object>> getUserSearchData(String searchTerm) throws Exc
}
return resultArray;
}

@Override
public SBApiResponse getNotificationPreferencesById(String userId) {
SBApiResponse response = ProjectUtil.createDefaultResponse(Constants.API_READ_NOTIFICATION_PREFERENCE);
String errMsg = null;
if (StringUtils.isEmpty(userId)) {
response.getParams().setErrmsg("Please Provide a user Id");
response.setResponseCode(HttpStatus.BAD_REQUEST);
response.getParams().setStatus(Constants.FAILED);
return response;
}
Map<String, Object> request = new HashMap<>();
request.put(Constants.NOTIFICATION_USERID, userId);
try {
List<Map<String, Object>> notificationPreferences = cassandraOperation.getRecordsByProperties(
Constants.KEYSPACE_SUNBIRD, Constants.TABLE_USER_NOTIFICATION_PREFERENCE, request,
Collections.singletonList(Constants.NOTIFICATION_PREFERENCE));
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
List<Map<String, Object>> mapping = gson.fromJson(notificationPreferences.toString(), List.class);
for (Map<String, Object> responseMap : mapping) {
response.putAll(responseMap);
}
response.setResponseCode(HttpStatus.OK);
response.getParams().setStatus(Constants.SUCCESSFUL);
} catch (Exception e) {
errMsg = "Failed to process message. Exception: " + e.getMessage();
}
if (StringUtils.isNotBlank(errMsg)) {
response.getParams().setStatus(Constants.FAILED);
response.getParams().setErrmsg(errMsg);
response.setResponseCode(HttpStatus.BAD_REQUEST);
}
return response;
}

@Override
public SBApiResponse updateNotificationPreference(String userId, Map<String, Object> request) {
SBApiResponse response = ProjectUtil.createDefaultResponse(Constants.API_UPDATE_NOTIFICATION_PREFERENCE);
String errMsg = null;
if (StringUtils.isEmpty(userId)) {
response.getParams().setErrmsg("Please Provide user Id");
response.setResponseCode(HttpStatus.BAD_REQUEST);
response.getParams().setStatus(Constants.FAILED);
return response;
}
try {
Map<String, Object> requestBody = (Map<String, Object>) request.get(Constants.REQUEST);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(requestBody);
Map<String, Object> updateRequest = new HashMap<>();
updateRequest.put(Constants.NOTIFICATION_PREFERENCE, json);
Map<String, Object> compositeKey = new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;

{
put(Constants.NOTIFICATION_USERID, userId);
}
};
Map<String, Object> updateRecord = cassandraOperation.updateRecord(Constants.KEYSPACE_SUNBIRD,
Constants.TABLE_USER_NOTIFICATION_PREFERENCE, updateRequest, compositeKey);
if (updateRecord.isEmpty() == Boolean.FALSE) {
response.setResponseCode(HttpStatus.OK);
response.getParams().setStatus(Constants.SUCCESS);
}
} catch (Exception e) {
errMsg = "Failed to process message. Exception: " + e.getMessage();
}
if (StringUtils.isNotBlank(errMsg)) {
response.getParams().setStatus(Constants.FAILED);
response.getParams().setErrmsg(errMsg);
response.setResponseCode(HttpStatus.BAD_REQUEST);
}
return response;
}
}