Merge branch 'master' of wopr.rodax-software.com:lqdvi/app2-api
This commit is contained in:
commit
1771981b2f
@ -1,10 +1,43 @@
|
|||||||
var multer = require('multer');
|
var multer = require('multer');
|
||||||
|
var mkdirp = require('mkdirp');
|
||||||
|
var config = require('../config');
|
||||||
|
|
||||||
/*var upload = function (path) {
|
/*var upload = function (path) {
|
||||||
return multer({storage: storage(path)});
|
return multer({storage: storage(path)});
|
||||||
};*/
|
};*/
|
||||||
var upload = multer({
|
var memoryUpload = multer({
|
||||||
storage: multer.memoryStorage()
|
storage: multer.memoryStorage()
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = upload;
|
var makePath = function(path) {
|
||||||
|
mkdirp(path, function (err) {
|
||||||
|
if (err) throw err
|
||||||
|
else return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var cdnStorage = function(path) {
|
||||||
|
return multer.diskStorage({
|
||||||
|
destination: function (req, file, cb) {
|
||||||
|
console.log(req);
|
||||||
|
console.log(file);
|
||||||
|
cb(null, path)
|
||||||
|
},
|
||||||
|
filename: function (req, file, cb) {
|
||||||
|
cb(null, file.originalname)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var cdnUpload = function() {
|
||||||
|
var _date = new Date();
|
||||||
|
var pathWithDate = config.uploads.path + '/' + _date.getFullYear() + '/' + _date.getMonth() + '/';
|
||||||
|
|
||||||
|
makePath(pathWithDate);
|
||||||
|
|
||||||
|
return multer({
|
||||||
|
storage: cdnStorage(pathWithDate)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = cdnUpload;
|
||||||
@ -27,9 +27,13 @@ const extraControllers = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var CDNFilePath = cdnHelper.getCDNFilenameWithPath(file.originalname, 'speaker');
|
var CDNFilePath = cdnHelper.getCDNFilenameWithPath(file.originalname, 'speaker');
|
||||||
await multimediaFileService.uploadFile(file, CDNFilePath);
|
console.log('CDNFilePath', CDNFilePath);
|
||||||
|
|
||||||
|
const context = buildContext(req, config);
|
||||||
|
|
||||||
|
await multimediaFileService.uploadFile(file, CDNFilePath, data, context);
|
||||||
|
|
||||||
const result = await multimediaService.create(data, buildContext(req, config));
|
const result = await multimediaService.create(data, context);
|
||||||
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return handleErrorResponse(MODULE_NAME, 'create', error, res)
|
return handleErrorResponse(MODULE_NAME, 'create', error, res)
|
||||||
|
|||||||
@ -5,7 +5,7 @@ const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessV
|
|||||||
const { cacheSuccesses } = require('../../middlewares/cache');
|
const { cacheSuccesses } = require('../../middlewares/cache');
|
||||||
|
|
||||||
// Uploader
|
// Uploader
|
||||||
const uploader = require('../../middlewares/uploader.js');
|
// const uploader = require('../../middlewares/uploader.js');
|
||||||
|
|
||||||
const SchemaValidator = require('../../middlewares/schemaValidator');
|
const SchemaValidator = require('../../middlewares/schemaValidator');
|
||||||
|
|
||||||
@ -63,14 +63,14 @@ const multimediasInputType = Joi.object().keys({
|
|||||||
routes.post('/admin/multimedias/',
|
routes.post('/admin/multimedias/',
|
||||||
isAdministratorUser,
|
isAdministratorUser,
|
||||||
//SchemaValidator(multimediasInputType, true),
|
//SchemaValidator(multimediasInputType, true),
|
||||||
uploader.single('file'),
|
//uploader.single('file'),
|
||||||
multimediaController.create()
|
multimediaController.create()
|
||||||
);
|
);
|
||||||
|
|
||||||
routes.put('/admin/multimedias/:id',
|
routes.put('/admin/multimedias/:id',
|
||||||
isAdministratorUser,
|
isAdministratorUser,
|
||||||
//SchemaValidator(multimediasInputType, true),
|
//SchemaValidator(multimediasInputType, true),
|
||||||
uploader.single('file'),
|
//uploader.single('file'),
|
||||||
multimediaController.update()
|
multimediaController.update()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,62 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
const httpStatus = require('http-status');
|
||||||
const generateControllers = require('../../core/controllers');
|
const generateControllers = require('../../core/controllers');
|
||||||
const multimediaFileService = require('./multimedia_file.service');
|
const multimediaFileService = require('./multimedia_file.service');
|
||||||
|
const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper');
|
||||||
|
|
||||||
|
|
||||||
// Module Name
|
// Module Name
|
||||||
const MODULE_NAME = '[multimediaFile.controller]';
|
const MODULE_NAME = '[multimediaFile.controller]';
|
||||||
|
|
||||||
const controllerOptions = { MODULE_NAME };
|
const controllerOptions = { MODULE_NAME };
|
||||||
const extraControllers = {};
|
|
||||||
|
function buildContext(req, config) {
|
||||||
|
return {
|
||||||
|
user: req.user,
|
||||||
|
scopes: [],
|
||||||
|
...config,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const extraControllers = {
|
||||||
|
|
||||||
|
/*upload: (config) => {
|
||||||
|
return async (req, res, next) => {
|
||||||
|
var file = req.file;
|
||||||
|
console.log(file);
|
||||||
|
|
||||||
|
// ¿Hay fichero adjunto?
|
||||||
|
if (!file || !file.buffer) {
|
||||||
|
try {
|
||||||
|
var CDNFilePath = cdnHelper.getCDNFilenameWithPath(file.originalname, 'speaker');
|
||||||
|
await multimediaFileService.uploadFile(file, CDNFilePath, data, context);
|
||||||
|
|
||||||
|
} catch(error) {
|
||||||
|
return handleErrorResponse(MODULE_NAME, 'upload', error, res);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},*/
|
||||||
|
|
||||||
|
create: (config) => {
|
||||||
|
return async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
var data = req.body;
|
||||||
|
console.log(data);
|
||||||
|
console.log(req.file);
|
||||||
|
|
||||||
|
const context = buildContext(req, config);
|
||||||
|
const result = await multimediaFileService.create(data, context);
|
||||||
|
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
||||||
|
} catch (error) {
|
||||||
|
return handleErrorResponse(MODULE_NAME, 'create', error, res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = generateControllers(multimediaFileService, extraControllers, controllerOptions);
|
module.exports = generateControllers(multimediaFileService, extraControllers, controllerOptions);
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,16 @@
|
|||||||
const routes = require('express').Router();
|
const routes = require('express').Router();
|
||||||
|
// Uploader
|
||||||
|
const cdnUpload = require('../../middlewares/uploader.js');
|
||||||
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
|
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
|
||||||
const { cacheSuccesses } = require('../../middlewares/cache');
|
const { cacheSuccesses } = require('../../middlewares/cache');
|
||||||
|
|
||||||
//const SchemaValidator = require('../../middlewares/schemaValidator');
|
const SchemaValidator = require('../../middlewares/schemaValidator');
|
||||||
|
|
||||||
const PaginateMiddleware = require('../../middlewares/paginate');
|
const PaginateMiddleware = require('../../middlewares/paginate');
|
||||||
const FieldMiddleware = require('../../middlewares/fields');
|
const FieldMiddleware = require('../../middlewares/fields');
|
||||||
const SortMiddleware = require('../../middlewares/sort');
|
const SortMiddleware = require('../../middlewares/sort');
|
||||||
const multimediaFileController = require('./multimedia_file.controller');
|
const multimediaFileController = require('./multimedia_file.controller');
|
||||||
|
const { multimediaFilesInputType } = require('./multimedia_file.validations');
|
||||||
|
|
||||||
const generalInvalidFields = [
|
const generalInvalidFields = [
|
||||||
'userId', 'createdAt', 'updatedAt',
|
'userId', 'createdAt', 'updatedAt',
|
||||||
@ -35,7 +37,26 @@ routes.get('/multimediafiles/:id', cacheSuccesses('24 hours'),
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/*********************************************************************************************************
|
||||||
|
* ADMINISTRACIÓN
|
||||||
|
*********************************************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Nuevo
|
||||||
|
routes.post('/admin/multimediafiles/',
|
||||||
|
isAdministratorUser,
|
||||||
|
SchemaValidator(multimediaFilesInputType, true),
|
||||||
|
cdnUpload().single('file'),
|
||||||
|
multimediaFileController.create()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Modificación
|
||||||
|
routes.put('/admin/multimediafiles/:id',
|
||||||
|
isAdministratorUser,
|
||||||
|
SchemaValidator(multimediaFilesInputType, true),
|
||||||
|
cdnUpload().single('file'),
|
||||||
|
multimediaFileController.update()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
module.exports = routes;
|
module.exports = routes;
|
||||||
@ -27,6 +27,52 @@ const _generateThumbFileName = function (fileName, prefix) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const _uploadFile = function (file, filename, options) {
|
||||||
|
var defaultOptions = {
|
||||||
|
thumb: false,
|
||||||
|
thumbSize: config.uploads.thumb_size,
|
||||||
|
}
|
||||||
|
|
||||||
|
options = _.defaults(options || {}, defaultOptions);
|
||||||
|
var diskFilename = Path.join(config.uploads.path, filename);
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
if (!imageType(file.buffer)) {
|
||||||
|
reject('No es un fichero de imagen');
|
||||||
|
};
|
||||||
|
|
||||||
|
fs.writeFile(diskFilename, file.buffer, function (error) {
|
||||||
|
if (error) {
|
||||||
|
console.log(error);
|
||||||
|
reject(error);
|
||||||
|
} else {
|
||||||
|
if (options.thumb) {
|
||||||
|
var diskThumbFilename = _generateThumbFileName(diskfilename);
|
||||||
|
sharp(file.buffer).resize(options.thumbSize).toBuffer()
|
||||||
|
.then(function (data) {
|
||||||
|
fs.writeFile(diskThumbFilename, data, function (error) {
|
||||||
|
if (error) {
|
||||||
|
console.log(error);
|
||||||
|
reject(error);
|
||||||
|
} else {
|
||||||
|
resolve({
|
||||||
|
fileName: fileName,
|
||||||
|
diskFilename: diskFilename,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(function (error) {
|
||||||
|
console.log(error);
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const extraMethods = {
|
const extraMethods = {
|
||||||
removeFile: function (filename) {
|
removeFile: function (filename) {
|
||||||
@ -44,50 +90,21 @@ const extraMethods = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
uploadFile: function (file, filename, options) {
|
uploadFile: async function (file, filename, data, context) {
|
||||||
var defaultOptions = {
|
const upload = await _uploadFile(file, filename);
|
||||||
thumb: false,
|
return await models.MultimediaFile.create({
|
||||||
thumbSize: config.uploads.thumb_size,
|
name: data.name,
|
||||||
}
|
description: data.description,
|
||||||
|
provider: 'cdn',
|
||||||
options = _.defaults(options || {}, defaultOptions);
|
class: 'picture',
|
||||||
var diskFilename = Path.join(config.uploads.path, filename);
|
url: filename,
|
||||||
|
userId: context && context.user ? context.user.id : undefined
|
||||||
return new Promise(function(resolve, reject) {
|
})
|
||||||
if (!imageType(file.buffer)) {
|
|
||||||
reject('No es un fichero de imagen');
|
|
||||||
};
|
|
||||||
|
|
||||||
fs.writeFile(diskFilename, file.buffer, function(error) {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
reject(error);
|
|
||||||
} else {
|
|
||||||
if (options.thumb) {
|
|
||||||
var diskThumbFilename = _generateThumbFileName(diskfilename);
|
|
||||||
sharp(file.buffer).resize(options.thumbSize).toBuffer()
|
|
||||||
.then(function (data) {
|
|
||||||
fs.writeFile(diskThumbFilename, data, function(error) {
|
|
||||||
if (error) {
|
|
||||||
console.log(error);
|
|
||||||
reject(error);
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
console.log(error);
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
create: async function(values, context) {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
afterFetchOne: async (result, params, context) => {
|
afterFetchOne: async (result, params, context) => {
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
|||||||
11
modules/multimedia/multimedia_file.validations.js
Normal file
11
modules/multimedia/multimedia_file.validations.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
const Joi = require('joi');
|
||||||
|
|
||||||
|
const multimediaFilesInputType = Joi.object().keys({
|
||||||
|
name: Joi.string().optional(),
|
||||||
|
description: Joi.string().optional(),
|
||||||
|
url: Joi.string().optional(), // <-- URL de Vimeo, YouTube, etc.
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
multimediaFilesInputType,
|
||||||
|
};
|
||||||
Loading…
Reference in New Issue
Block a user