Skip to content

Commit 9a1bf38

Browse files
authored
Merge pull request #19 from iolufemi/feature/request
Feature/request
2 parents fe2d452 + 4f564c9 commit 9a1bf38

File tree

2 files changed

+146
-0
lines changed

2 files changed

+146
-0
lines changed

services/request/Model.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"use strict";
2+
3+
var db = require('../database').logMongo;
4+
5+
var collection = 'APICalls';
6+
7+
var debug = require('debug')(collection);
8+
9+
var schemaObject = {
10+
RequestId: {
11+
type: 'String',
12+
unique: true
13+
},
14+
uri: {
15+
type: 'String'
16+
},
17+
method: {
18+
type: 'String'
19+
},
20+
service: {
21+
type: 'String'
22+
},
23+
data: {
24+
type: db._mongoose.Schema.Types.Mixed
25+
},
26+
headers: {
27+
type: db._mongoose.Schema.Types.Mixed
28+
},
29+
response: {
30+
type: db._mongoose.Schema.Types.Mixed
31+
},
32+
responseStatusCode: {
33+
type: 'Number'
34+
}
35+
};
36+
37+
schemaObject.createdAt = {
38+
type: 'Date',
39+
default: Date.now
40+
};
41+
42+
schemaObject.updatedAt = {
43+
type: 'Date'
44+
// default: Date.now
45+
};
46+
47+
schemaObject.retriedAt = {
48+
type: 'Date'
49+
// default: Date.now
50+
};
51+
52+
// Let us define our schema
53+
var Schema = new db._mongoose.Schema(schemaObject);
54+
55+
var Model = db.model(collection, Schema);
56+
57+
module.exports = Model;

services/request/index.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
"use strict";
2+
var request = require('request-promise');
3+
var Model = require('./Model');
4+
var q = require('q');
5+
var log = require('../logger');
6+
7+
module.exports = function(service, requestId, uri, method, data, headers){
8+
// have you made this request before?
9+
// if yes, return the response from the previous request
10+
// else make request
11+
// log the response, the response code and updated at
12+
// end
13+
14+
var options = {
15+
method: method,
16+
uri: uri,
17+
data: data,
18+
headers: headers,
19+
insecure: true
20+
};
21+
22+
var existss;
23+
return q.Promise(function(resolve, reject){
24+
Model.findOne({RequestId: requestId, service: service})
25+
.then(function(resp){
26+
existss = resp;
27+
if(!resp){
28+
options.RequestId = requestId;
29+
options.service = service;
30+
return Model.create(options);
31+
}else if(resp.response && resp.responseStatusCode === 200){
32+
throw {RequestId: resp.RequestId, response: resp.response};
33+
}else{
34+
options.retriedAt = Date.now();
35+
return Model.findByIdAndUpdate(resp._id, options);
36+
}
37+
})
38+
.then(function(resp){
39+
existss = true;
40+
options.json = true;
41+
if(options.method === 'GET'){
42+
options.qs = options.data;
43+
}else if(options.method === 'POST'){
44+
options.body = options.data;
45+
}else{
46+
options.qs = options.data;
47+
options.body = options.data;
48+
}
49+
50+
options.data = null;
51+
options.RequestId = null;
52+
options.service = null;
53+
options.retriedAt = null;
54+
return request(options);
55+
})
56+
.then(function(resp){
57+
return [Model.update({RequestId: requestId, service: service}, {response: resp, responseStatusCode: 200, updatedAt: Date.now()}), resp];
58+
})
59+
.spread(function(update, resp){
60+
return resolve(resp);
61+
})
62+
.catch(function(err){
63+
if(err.RequestId){
64+
return resolve(err.response);
65+
}else{
66+
var updateddd;
67+
if(existss){
68+
updateddd = Model.update({RequestId: requestId, service: service}, {response: (err.response && err.response.body) ? err.response.body : { type: 'internal error', message: err.message}, responseStatusCode: err.statusCode ? err.statusCode : 500, updatedAt: Date.now()});
69+
}else{
70+
options.RequestId = requestId;
71+
options.service = service;
72+
options.response = (err.response && err.response.body) ? err.response.body : {type: 'internal error', message: err.message};
73+
options.responseStatusCode = err.statusCode ? err.statusCode : 500;
74+
options.updatedAt = Date.now();
75+
updateddd = Model.create(options);
76+
}
77+
78+
updateddd
79+
.then(function(resp){
80+
return reject((err.response && err.response.body) ? err.response.body : {type: 'internal error', message: err.message});
81+
})
82+
.catch(function(err2){
83+
log.error('Error while trying to update API request: ',err2);
84+
return reject((err.response && err.response.body) ? err.response.body : {type: 'internal error', message: err.message});
85+
});
86+
}
87+
});
88+
});
89+
};

0 commit comments

Comments
 (0)