Skip to content
This repository has been archived by the owner on Oct 21, 2022. It is now read-only.

Commit

Permalink
add fetchAnalytics for analytics API, v0.3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
taylordowns2000 committed Feb 27, 2018
1 parent 846712d commit 2a4d349
Show file tree
Hide file tree
Showing 6 changed files with 186 additions and 9 deletions.
12 changes: 12 additions & 0 deletions README.md
Expand Up @@ -7,6 +7,18 @@ the [DHIS2 API](http://dhis2.github.io/dhis2-docs/master/en/developer/html/dhis2
Documentation
-------------

## Analytics API
```js
fetchAnalytics({
query: {
dimension: ["dx:CYI5LEmm3cG;GDVU1o5rTNF", "pe:LAST_6_MONTHS"],
filter: "ou:GHlyx9Pg9mn",
displayProperty: "NAME",
outputIdScheme: "UID"
}
});
```

## Tracked Entity API

#### Create a new tracked entity instance from a CommCare form submission.
Expand Down
77 changes: 69 additions & 8 deletions lib/Adaptor.js
Expand Up @@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
});
exports.alterState = exports.lastReferenceValue = exports.dataValue = exports.dataPath = exports.each = exports.merge = exports.sourceValue = exports.fields = exports.field = undefined;

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** @module Adaptor */

Expand All @@ -18,6 +18,7 @@ exports.dataElement = dataElement;
exports.createTEI = createTEI;
exports.updateTEI = updateTEI;
exports.enroll = enroll;
exports.fetchAnalytics = fetchAnalytics;

var _languageCommon = require('language-common');

Expand Down Expand Up @@ -78,7 +79,7 @@ Object.defineProperty(exports, 'alterState', {

var _Client = require('./Client');

var _url3 = require('url');
var _url4 = require('url');

var _fp = require('lodash/fp');

Expand Down Expand Up @@ -140,7 +141,7 @@ function fetchData(params, postUrl) {
apiUrl = _state$configuration.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/dataValueSets.json?');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/dataValueSets.json?');

var query = data.fields || expandDataValues(params)(state);

Expand Down Expand Up @@ -197,7 +198,7 @@ function fetchEvents(params, postUrl) {
apiUrl = _state$configuration2.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/events.json?');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/events.json?');

var query = data.fields || expandDataValues(params)(state);

Expand Down Expand Up @@ -247,7 +248,7 @@ function event(eventData) {
apiUrl = _state$configuration3.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/events');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/events');

console.log("Posting event:");
console.log(body);
Expand Down Expand Up @@ -311,7 +312,7 @@ function dataValueSet(data) {
apiUrl = _state$configuration4.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/dataValueSets');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/dataValueSets');

console.log("Posting data value set:");
console.log(body);
Expand Down Expand Up @@ -369,7 +370,7 @@ function createTEI(data) {
apiUrl = _state$configuration5.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/trackedEntityInstances');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/trackedEntityInstances');

console.log("Posting tracked entity instance data:");
console.log(body);
Expand Down Expand Up @@ -481,7 +482,7 @@ function enroll(tei, enrollmentData) {
apiUrl = _state$configuration7.apiUrl;


var url = (0, _url3.resolve)(apiUrl + '/', 'api/enrollments');
var url = (0, _url4.resolve)(apiUrl + '/', 'api/enrollments');

console.log("Enrolling tracked entity instance with data:");
console.log(body);
Expand All @@ -499,3 +500,63 @@ function enroll(tei, enrollmentData) {
});
};
}

