From 3db849301dea5a5e7fd5c8e0adbdb27cab6dddc5 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 29 Jul 2019 15:39:52 +0200 Subject: [PATCH] a --- helpers/composes.helper.js | 12 +++++++++++- modules/venues/venue.model.js | 10 ++-------- modules/venues/venue.routes.js | 27 +++++++++++++++++++-------- modules/venues/venue.service.js | 20 +++++++++++++++++++- 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/helpers/composes.helper.js b/helpers/composes.helper.js index a280c05..7646385 100644 --- a/helpers/composes.helper.js +++ b/helpers/composes.helper.js @@ -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 } \ No newline at end of file diff --git a/modules/venues/venue.model.js b/modules/venues/venue.model.js index cbb61c2..32657c3 100644 --- a/modules/venues/venue.model.js +++ b/modules/venues/venue.model.js @@ -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']] } }); diff --git a/modules/venues/venue.routes.js b/modules/venues/venue.routes.js index 16b423d..4825c3d 100644 --- a/modules/venues/venue.routes.js +++ b/modules/venues/venue.routes.js @@ -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); diff --git a/modules/venues/venue.service.js b/modules/venues/venue.service.js index 436a676..b4a1b8c 100644 --- a/modules/venues/venue.service.js +++ b/modules/venues/venue.service.js @@ -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); \ No newline at end of file