This commit is contained in:
David Arranz 2019-07-24 23:03:10 +02:00
parent 97ee184ec5
commit 4aabf4258a
7 changed files with 87 additions and 8 deletions

View File

@ -24,5 +24,11 @@ module.exports = {
paginate: {
limit: 10,
maxLimit: 50
},
vimeo: {
CLIENT_ID: '9581f2d0ed211dc1e31b5c825117dc1f00d77ba0',
CLIENT_SECRET: '3kf0hQ63OXSPm7z2X1qyOV4iH57Xha0cyRXn0VJneq8zHbWKjfB1/9H8KcgBgzgkzw0Y9x/xFLUAauuHLEkqHxLBw8QueanCgIZev1L5xoksrKuKX7gMvErqqP+uFNnA',
ACCESS_TOKEN: '2843aed2064f8148d74074dff7807d92'
}
}

View File

@ -32,5 +32,11 @@ module.exports = {
paginate: {
limit: 10,
maxLimit: 50
}
},
vimeo: {
CLIENT_ID: '9581f2d0ed211dc1e31b5c825117dc1f00d77ba0',
CLIENT_SECRET: '3kf0hQ63OXSPm7z2X1qyOV4iH57Xha0cyRXn0VJneq8zHbWKjfB1/9H8KcgBgzgkzw0Y9x/xFLUAauuHLEkqHxLBw8QueanCgIZev1L5xoksrKuKX7gMvErqqP+uFNnA',
ACCESS_TOKEN: '2843aed2064f8148d74074dff7807d92'
}
}

22
helpers/vimeo.helper.js Normal file
View File

@ -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;

20
middlewares/cache.js Normal file
View File

@ -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,
}

View File

@ -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({})
);

View File

@ -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);
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);

View File

@ -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"
}