From 4aabf4258a7f625db538eedf1ebed4cc097534a0 Mon Sep 17 00:00:00 2001 From: david Date: Wed, 24 Jul 2019 23:03:10 +0200 Subject: [PATCH] . --- config/environments/development.js | 6 ++++++ config/environments/production.js | 8 +++++++- helpers/vimeo.helper.js | 22 ++++++++++++++++++++++ middlewares/cache.js | 20 ++++++++++++++++++++ modules/multimedia/multimedia.routes.js | 12 +++++++----- modules/multimedia/multimedia.service.js | 24 ++++++++++++++++++++++-- package.json | 3 +++ 7 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 helpers/vimeo.helper.js create mode 100644 middlewares/cache.js diff --git a/config/environments/development.js b/config/environments/development.js index 43a99cd..4883003 100644 --- a/config/environments/development.js +++ b/config/environments/development.js @@ -24,5 +24,11 @@ module.exports = { paginate: { limit: 10, maxLimit: 50 + }, + + vimeo: { + CLIENT_ID: '9581f2d0ed211dc1e31b5c825117dc1f00d77ba0', + CLIENT_SECRET: '3kf0hQ63OXSPm7z2X1qyOV4iH57Xha0cyRXn0VJneq8zHbWKjfB1/9H8KcgBgzgkzw0Y9x/xFLUAauuHLEkqHxLBw8QueanCgIZev1L5xoksrKuKX7gMvErqqP+uFNnA', + ACCESS_TOKEN: '2843aed2064f8148d74074dff7807d92' } } diff --git a/config/environments/production.js b/config/environments/production.js index 3910fb2..a62b311 100644 --- a/config/environments/production.js +++ b/config/environments/production.js @@ -32,5 +32,11 @@ module.exports = { paginate: { limit: 10, maxLimit: 50 - } + }, + + vimeo: { + CLIENT_ID: '9581f2d0ed211dc1e31b5c825117dc1f00d77ba0', + CLIENT_SECRET: '3kf0hQ63OXSPm7z2X1qyOV4iH57Xha0cyRXn0VJneq8zHbWKjfB1/9H8KcgBgzgkzw0Y9x/xFLUAauuHLEkqHxLBw8QueanCgIZev1L5xoksrKuKX7gMvErqqP+uFNnA', + ACCESS_TOKEN: '2843aed2064f8148d74074dff7807d92' + } } diff --git a/helpers/vimeo.helper.js b/helpers/vimeo.helper.js new file mode 100644 index 0000000..1121b1b --- /dev/null +++ b/helpers/vimeo.helper.js @@ -0,0 +1,22 @@ +const config = require('../config'); +const Vimeo = require('vimeo').Vimeo; +const client = new Vimeo(config.vimeo.CLIENT_ID, config.vimeo.CLIENT_SECRET, config.vimeo.ACCESS_TOKEN); + +function getVimeoVideoInfo(videoId) { + return new Promise(function(resolve, reject) { + client.request({ + method: 'GET', + path: '/videos/' + videoId + }, function (error, body, status_code, headers) { + if (error) { + console.log(error); + resolve({}) + } else { + resolve(body); + } + }) + }); +} + + +module.exports = getVimeoVideoInfo; diff --git a/middlewares/cache.js b/middlewares/cache.js new file mode 100644 index 0000000..a56be49 --- /dev/null +++ b/middlewares/cache.js @@ -0,0 +1,20 @@ +const apicache = require('apicache'); +const redis = require('redis'); + +let cacheWithRedis = apicache + .options({ + debug: true, + defaultDuration: '1 hour', + redisClient: redis.createClient() + }) + .middleware; + +// higher-order function returns false for responses of other status codes (e.g. 403, 404, 500, etc) +const onlyStatus200 = (req, res) => res.statusCode === 200 + +const cacheSuccesses = cacheWithRedis('1 hour', onlyStatus200); + +module.exports = { + cacheSuccesses, +} + diff --git a/modules/multimedia/multimedia.routes.js b/modules/multimedia/multimedia.routes.js index fb88ffd..8ab2774 100644 --- a/modules/multimedia/multimedia.routes.js +++ b/modules/multimedia/multimedia.routes.js @@ -1,6 +1,8 @@ const routes = require('express').Router(); const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator'); +const { cacheSuccesses } = require('../../middlewares/cache'); + //const SchemaValidator = require('../../middlewares/schemaValidator'); const PaginateMiddleware = require('../../middlewares/paginate'); @@ -11,23 +13,23 @@ const SortMiddleware = require('../../middlewares/sort'); const multimediaController = require('./multimedia.controller'); -routes.get('/multimedias', +routes.get('/multimedias', cacheSuccesses, PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "init_available_date" }), - multimediaController.find + multimediaController.find({}) ); -routes.get('/multimedias/:id', +routes.get('/multimedias/:id', cacheSuccesses, //PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "init_available_date" }), - multimediaController.findOne + multimediaController.findOne({}) ); routes.get('/multimedias/:entityId', //PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "init_available_date" }), - multimediaController.find + multimediaController.find({}) ); diff --git a/modules/multimedia/multimedia.service.js b/modules/multimedia/multimedia.service.js index 6029a3b..3375afc 100644 --- a/modules/multimedia/multimedia.service.js +++ b/modules/multimedia/multimedia.service.js @@ -4,7 +4,27 @@ const _ = require('lodash'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const models = require('../../core/models'); +const getVimeoVideoInfo = require('../../helpers/vimeo.helper'); -const extraMethods = {}; +const providerComposer = (multimedia) => { + return getVimeoVideoInfo(multimedia.code) +} -module.exports = generateService(models.Multimedia, extraMethods); \ No newline at end of file +const extraMethods = { + afterFetchOne: async (result, params, context) => { + if (!result) { + return result; + } + + const multimedia = result.toJSON(); + console.log(multimedia); + + if (multimedia.provider === 'vimeo') { + multimedia.providerInfo = await providerComposer(multimedia); + } + return multimedia; + }, + +} + +module.exports = generateService(models.MultimediaFile, extraMethods); \ No newline at end of file diff --git a/package.json b/package.json index 88daa76..6e39c7a 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "nodemon": "^1.18.9" }, "dependencies": { + "apicache": "^1.4.0", "args-list": "^0.3.3", "async": "^2.6.2", "bcrypt": "^3.0.6", @@ -51,8 +52,10 @@ "path": "^0.12.7", "pino": "^4.7.1", "rand-token": "^0.4.0", + "redis": "^2.8.0", "response-time": "^2.3.2", "sequelize": "^5.3.5", + "vimeo": "^2.1.1", "vm": "^0.1.0", "winston": "^3.2.1" }