diff --git a/modules/apis/models/apis.model.mongoose.js b/modules/apis/models/apis.model.mongoose.js index c98af191a..988b4eb8e 100644 --- a/modules/apis/models/apis.model.mongoose.js +++ b/modules/apis/models/apis.model.mongoose.js @@ -20,6 +20,7 @@ const ApiMongoose = new Schema({ url: String, auth: String, serviceKey: String, + path: String, params: {}, typing: String, mapping: String, diff --git a/modules/apis/models/apis.schema.js b/modules/apis/models/apis.schema.js index a4b43a04e..b6ec7436f 100644 --- a/modules/apis/models/apis.schema.js +++ b/modules/apis/models/apis.schema.js @@ -12,6 +12,7 @@ const ApiSchema = Joi.object().keys({ url: Joi.string().trim().required(), auth: Joi.string().valid(['lou']).required(), serviceKey: Joi.string().trim().default('').required(), + path: Joi.string().trim().default('').required(), params: Joi.object({}).unknown().optional(), typing: Joi.string().trim().allow('').optional(), mapping: Joi.string().trim().allow('').optional(), diff --git a/modules/apis/services/apis.service.js b/modules/apis/services/apis.service.js index 9600a33dc..94ff884d5 100644 --- a/modules/apis/services/apis.service.js +++ b/modules/apis/services/apis.service.js @@ -69,6 +69,7 @@ exports.update = async (api, body) => { api.url = body.url; api.auth = body.auth; api.serviceKey = body.serviceKey; + api.path = body.path; api.params = body.params; api.status = body.status; api.banner = body.banner; @@ -118,26 +119,28 @@ exports.load = async (api, user) => { // request const request = await montaineRequest.request(api, params); result.request = request; - result.result = request.data.result; + if (api.path && api.path === '') result.temp = request; + else result.temp = _.get(request, api.path); // Mapping - if (result.result && api.mapping && api.mapping !== '') { - result.result = montaineMap.map(result.result, JSON.parse(api.mapping)); - result.mapping = result.result[0] ? result.result[0] : result.result; + if (result.temp && api.mapping && api.mapping !== '') { + result.temp = montaineMap.map(result.temp, JSON.parse(api.mapping)); + result.mapping = result.temp; } // Typing - if (result.result && api.typing && api.typing !== '') { - result.result = montaineType.type(result.result, JSON.parse(api.typing)); - result.typing = result.result[0] ? result.result[0] : result.result; + if (result.temp && api.typing && api.typing !== '') { + result.temp = montaineType.type(result.temp, JSON.parse(api.typing)); + result.typing = result.temp; } // prepare for save - if (result.result) { - result.result = montaineSave.prepare(result.result, start); - result.prepare = result.result[0] ? result.result[0] : result.result; - result.result = montaineSave.save(result.result, start); - result.mongo = result.result; - if (api.savedb) result.result = await ApisRepository.import(api.slug, _.cloneDeep(result.result)); + if (result.temp) { + result.temp = montaineSave.prepare(result.temp, start); + result.prepare = result.temp; + result.temp = montaineSave.save(result.temp, start); + result.mongo = result.temp; + if (api.savedb) result.result = await ApisRepository.import(api.slug, _.cloneDeep(result.temp)); + delete result.temp; } // historize @@ -186,23 +189,25 @@ exports.workerAuto = async (api, body) => { // request const request = await montaineRequest.request(api, params); - result.result = request.data.result; + if (api.path && api.path === '') result.temp = request; + else result.temp = _.get(request, api.path); + // Mapping - if (result.result && api.mapping && api.mapping !== '') { - result.result = montaineMap.map(result.result, JSON.parse(api.mapping)); + if (result.temp && api.mapping && api.mapping !== '') { + result.temp = montaineMap.map(result.temp, JSON.parse(api.mapping)); } // Typing - if (result.result && api.typing && api.typing !== '') { - result.result = montaineType.type(result.result, JSON.parse(api.typing)); + if (result.temp && api.typing && api.typing !== '') { + result.temp = montaineType.type(result.temp, JSON.parse(api.typing)); } // prepare for save - if (result.result) { - result.result = montaineSave.prepare(result.result, start); - result.result = montaineSave.save(result.result, start); - if (api.savedb) result.result = await ApisRepository.import(api.slug, _.cloneDeep(result.result)); + if (result.temp) { + result.temp = montaineSave.prepare(result.temp, start); + result.temp = montaineSave.save(result.temp, start); + if (api.savedb) result.result = await ApisRepository.import(api.slug, _.cloneDeep(result.temp)); } // historize