async sendAlert()

in source/services/notification/lib/alert.js [46:132]


  async sendAlert(message) {
    const _self = this;
    const _type = message.type;
    const _deviceId = message.deviceId;

    //Step1. find device registration and get ownerid
    try {
      const validRegistration = await _self._getDeviceRegistration(_deviceId);
      if (!validRegistration) {
        Logger.error(
          Logger.levels.INFO,
          `[MissingRegistration] No registration found for device ${_deviceId}.`
        );
        return Promise.reject({
          code: 400,
          error: 'MissingRegistration',
          message: `No registration found for user for device "${_deviceId}".`,
        });
      } else {
        let _userId = validRegistration.userId;

        //Step2. get phone number
        const _phoneNumberAtt = await _self._getUserRegisteredPhoneNumber(
          _userId
        );
        if (!_phoneNumberAtt) {
          Logger.error(
            Logger.levels.INFO,
            `[MissingPhoneNumber] No phone number found.`
          );
          return Promise.reject({
            code: 400,
            error: 'MissingPhoneNumber',
            message: `No phone number found.`,
          });
        }

        //Step3. get alert level and notification status from user settings
        const _settingsData = await _self._getUserAlertLevel(_userId);
        if (!_settingsData) {
          Logger.error(
            Logger.levels.INFO,
            `[MissingUserConfig] No user settings found.`
          );
          return Promise.reject({
            code: 400,
            error: 'MissingUserConfig',
            message: `No user settings found.`,
          });
        }
        const alertLevel = _settingsData.Item.setting.alertLevel;
        const sendNotification = _settingsData.Item.setting.sendNotification;
        if (!sendNotification) {
          return Promise.resolve({
            code: 200,
            message: `alert not sent for device "${message.deviceId}" event type "${message.type}".`,
          });
        }

        //Step4. publish text message
        if (alertLevel.indexOf(_type) > -1) {
          const sns = new AWS.SNS({apiVersion: '2010-03-31'});
          let params = {
            PhoneNumber: _phoneNumberAtt[0].Value,
            Message: `** Smart Product Event Alert **\nYou have a new ${message.type} event.\n\n* Device: ${validRegistration.deviceName}\n* Time: ${message.createdAt}\n* Message: ${message.message}\n* Value: ${message.details.value}`
          };
          await sns.publish(params).promise();
          return Promise.resolve({
            code: 200,
            message: `alert sent for device "${message.deviceId}".`,
          });
        } else {
          return Promise.resolve({
            code: 200,
            message: `alert not sent for device "${message.deviceId}" event type "${message.type}".`,
          });
        }
      }
    } catch (err) {
      Logger.error(Logger.levels.INFO, err);
      return Promise.reject({
        code: 500,
        error: 'SendAlertFailure',
        message: `Error occurred while attempting to send event alert for device "${message.deviceId}".`,
      });
    }
  }