Skip to content

Commit

Permalink
Added trigger API endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
tanepiper committed May 8, 2015
1 parent e0eb36b commit ee3fe38
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 70 deletions.
97 changes: 42 additions & 55 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,50 @@
var moment = require('moment');
var _ = require('lodash');
var CronJob = require('cron').CronJob;
var config = require('./config/config.json');

var config;
try {
config = require('./config/config.json');
} catch(e) {
config = {};
}

var TribeFetcher = require('./lib/tribe-fetcher.js')(config);
var EventParser = require('./lib/event-parser.js')(config);
var APIClient = require('./lib/api-client.js')(config);

//var job = new CronJob({
//
// /*
// * Runs every weekday (Monday through Friday)
// * at 07:00:00 AM and 13:00:00 PM. It does not run on Saturday
// * or Sunday.
// */
// cronTime: '00 00 7,13 * * 1-5',
// onTick: function () {
// console.log('running');
//
// TribeFetcher.getApprovedRequest(function(error, data) {
// if (error) {
// console.log(error);
// this.stop();
// return process.exit(1);
// }
//
// var events = EventParser(Date.now(), data);
//
// _.each(events, function(event) {
// APIClient.post(event);
// });
//
// console.log(events);
//
// }.bind(this));
// },
// startNow: true,
// timeZone: 'Europe/London'
//});
//
//job.start();


//TribeFetcher.getApprovedRequest(function(error, data) {
//
// if (error) {
// console.log(error);
// this.stop();
// return process.exit(1);
// }

var data = require('./tests/data/approved-leave-requests.json');

var events = EventParser('2015-02-23', data);

_.each(events, function(event) {
APIClient.post(event);
});

//console.log(events);

//}.bind(this));
require('./lib/trigger-client.js')(config);

var job = new CronJob({

/*
* Runs every weekday (Monday through Friday)
* at 07:00:00 AM and 13:00:00 PM. It does not run on Saturday
* or Sunday.
*/
cronTime: '00 00 7,13 * * 1-5',
onTick: function () {
console.log('running');

TribeFetcher.getApprovedRequest(function(error, data) {
if (error) {
console.log(error);
this.stop();
return process.exit(1);
}

var events = EventParser(Date.now(), data);

_.each(events, function(event) {
APIClient.post(event);
});

console.log(events);

}.bind(this));
},
startNow: true,
timeZone: 'Europe/London'
});

job.start();
15 changes: 6 additions & 9 deletions lib/api-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,18 @@ module.exports = function(config) {

return {
post: function(event) {

console.log(event.leave_type.name);

var postStatus = event.leave_type.name.toLowerCase() === 'sick' ? 'Sick' : 'Holiday';
var url = config.api.url + '/statuses/' + postStatus;
console.log(url);
var postStatus = event.statusDetails.toLowerCase().indexOf('sick') !== -1 ? 'Sick' : 'Holiday';
var url = (process.env.API_URL || config.api.url) + '/statuses/' + postStatus;

Request.post(url, {
json: true,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({email: event.user.email, statusDetails: postStatus + ' from TribeHR'})
body: JSON.stringify(event)
}, function (error, response, body) {
console.log(error, response.statusCode, body);
if (error) {
console.log(error);
}
});
}
}
Expand Down
7 changes: 6 additions & 1 deletion lib/event-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,18 @@ module.exports = function(config) {
dateToCheck = moment(dateToCheck);
}

var filteredEvents = _.filter(data, function(event) {
var filteredEvents = _.map(_.filter(data, function(event) {

if (event.date_start === event.date_end) {
return dateToCheck.isSame(event.date_start);
}

return dateToCheck.isBetween(event.date_start, event.date_end);
}), function(event) {
return {
email: event.user.email,
statusDetails: event.leave_type.name.toLowerCase() === 'sick' ? 'Sick' : 'Holiday'
}
});

return filteredEvents;
Expand Down
6 changes: 3 additions & 3 deletions lib/tribe-fetcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ var Request = require('request');
module.exports = function(config) {
return {
getApprovedRequest: function(done) {
Request.get('https://' + config.tribehr.url + '/leave_requests.json?status=approved', {
Request.get('https://' + (process.env.TRIBE_URL || config.tribehr.url) + '/leave_requests.json?status=approved', {
auth: {
user: config.tribehr.user,
pass: config.tribehr.pass
user: process.env.TRIBE_USER || config.tribehr.user,
pass: process.env.TRIBE_PASS || config.tribehr.pass
},
headers: {
'X-API-Version': '2.0.0'
Expand Down
45 changes: 45 additions & 0 deletions lib/trigger-client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
'use strict';

var http = require('http');
var url = require('url');
var qs = require('qs');
var _ = require('lodash');

module.exports = function(config) {

var TribeFetcher = require('./tribe-fetcher.js')(config);
var EventParser = require('./event-parser.js')(config);
var APIClient = require('./api-client.js')(config);

var server = http.createServer(function(request, response) {
if (request.url.indexOf('trigger') !== -1) {

var parsedUrl = url.parse(request.url);
if (parsedUrl.query) {
var query = qs.parse(parsedUrl.query)
}

TribeFetcher.getApprovedRequest(function(error, data) {
if (error) {
response.writeHead(200, {'content-type': 'text/html, level=1'});
response.end(error);
}

var events = EventParser(query.date || Date.now(), data);

_.each(events, function(event) {
APIClient.post(event);
});

response.writeHead(200, {'content-type': 'application/json'});
response.end(JSON.stringify(events));

}.bind(this));
} else {
response.writeHead(404, {'content-type': 'text/html, level=1'});
response.end('404 Not Found');
}
});

server.listen(1234);
};
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"cron": "^1.0.9",
"lodash": "^3.8.0",
"moment": "^2.10.2",
"qs": "^2.4.1",
"request": "^2.55.0"
}
}
2 changes: 0 additions & 2 deletions tests/event-parser-spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@ var EventParser = require('./../lib/event-parser.js')({});
var data = require('./data/approved-leave-requests.json');
var moment = require('moment');


var events = EventParser(moment('2015-02-23'), data);
console.log(events);

0 comments on commit ee3fe38

Please sign in to comment.