From 54e733c8c2b5ee88ac000d9d02aebda5b38738cb Mon Sep 17 00:00:00 2001 From: Pierre Brisorgueil Date: Sat, 25 Apr 2020 22:17:52 +0200 Subject: [PATCH] =?UTF-8?q?feat(apis):=20add=20path=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/apis/models/apis.model.mongoose.js | 1 + modules/apis/models/apis.schema.js | 1 + modules/apis/services/apis.service.js | 49 ++++++++++++---------- 3 files changed, 29 insertions(+), 22 deletions(-) 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