Source: api/routes/feeds/model.js

/**
 * CogniCity Server /feeds data model
 * @module src/api/feeds/model
 **/
 import Promise from 'bluebird';

 /**
 * Methods to interact with feeds layers in database
  * @alias module:src/api/feeds/model
  * @param {Object} config Server configuration
  * @param {Object} db PG Promise database instance
  * @param {Object} logger Configured Winston logger instance
  * @return {Object} Query methods
  */
export default (config, db, logger) => ({

  // Add a new qlue report
  addQlueReport: (body) => new Promise((resolve, reject) => {
    // Setup query
    let query = `INSERT INTO ${config.TABLE_FEEDS_QLUE}
       (post_id, created_at, disaster_type, text, image_url, title, qlue_city,
         the_geom)
      VALUES ($1, $2, $3, $4, $5, $6, $7, ST_SetSRID(ST_Point($8,$9),4326))`;

    // Setup values
    let values = [body.post_id, body.created_at, body.disaster_type, body.text,
      body.image_url, body.title, body.qlue_city, body.location.lng,
      body.location.lat];

    // Execute
    logger.debug(query, values);
    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
      .then(() => resolve({post_id: body.post_id, created: true}))
      .catch((err) => {
        if (err.constraint === 'reports_post_id_key') {
          resolve({post_id: body.post_id, created: false,
            message: `${body.post_id} already exists in reports table`});
        } else {
          reject(err);
        }
        });
    }),

  // Add a detik report
  addDetikReport: (body) => new Promise((resolve, reject) => {
    // Setup query
    let query = `INSERT INTO ${config.TABLE_FEEDS_DETIK}
    (contribution_id, created_at, disaster_type, title, text, url, image_url,
      the_geom)
    VALUES ($1, $2, $3, $4, $5, $6, $7, ST_SetSRID(ST_POINT($8, $9),4326))`;

    // Setup values
    let values = [body.contribution_id, body.created_at, body.disaster_type,
      body.title, body.text, body.url, body.image_url, body.location.longitude,
      body.location.latitude];

    // Execute
    logger.debug(query, values);
    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
      .then(() => resolve({contribution_id: body.contribution_id,
        created: true}))
      .catch((err) => {
        if (err.constraint === 'reports_contribution_id_key') {
          resolve({contribution_id: body.contribution_id, created: false,
            message: `${body.contribution_id}`
            + ` already exists in reports table`});
        } else {
        /* istanbul ignore next */
        reject(err);
        }
      });
  }),
});