/**
* Fetch analytics
* @public
* @example
* fetchAnalytics({
* query: {
* dimension: ["dx:CYI5LEmm3cG", "pe:LAST_6_MONTHS"],
* filter: "ou:t7vi7vJqWvi",
* displayProperty: "NAME",
* outputIdScheme: "UID"
* }},
* postUrl: "yourposturl"
* )
* @constructor
* @param {object} params - data to query for events
* @param {String} postUrl - (optional) URL to post the result
* @returns {Operation}
*/
function fetchAnalytics(params, postUrl) {

return function (state) {

var data = (0, _languageCommon.expandReferences)(params)(state);

var _state$configuration8 = state.configuration,
username = _state$configuration8.username,
password = _state$configuration8.password,
apiUrl = _state$configuration8.apiUrl;


var url = (0, _url4.resolve)(apiUrl + '/', 'api/26/analytics.json?');

var query = data.query || expandDataValues(params)(state);

console.log('Getting analytics data for query: ' + query);

return (0, _Client.get)({ username: username, password: password, query: query, url: url }).then(function (result) {
console.log("Get Result:", result.body);
return result;
}).then(function (result) {
if (postUrl) {
var body = result.body;

var _url3 = postUrl;

return (0, _Client.post)({ username: username, password: password, body: body, url: _url3 }).then(function (result) {
console.log("Post Result:", result.statusCode);
return _extends({}, state, {
references: [result].concat(_toConsumableArray(state.references))
});
});
} else {
return _extends({}, state, {
references: [result].concat(_toConsumableArray(state.references))
});
}
});
};
};
17 changes: 17 additions & 0 deletions lib/Client.js
Expand Up @@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
exports.post = post;
exports.put = put;
exports.get = get;
exports.getUsingQueryString = getUsingQueryString;

var _superagent = require('superagent');

Expand Down Expand Up @@ -60,3 +61,19 @@ function get(_ref3) {
});
});
}

function getUsingQueryString(_ref4) {
var username = _ref4.username,
password = _ref4.password,
query = _ref4.query,
url = _ref4.url;

return new Promise(function (resolve, reject) {
_superagent2.default.get(url).query(query).options({ useQuerystring: true }).type('json').accept('json').auth(username, password).end(function (error, res) {
if (!!error || !res.ok) {
reject(error);
}
resolve(res);
});
});
}
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "language-dhis2",
"version": "0.2.0",
"version": "0.3.0",
"description": "DHIS2 Language Pack for OpenFn",
"main": "lib/index.js",
"scripts": {
Expand Down
66 changes: 66 additions & 0 deletions src/Adaptor.js
Expand Up @@ -441,6 +441,72 @@ export function enroll(tei, enrollmentData) {
}
}

/**
* Fetch analytics
* @public
* @example
* fetchAnalytics({
* query: {
* dimension: ["dx:CYI5LEmm3cG", "pe:LAST_6_MONTHS"],
* filter: "ou:t7vi7vJqWvi",
* displayProperty: "NAME",
* outputIdScheme: "UID"
* }},
* postUrl: "yourposturl"
* )
* @constructor
* @param {object} params - data to query for events
* @param {String} postUrl - (optional) URL to post the result
* @returns {Operation}
*/
export function fetchAnalytics(params, postUrl) {

return state => {

const data = expandReferences(params)(state);

const {username, password, apiUrl} = state.configuration;

const url = resolveUrl(apiUrl + '/', 'api/26/analytics.json?')

const query = data.query || expandDataValues(params)(state);

console.log(`Getting analytics data for query: ${query}`);

return get({username, password, query, url})
.then((result) => {
console.log("Get Result:", result.body);
return result
})
.then((result) => {
if (postUrl) {
const body = result.body

const url = postUrl

return post({username, password, body, url})
.then((result) => {
console.log("Post Result:", result.statusCode);
return {
...state,
references: [
result, ...state.references
]
}
})
} else {
return {
...state,
references: [
result, ...state.references
]
}
}
})
};

};

export {
field,
fields,
Expand Down
21 changes: 21 additions & 0 deletions src/Client.js
Expand Up @@ -61,3 +61,24 @@ export function get({
})
})
}

export function getUsingQueryString({
username,
password,
query,
url}) {
return new Promise((resolve, reject) => {
request.get(url)
.query(query)
.options({useQuerystring: true})
.type('json')
.accept('json')
.auth(username, password)
.end((error, res) => {
if (!!error || !res.ok) {
reject(error)
}
resolve(res)
})
})
}

0 comments on commit 2a4d349

Please sign in to comment.