From 8d82a8e23a82984f558409e93f60be880e1cf9b3 Mon Sep 17 00:00:00 2001 From: Pierre Brisorgueil Date: Tue, 17 Mar 2020 19:21:34 +0100 Subject: [PATCH] =?UTF-8?q?feat(apis):=20init=20get=20data=20road=20on=20a?= =?UTF-8?q?pi=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/apis/controllers/apis.controller.js | 15 +++++++++++++ modules/apis/policies/apis.policy.js | 3 +++ modules/apis/repositories/apis.repository.js | 22 ++++++++++++++++++++ modules/apis/routes/apis.routes.js | 3 +++ modules/apis/services/apis.service.js | 11 ++++++++++ 5 files changed, 54 insertions(+) diff --git a/modules/apis/controllers/apis.controller.js b/modules/apis/controllers/apis.controller.js index 56ed16107..a01c80fe7 100644 --- a/modules/apis/controllers/apis.controller.js +++ b/modules/apis/controllers/apis.controller.js @@ -91,6 +91,21 @@ exports.load = async (req, res) => { } }; +/** + * @desc Endpoint to getData stocked from load + * @param {Object} req - Express request object + * @param {Object} res - Express response object + */ +exports.getApiData = async (req, res) => { + // TODO if (req.scrap && req.user && req.scrap.user && req.scrap.user.id === req.user.id) next(); + try { + const data = await ApisService.getApiData(req.api); + responses.success(res, 'api getData')(data); + } catch (err) { + responses.error(res, 422, 'Unprocessable Entity', errors.getMessage(err))(err); + } +}; + /** * @desc MiddleWare to ask the service the api for this id diff --git a/modules/apis/policies/apis.policy.js b/modules/apis/policies/apis.policy.js index ee113966b..678379fd5 100644 --- a/modules/apis/policies/apis.policy.js +++ b/modules/apis/policies/apis.policy.js @@ -20,6 +20,9 @@ exports.invokeRolesPolicies = () => { }, { resources: '/api/apis/load/:apiId', permissions: '*', + }, { + resources: '/api/apis/data/:apiId', + permissions: '*', }], }]); }; diff --git a/modules/apis/repositories/apis.repository.js b/modules/apis/repositories/apis.repository.js index 29b90a970..c2d8b0bc1 100644 --- a/modules/apis/repositories/apis.repository.js +++ b/modules/apis/repositories/apis.repository.js @@ -68,3 +68,25 @@ exports.import = (collection, items) => { }, }))); }; + + +/** + * @desc Function to import list of locations in db + * @param {Object} locations + * @return {Object} locations + */ +exports.getApiData = (collection) => { + const _schema = new mongoose.Schema({}, { + collection, + strict: false, + }); + + let model; + try { + model = mongoose.model(collection); + } catch (error) { + model = mongoose.model(collection, _schema); + } + + return model.find().sort('-createdAt').exec(); +}; diff --git a/modules/apis/routes/apis.routes.js b/modules/apis/routes/apis.routes.js index 5f8bdd8dd..eb85fda7c 100644 --- a/modules/apis/routes/apis.routes.js +++ b/modules/apis/routes/apis.routes.js @@ -27,6 +27,9 @@ module.exports = (app) => { app.route('/api/apis/load/:apiId') .get(apis.load); + app.route('/api/apis/data/:apiId') + .get(apis.getApiData); + // Finish by binding the api middleware app.param('apiId', apis.apiByID); }; diff --git a/modules/apis/services/apis.service.js b/modules/apis/services/apis.service.js index f1dc33ac7..37f515f36 100644 --- a/modules/apis/services/apis.service.js +++ b/modules/apis/services/apis.service.js @@ -130,3 +130,14 @@ exports.load = async (api) => { result, }); }; + + +/** + * @desc Functio to ask repository to get data stocker from apis request + * @param {Object} scrap - original scrap + * @return {Promise} scrap + */ +exports.getApiData = async (api) => { + const result = await ApisRepository.getApiData(api.slug); + return Promise.resolve(result); +};