From 6dcd26424d58dec4a207834f602c8672b9332dfa Mon Sep 17 00:00:00 2001 From: manas Date: Thu, 15 Sep 2022 12:34:18 +0530 Subject: [PATCH] Read Notification preferences and update notification preference api --- .../org/sunbird/common/util/Constants.java | 8 +- .../profile/controller/ProfileController.java | 13 +++ .../profile/service/ProfileService.java | 4 + .../profile/service/ProfileServiceImpl.java | 85 ++++++++++++++++++- 4 files changed, 105 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/sunbird/common/util/Constants.java b/src/main/java/org/sunbird/common/util/Constants.java index 08fc19862..6172e05a1 100644 --- a/src/main/java/org/sunbird/common/util/Constants.java +++ b/src/main/java/org/sunbird/common/util/Constants.java @@ -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"); } diff --git a/src/main/java/org/sunbird/profile/controller/ProfileController.java b/src/main/java/org/sunbird/profile/controller/ProfileController.java index 194a52f01..81728b81e 100644 --- a/src/main/java/org/sunbird/profile/controller/ProfileController.java +++ b/src/main/java/org/sunbird/profile/controller/ProfileController.java @@ -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 request) { + SBApiResponse response = profileService.updateNotificationPreference(userId,request); + return new ResponseEntity<>(response, response.getResponseCode()); + } } diff --git a/src/main/java/org/sunbird/profile/service/ProfileService.java b/src/main/java/org/sunbird/profile/service/ProfileService.java index de52ddf96..f59a6d679 100644 --- a/src/main/java/org/sunbird/profile/service/ProfileService.java +++ b/src/main/java/org/sunbird/profile/service/ProfileService.java @@ -17,4 +17,8 @@ public interface ProfileService { SBApiResponse userAutoComplete(String searchTerm); SBApiResponse migrateUser(Map request, String userToken, String authToken); + + SBApiResponse getNotificationPreferencesById(String userId); + + SBApiResponse updateNotificationPreference(String userId,Map request); } diff --git a/src/main/java/org/sunbird/profile/service/ProfileServiceImpl.java b/src/main/java/org/sunbird/profile/service/ProfileServiceImpl.java index 2c63c1a3e..236a16a9f 100644 --- a/src/main/java/org/sunbird/profile/service/ProfileServiceImpl.java +++ b/src/main/java/org/sunbird/profile/service/ProfileServiceImpl.java @@ -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; @@ -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" }) @@ -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); @@ -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; } @@ -957,7 +959,7 @@ private String syncUserData(String userId) { } return errMsg; } - + public List> getUserSearchData(String searchTerm) throws Exception { List> resultArray = new ArrayList<>(); Map result; @@ -978,4 +980,79 @@ public List> 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 request = new HashMap<>(); + request.put(Constants.NOTIFICATION_USERID, userId); + try { + List> 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> mapping = gson.fromJson(notificationPreferences.toString(), List.class); + for (Map 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 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 requestBody = (Map) request.get(Constants.REQUEST); + ObjectMapper objectMapper = new ObjectMapper(); + String json = objectMapper.writeValueAsString(requestBody); + Map updateRequest = new HashMap<>(); + updateRequest.put(Constants.NOTIFICATION_PREFERENCE, json); + Map compositeKey = new HashMap() { + private static final long serialVersionUID = 1L; + + { + put(Constants.NOTIFICATION_USERID, userId); + } + }; + Map 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; + } }