Skip to content
This repository has been archived by the owner on Mar 7, 2018. It is now read-only.

Commit

Permalink
Merge pull request #32 from CatalystCode/facts-resolver
Browse files Browse the repository at this point in the history
Implement FactSchema.{list,get}
  • Loading branch information
c-w committed Jul 6, 2017
2 parents b6efdc7 + a6d78fd commit c2db278
Showing 1 changed file with 65 additions and 2 deletions.
67 changes: 65 additions & 2 deletions src/resolvers-cassandra/Facts/queries.js
@@ -1,20 +1,83 @@
'use strict';

const Promise = require('promise');
const cassandraConnector = require('../../clients/cassandra/CassandraConnector');
const withRunTime = require('../shared').withRunTime;
const trackEvent = require('../../clients/appinsights/AppInsightsClient').trackEvent;

/**
* @typedef {id: string, language: string, title: string, tags: string[], date: string, link: string, text: string, sources: string[]} Fact
*/

function cassandraRowToFact(row) {
return {
id: row.id,
language: row.eventlangcode,
title: row.title,
tags: row.detectedkeywords,
date: row.event_time,
link: row.sourceurl,
text: row.messagebody,
sources: row.pipeline && [row.pipeline]
};
}

function appendDefaultFilters(query, params) {
query += ' AND pipeline IN ("TadaWeb", "Bing", "CustomEvent")';
return {query: query, params: params};
}

function makeListQuery(args) {
const tagsCondition = args.tagFilter.map(_ => 'detectedkeywords CONTAINS ?').join(' OR '); // eslint-disable-line no-unused-vars
const query = `SELECT * FROM fortis.events WHERE (${tagsCondition})`;
const params = args.tagFilter.slice();
return appendDefaultFilters(query, params);
}

/**
* @param {{pageSize: number, skip: number, tagFilter: string[]}} args
* @returns {Promise.<{runTime: string, type: string, facts: Array<{id: string, language: string, title: string, tags: string[], date: string, link: string, text: string, sources: string[]}>}>}
* @returns {Promise.<{runTime: string, type: string, facts: Fact[]}>}
*/
function list(args, res) { // eslint-disable-line no-unused-vars
return new Promise((resolve, reject) => {
if (!args || !args.tagFilter || !args.tagFilter.length) return reject('No tags specified to fetch');

const query = makeListQuery(args);
return cassandraConnector.executeQuery(query.query, query.params)
.then(rows => {
const facts = rows.map(cassandraRowToFact);

resolve({
facts: facts
});
})
.catch(reject);
});
}

function makeGetQuery(args) {
let query = 'SELECT * FROM fortis.events WHERE id = ?';
let params = [args.id];
return appendDefaultFilters(query, params);
}

/**
* @param {{id: string}} args
* @returns {Promise.<{id: string, language: string, title: string, tags: string[], date: string, link: string, text: string, sources: string[]}>}
* @returns {Promise.<Fact>}
*/
function get(args, res) { // eslint-disable-line no-unused-vars
return new Promise((resolve, reject) => {
if (!args || !args.id) return reject('No id specified to fetch');

const query = makeGetQuery(args);
return cassandraConnector.executeQuery(query.query, query.params)
.then(rows => {
if (rows.length > 1) return reject(`Got more ${rows.length} faces with id ${args.id}`);

resolve(cassandraRowToFact(rows[0]));
})
.catch(reject);
});
}

module.exports = {
Expand Down

0 comments on commit c2db278

Please sign in to comment.