@RequestMapping(value = "/update/read/{phoneNumber}/{code}", method = RequestMethod.POST) public ResponseEntity<ResponseWrapper> updateReadStatus( @PathVariable("phoneNumber") String phoneNumber, @PathVariable("code") String code, @RequestParam("uid") String uid) throws Exception { User user = userManagementService.findByInputNumber(phoneNumber); Notification notification = notificationService.loadNotification(uid); log.info( "updating notification read status for user uid : {}, notification uid : {}", user.getUid(), uid); if (!notification.getTarget().equals(user)) { return RestUtil.accessDeniedResponse(); } if (notification.isRead() && notification.isViewedOnAndroid()) { log.info("Trying to update notification when already read"); return RestUtil.errorResponse(HttpStatus.ALREADY_REPORTED, RestMessage.ALREADY_UPDATED); } else { notificationService.updateNotificationsViewedAndRead(Collections.singleton(uid)); return RestUtil.messageOkayResponse(RestMessage.NOTIFICATION_UPDATED); } }
@RequestMapping(value = "/update/read/batch/{phoneNumber}/{code}", method = RequestMethod.POST) public ResponseEntity<ResponseWrapper> updateViewedStatusBatch( @PathVariable String phoneNumber, @PathVariable String code, @RequestParam boolean read, @RequestParam List<String> notificationUids) { try { if (notificationUids != null && !notificationUids.isEmpty()) { notificationService.updateNotificationsViewedAndRead(new HashSet<>(notificationUids)); return RestUtil.messageOkayResponse(RestMessage.NOTIFICATION_UPDATED); } else { return RestUtil.messageOkayResponse(RestMessage.EMPTY_LIST); } } catch (Exception e) { return RestUtil.errorResponse(HttpStatus.BAD_REQUEST, RestMessage.ERROR); } }
@RequestMapping(value = "/list/{phoneNumber}/{code}", method = RequestMethod.GET) public ResponseEntity<ResponseWrapper> getNotifications( @PathVariable("phoneNumber") String phoneNumber, @PathVariable("code") String code, @RequestParam(value = "page", required = false) Integer queryPage, @RequestParam(value = "size", required = false) Integer queryPageSize) { User user = userManagementService.findByInputNumber(phoneNumber); final int pageNumber = (queryPage == null) ? 0 : queryPage; final int pageSize = (queryPageSize == null) ? pageLength : queryPageSize; Page<Notification> pageable = notificationService.fetchPagedAndroidNotifications(user, pageNumber, pageSize); log.info( "pageable size = {}, from page number = {}, with page size = {}", pageable.getContent().size(), pageNumber, pageSize); ResponseEntity<ResponseWrapper> responseWrapper; if (pageNumber > pageable.getTotalPages()) { responseWrapper = RestUtil.errorResponse(HttpStatus.BAD_REQUEST, RestMessage.NOTIFICATIONS_FINISHED); } else { List<NotificationDTO> notificationDTOList = pageable .getContent() .stream() .filter(NotificationDTO::isNotificationOfTypeForDTO) .map(NotificationDTO::convertToDto) .collect(Collectors.toList()); log.info("number of DTOs created : {}", notificationDTOList.size()); NotificationWrapper notificationWrapper = new NotificationWrapper(pageable, notificationDTOList); responseWrapper = RestUtil.okayResponseWithData(RestMessage.NOTIFICATIONS, notificationWrapper); } return responseWrapper; }
@RequestMapping(value = "/list/since/{phoneNumber}/{code}", method = RequestMethod.GET) public ResponseEntity<ResponseWrapper> getNotificationsSince( @PathVariable String phoneNumber, @PathVariable String code, @RequestParam(value = "createdSince", required = false) Long createdSince) { User user = userManagementService.findByInputNumber(phoneNumber); Instant intervalStart = createdSince == null ? null : Instant.ofEpochMilli(createdSince); List<Notification> notifications = notificationService.fetchAndroidNotificationsSince(user.getUid(), intervalStart); List<NotificationDTO> notificationDTOs = notifications .stream() .filter(NotificationDTO::isNotificationOfTypeForDTO) .map(NotificationDTO::convertToDto) .collect(Collectors.toList()); NotificationWrapper wrapper = new NotificationWrapper(notificationDTOs); return RestUtil.okayResponseWithData(RestMessage.NOTIFICATIONS, wrapper); }