This commit is contained in:
David Arranz 2019-07-29 15:39:52 +02:00
parent 8225dbf36c
commit 3db849301d
4 changed files with 51 additions and 18 deletions

View File

@ -3,6 +3,15 @@ const cdnHelper = require('./cdn.helper');
const valuesComposer = (values) => (values) ? values.map(value => ({id: value.id, name: value.name,})): values;
const citiesComposer = (city) => {
if (city) {
return {
...city,
image: cdnHelper.getCDNCityMediaUrl(city.city),
};
}
else return city;
}
const commentsComposer = (comments) => {
if (comments) {
@ -153,5 +162,6 @@ module.exports = {
entityComposer,
speakerComposer,
eventComposer,
commentComposer
commentComposer,
citiesComposer
}

View File

@ -60,15 +60,9 @@ module.exports = function (sequelize, DataTypes) {
timestamps: true,
});
Venue.addScope('includeCountEvents', () => {
Venue.addScope('includeOnlyCities', () => {
return {
include: [
{ model: sequelize.models.Event,
as: 'events',
attributes:[[sequelize.fn('COUNT', sequelize.col('id')), 'num_editions']],
required: false
}
]
attributes: [[sequelize.fn('DISTINCT', sequelize.col('city')), 'city']]
}
});

View File

@ -3,22 +3,33 @@ const routes = require('express').Router();
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
const SchemaValidator = require('../../middlewares/schemaValidator');
/*const PaginateMiddleware = require('../../middlewares/paginate');
const FieldMiddleware = require('../../middlewares/fields');*/
//const SortMiddleware = require('../../middlewares/sort');
//const PaginateMiddleware = require('../../middlewares/paginate');
//const FieldMiddleware = require('../../middlewares/fields');
const SortMiddleware = require('../../middlewares/sort');
const VenueValidation = require('./venue.validations');
const venueController = require('./venue.controller');
routes.get('/venues',
//SortMiddleware.middleware({ default: "name" }),
isLoggedUser,
//SortMiddleware.middleware({ default: "name" }),
venueController.find()
);
routes.get('/venues/:id',
//isLoggedUser,
venueController.findOne());
routes.get('/venues/cities',
isLoggedUser,
SortMiddleware.middleware({ default: "city" }),
venueController.find({
scopes: ['includeOnlyCities']
})
);
//routes.get('/venues/:id',
//isLoggedUser,
//venueController.findOne();
/*
routes.get('/venues/:id/events',
//isLoggedUser,
//SortMiddleware.middleware({ default: "name" }),
@ -28,7 +39,7 @@ routes.get('/venues/:id/events',
},
venueController.find());
*/
routes.post('/venues/', SchemaValidator(VenueValidation.VenueInputType, true), venueController.create);
//routes.put('/venues/:id', isAdministratorUser, venueController.update);
//routes.delete('/venues/:id', isAdministratorUser, venueController.delete);

View File

@ -4,7 +4,25 @@
const _ = require('lodash');
const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper');
const models = require('../../core/models');
const { citiesComposer } = require('../../helpers/composes.helper');
const extraMethods = {};
const extraMethods = {
afterFetchAll: (result, params, context) => {
if (!result.count) {
return result;
}
let rows = result.rows.map(row => row.toJSON());
rows = rows.map(city => citiesComposer(city, context));
return {
count: rows.length,
rows: rows
}
},
};
module.exports = generateService(models.Venue, extraMethods);