async createEvent()

in source/services/event-proxy/lib/message.js [48:111]


  async createEvent(message) {
    let _event = {
      ...message,
    };
    _event.id = uuid.v4();
    _event.createdAt = moment()
      .utc()
      .format();
    _event.updatedAt = moment()
      .utc()
      .format();
    _event.ack = false;
    _event.suppress = false;

    let docClient = new AWS.DynamoDB.DocumentClient(this.dynamoConfig);

    /**
     * Gets userId from the registrations table
     * This part can be removed if devices send userId directly.
    */
    let data = await this._getUserId(_event.deviceId);
    if (data.Count === 0) {
      Logger.error(
        Logger.levels.INFO,
        `[MissingRegistration] No registration found for device ${deviceId}.`
      );
      return Promise.reject({
        code: 400,
        error: 'MissingRegistration',
        message: `No registration found for device ${deviceId}.`,
      });
    } else if (data.Count > 1) {
      Logger.error(
        Logger.levels.INFO,
        `[RegistrationRetrieveFailure] Multiple records found for device ${deviceId}.`
      );
      return Promise.reject({
        code: 400,
        error: 'RegistrationRetrieveFailure',
        message: `Multiple records found for device ${deviceId}.`,
      });
    }
    _event.userId = data.Items[0].userId;

    let params = {
      TableName: process.env.EVENTS_TBL,
      Item: _event,
    };

    // Puts the event message
    try {
      await docClient.put(params).promise();
      return Promise.resolve(_event);
    } catch (err) {
      Logger.error(Logger.levels.INFO, err);
      return Promise.reject({
        code: 500,
        error: 'EventCreateFailure',
        message: `Error occurred while attempting to create event message for device ${
          message.deviceId
        }.`,
      });
    }
  }