diff --git a/modules/multimedia/multimedia.model.js b/modules/multimedia/multimedia.model.js index 8384628..7795bd4 100644 --- a/modules/multimedia/multimedia.model.js +++ b/modules/multimedia/multimedia.model.js @@ -60,8 +60,22 @@ module.exports = function (sequelize, DataTypes) { timestamps: true, }); + Multimedia.addScope('includeMultimediaFile', () => { + return { + include: [ + { model: sequelize.models.MultimediaFile, as: 'multimediaFile' } + ] + } + }); + Multimedia.associate = function (models) { - Multimedia.MultimediaFile = Multimedia.belongsTo(models.MultimediaFile, { foreignKey: 'multimediafileId' }); + Multimedia.MultimediaFile = Multimedia.belongsTo(models.MultimediaFile, { foreignKey: 'multimediafileId', as: "multimediaFile" }); + + Multimedia.Speaker = Multimedia.hasOne(models.Speaker, { + foreignKey: 'entityId', + as: 'speaker' + }); + }; return Multimedia; diff --git a/modules/multimedia/multimedia.routes.js b/modules/multimedia/multimedia.routes.js index 8ab2774..81e0e6c 100644 --- a/modules/multimedia/multimedia.routes.js +++ b/modules/multimedia/multimedia.routes.js @@ -13,16 +13,20 @@ const SortMiddleware = require('../../middlewares/sort'); const multimediaController = require('./multimedia.controller'); -routes.get('/multimedias', cacheSuccesses, +routes.get('/multimedias', //cacheSuccesses, PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "init_available_date" }), - multimediaController.find({}) + multimediaController.find({ + scopes: ['includeMultimediaFile'] + }) ); -routes.get('/multimedias/:id', cacheSuccesses, +routes.get('/multimedias/:id', //cacheSuccesses, //PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "init_available_date" }), - multimediaController.findOne({}) + multimediaController.findOne({ + scopes: ['includeMultimediaFile'] + }) ); diff --git a/modules/multimedia/multimedia.service.js b/modules/multimedia/multimedia.service.js index 3375afc..943ff16 100644 --- a/modules/multimedia/multimedia.service.js +++ b/modules/multimedia/multimedia.service.js @@ -27,4 +27,4 @@ const extraMethods = { } -module.exports = generateService(models.MultimediaFile, extraMethods); \ No newline at end of file +module.exports = generateService(models.Multimedia, extraMethods); \ No newline at end of file diff --git a/modules/multimedia/multimedia_file.controller.js b/modules/multimedia/multimedia_file.controller.js new file mode 100644 index 0000000..ac09681 --- /dev/null +++ b/modules/multimedia/multimedia_file.controller.js @@ -0,0 +1,14 @@ +'use strict'; + +const generateControllers = require('../../core/controllers'); +const multimediaFileService = require('./multimedia_file.service'); + + +// Module Name +const MODULE_NAME = '[multimediaFile.controller]'; + +const controllerOptions = { MODULE_NAME }; +const extraControllers = {}; + +module.exports = generateControllers(multimediaFileService, extraControllers, controllerOptions); + diff --git a/modules/multimedia/multimedia_file.model.js b/modules/multimedia/multimedia_file.model.js index 9731313..240e6d9 100644 --- a/modules/multimedia/multimedia_file.model.js +++ b/modules/multimedia/multimedia_file.model.js @@ -37,8 +37,16 @@ module.exports = function (sequelize, DataTypes) { MultimediaFile.associate = function (models) { MultimediaFile.UserCreate = MultimediaFile.belongsTo(models.User, { foreignKey: 'userId' }); - MultimediaFile.Multimedias = MultimediaFile.hasMany(models.Multimedia, { foreignKey: 'multimediafileId' }); + MultimediaFile.Multimedias = MultimediaFile.hasMany(models.Multimedia, { foreignKey: 'multimediafileId', as: "multimedias" }); }; + MultimediaFile.addScope('includeMultimedias', () => { + return { + include: [ + { model: sequelize.models.Multimedia, as: 'multimedias' } + ] + } + }); + return MultimediaFile; }; \ No newline at end of file diff --git a/modules/multimedia/multimedia_file.routes.js b/modules/multimedia/multimedia_file.routes.js new file mode 100644 index 0000000..42fefa0 --- /dev/null +++ b/modules/multimedia/multimedia_file.routes.js @@ -0,0 +1,41 @@ +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'); +const FieldMiddleware = require('../../middlewares/fields'); +const SortMiddleware = require('../../middlewares/sort'); +const multimediaFileController = require('./multimedia_file.controller'); + +const generalInvalidFields = [ + 'userId', 'createdAt', 'updatedAt', +]; + +routes.get('/multimediafiles', //cacheSuccesses, + FieldMiddleware.middleware({ + invalidFields: generalInvalidFields + }), + PaginateMiddleware.middleware(), + //SortMiddleware.middleware({ default: "init_available_date" }), + multimediaFileController.find({ + scopes: ['includeMultimedias'] + }) +); + +routes.get('/multimediafiles/:id', //cacheSuccesses, + FieldMiddleware.middleware({ + invalidFields: generalInvalidFields + }), + //SortMiddleware.middleware({ default: "init_available_date" }), + multimediaFileController.findOne({ + scopes: ['includeMultimedias'] + }) +); + + + + +module.exports = routes; \ No newline at end of file diff --git a/modules/multimedia/multimedia_file.service.js b/modules/multimedia/multimedia_file.service.js new file mode 100644 index 0000000..3375afc --- /dev/null +++ b/modules/multimedia/multimedia_file.service.js @@ -0,0 +1,30 @@ +/* global Venue */ +'use strict'; + +const _ = require('lodash'); +const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); +const models = require('../../core/models'); +const getVimeoVideoInfo = require('../../helpers/vimeo.helper'); + +const providerComposer = (multimedia) => { + return getVimeoVideoInfo(multimedia.code) +} + +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