From 4cff31b84a356947218c8e3930c90f910f249d49 Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Thu, 5 Jul 2018 11:21:13 -0500 Subject: [PATCH 1/8] Added explicit primary keys and updated relationships. --- models/category.js | 6 ++++-- models/country.js | 4 ++++ models/country_count.js | 6 ++++-- models/data_application.js | 5 ++++- models/data_source.js | 15 +++++++++++++-- models/data_type.js | 5 ++++- models/income_level.js | 5 ++++- models/location.js | 4 ++++ models/org_size.js | 6 ++++-- models/org_type.js | 6 ++++-- models/profile.js | 18 +++++++++++------- models/region.js | 6 ++++-- models/sector.js | 4 ++++ models/status.js | 6 ++++-- models/use_case.js | 4 ++++ 15 files changed, 76 insertions(+), 24 deletions(-) diff --git a/models/category.js b/models/category.js index 1d5fbc5..9b159c6 100644 --- a/models/category.js +++ b/models/category.js @@ -2,14 +2,16 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('category', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, category: { type: DataTypes.STRING, }, }, { tableName: 'category', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/country.js b/models/country.js index a3e154c..dc0574e 100644 --- a/models/country.js +++ b/models/country.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('country', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, region_id: { type: DataTypes.INTEGER, }, diff --git a/models/country_count.js b/models/country_count.js index a245694..a051f92 100644 --- a/models/country_count.js +++ b/models/country_count.js @@ -2,14 +2,16 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('country_count', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, count: { type: DataTypes.STRING, }, }, { tableName: 'country_count', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/data_application.js b/models/data_application.js index d088d1a..208054c 100644 --- a/models/data_application.js +++ b/models/data_application.js @@ -2,9 +2,12 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('data_application', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, profile_id: { type: DataTypes.INTEGER, - primaryKey: true }, advocacy: { type: DataTypes.BOOLEAN, diff --git a/models/data_source.js b/models/data_source.js index 2545a18..a9fac0a 100644 --- a/models/data_source.js +++ b/models/data_source.js @@ -2,9 +2,12 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('data_source', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, profile_id: { type: DataTypes.INTEGER, - primaryKey: true }, country_id: { type: DataTypes.INTEGER, @@ -22,10 +25,18 @@ module.exports = (sequelize, DataTypes) => { tableName: 'data_source', underscored: true, timestamps: false, - }); Model.associate = (models) => { + Model.belongsTo(models.profile, { + foreignKey: 'profile_id', + }); + Model.belongsTo(models.country, { + foreignKey: 'country_id', + }); + Model.belongsTo(models.data_type, { + foreignKey: 'data_type_id', + }); }; return Model; diff --git a/models/data_type.js b/models/data_type.js index 68c1acf..280eac5 100644 --- a/models/data_type.js +++ b/models/data_type.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('data_type', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, data_type: { type: DataTypes.STRING, }, @@ -12,7 +16,6 @@ module.exports = (sequelize, DataTypes) => { tableName: 'data_type', underscored: true, timestamps: false, - }); Model.associate = (models) => { diff --git a/models/income_level.js b/models/income_level.js index 09ce8a0..7661e3e 100644 --- a/models/income_level.js +++ b/models/income_level.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('income_level', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, income_level: { type: DataTypes.STRING, }, @@ -12,7 +16,6 @@ module.exports = (sequelize, DataTypes) => { tableName: 'income_level', underscored: true, timestamps: false, - }); Model.associate = (models) => { diff --git a/models/location.js b/models/location.js index 4113dec..d9e6090 100644 --- a/models/location.js +++ b/models/location.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('location', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, country_id: { type: DataTypes.INTEGER, }, diff --git a/models/org_size.js b/models/org_size.js index 4763612..428e4f3 100644 --- a/models/org_size.js +++ b/models/org_size.js @@ -2,14 +2,16 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('org_size', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, size: { type: DataTypes.STRING, }, }, { tableName: 'org_size', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/org_type.js b/models/org_type.js index 85a11b7..23e2dbb 100644 --- a/models/org_type.js +++ b/models/org_type.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('org_type', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, type: { type: DataTypes.STRING, }, @@ -10,9 +14,7 @@ module.exports = (sequelize, DataTypes) => { }, }, { tableName: 'org_type', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/profile.js b/models/profile.js index acfef0c..4d506e9 100644 --- a/models/profile.js +++ b/models/profile.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('profile', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, location_id: { type: DataTypes.INTEGER, }, @@ -64,25 +68,25 @@ module.exports = (sequelize, DataTypes) => { Model.associate = (models) => { Model.belongsTo(models.location, { - foreignKey: 'location_id' + foreignKey: 'location_id', }); Model.belongsTo(models.sector, { - foreignKey: 'sector_id' + foreignKey: 'sector_id', }); Model.belongsTo(models.org_size, { - foreignKey: 'org_size_id' + foreignKey: 'org_size_id', }); Model.belongsTo(models.org_type, { - foreignKey: 'org_type_id' + foreignKey: 'org_type_id', }); Model.belongsTo(models.status, { - foreignKey: 'status_id' + foreignKey: 'status_id', }); Model.belongsTo(models.category, { - foreignKey: 'category_id' + foreignKey: 'category_id', }); Model.belongsTo(models.country_count, { - foreignKey: 'country_count_id' + foreignKey: 'country_count_id', }); }; diff --git a/models/region.js b/models/region.js index 063800e..97d164c 100644 --- a/models/region.js +++ b/models/region.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('region', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, name: { type: DataTypes.STRING, }, @@ -10,9 +14,7 @@ module.exports = (sequelize, DataTypes) => { }, }, { tableName: 'region', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/sector.js b/models/sector.js index 70562eb..98f33b2 100644 --- a/models/sector.js +++ b/models/sector.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('sector', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, sector: { type: DataTypes.STRING, }, diff --git a/models/status.js b/models/status.js index 6262d1a..04cb3e1 100644 --- a/models/status.js +++ b/models/status.js @@ -2,14 +2,16 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('status', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, status: { type: DataTypes.STRING, }, }, { tableName: 'status', - timestamps: false, - }); Model.associate = (models) => { diff --git a/models/use_case.js b/models/use_case.js index 19022f9..faa23c7 100644 --- a/models/use_case.js +++ b/models/use_case.js @@ -2,6 +2,10 @@ module.exports = (sequelize, DataTypes) => { var Model = sequelize.define('use_case', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, profile_id: { type: DataTypes.INTEGER, }, From f6ed15e7f8f3f46d8457047490eb4d766ba8f946 Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Thu, 5 Jul 2018 11:21:36 -0500 Subject: [PATCH 2/8] Added model for contacts. --- models/contact.js | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 models/contact.js diff --git a/models/contact.js b/models/contact.js new file mode 100644 index 0000000..dc536f9 --- /dev/null +++ b/models/contact.js @@ -0,0 +1,41 @@ +'use strict'; + +module.exports = (sequelize, DataTypes) => { + var Model = sequelize.define('contact', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + }, + profile_id: { + type: DataTypes.INTEGER, + }, + firstname: { + type: DataTypes.STRING, + }, + lastname: { + type: DataTypes.STRING, + }, + title: { + type: DataTypes.STRING, + }, + email: { + type: DataTypes.STRING, + }, + phone: { + type: DataTypes.STRING, + }, + }, { + tableName: 'contact', + underscored: true, + timestamps: false, + }); + + Model.associate = (models) => { + Model.belongsTo(models.profile, { + foreignKey: 'profile_id', + }); + }; + + return Model; +}; + From c48134c79abf00a1217241fd20457a54b7413c88 Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Thu, 5 Jul 2018 13:20:18 -0500 Subject: [PATCH 3/8] Added missing columns to profile model. --- models/profile.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/models/profile.js b/models/profile.js index 4d506e9..b86d0c2 100644 --- a/models/profile.js +++ b/models/profile.js @@ -48,6 +48,12 @@ module.exports = (sequelize, DataTypes) => { org_profile_source: { type: DataTypes.STRING, }, + org_profile_year: { + type: DataTypes.INTEGER, + }, + org_year_founded: { + type: DataTypes.INTEGER, + }, org_url: { type: DataTypes.STRING, }, From 3e1d669b12b32cf9849489524e3c9b2f75f2a44c Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Wed, 18 Jul 2018 15:41:29 -0500 Subject: [PATCH 4/8] Split routes into separate files. --- routes/api/v1/index.js | 54 ++---------------------------------- routes/api/v1/region.js | 33 ++++++++++++++++++++++ routes/api/v1/sector.js | 61 +++++++++++++++++------------------------ 3 files changed, 60 insertions(+), 88 deletions(-) create mode 100644 routes/api/v1/region.js diff --git a/routes/api/v1/index.js b/routes/api/v1/index.js index 67c9cea..43f6ef5 100644 --- a/routes/api/v1/index.js +++ b/routes/api/v1/index.js @@ -4,9 +4,6 @@ const router = express.Router(); const models = require('../../../models'); const sequelize = models.sequelize; -const regionController = require('../../../controllers/regionController'); -const sectorController = require('../../../controllers/sectorController'); - router.get('/', async (req, res) => { res.status(200).send('OK!'); }); @@ -51,7 +48,7 @@ router.get('/impact-map/stats', async (req, res) => { } }); -router.get('/use-cases/', async (req, res) => { +router.get('/impact-map/use-cases/', async (req, res) => { try { let result = await models.use_case.findAll({ include: [ @@ -66,6 +63,7 @@ router.get('/use-cases/', async (req, res) => { order: [ ['name', 'ASC'], ], + logging: console.log, }) res.send(result); @@ -75,52 +73,4 @@ router.get('/use-cases/', async (req, res) => { } }); -router.get('/regions/total-organizations', - regionController.totalOrganizationCount); - -router.get('/region/:region/total-organizations', - regionController.regionOrganizationCount); - -router.get('/region/:region/country-organization-count/', - regionController.countryOrganizationCounts); - -router.get('/region/:region/organization-types/', - regionController.organizationTypes); - -router.get('/region/:region/organization-sizes/', - regionController.organizationSizes); - -router.get('/region/:region/organization-ages/', - regionController.organizationAges); - -router.get('/region/:region/organization-sectors/', - regionController.sectorOrganizationCounts); - -router.get('/region/:region/use-cases', - regionController.useCases); - -router.get('/sectors/total-organizations', - sectorController.totalOrganizationCount); - -router.get('/sector/:sector/total-organizations', - sectorController.organizationCount); - -router.get('/sector/:sector/data-types', - sectorController.dataTypes); - -router.get('/sector/:sector/organization-types', - sectorController.organizationTypes); - -router.get('/sector/:sector/organization-sizes', - sectorController.organizationSizes); - -router.get('/sector/:sector/organization-ages', - sectorController.organizationAges); - -router.get('/sector/:sector/organization-applications', - sectorController.organizationApplications); - -router.get('/sector/:sector/use-cases', - sectorController.useCases); - module.exports = router; diff --git a/routes/api/v1/region.js b/routes/api/v1/region.js new file mode 100644 index 0000000..09a2ed6 --- /dev/null +++ b/routes/api/v1/region.js @@ -0,0 +1,33 @@ +'use strict'; +const express = require('express'); +const router = express.Router(); +const models = require('../../../models'); +const sequelize = models.sequelize; + +const regionController = require('../../../controllers/regionController'); + +router.get('/regions/total-organizations', + regionController.totalOrganizationCount); + +router.get('/region/:region/total-organizations', + regionController.regionOrganizationCount); + +router.get('/region/:region/country-organization-count/', + regionController.countryOrganizationCounts); + +router.get('/region/:region/organization-types/', + regionController.organizationTypes); + +router.get('/region/:region/organization-sizes/', + regionController.organizationSizes); + +router.get('/region/:region/organization-ages/', + regionController.organizationAges); + +router.get('/region/:region/organization-sectors/', + regionController.sectorOrganizationCounts); + +router.get('/region/:region/use-cases', + regionController.useCases); + +module.exports = router; diff --git a/routes/api/v1/sector.js b/routes/api/v1/sector.js index a649044..481b0e5 100644 --- a/routes/api/v1/sector.js +++ b/routes/api/v1/sector.js @@ -4,41 +4,30 @@ const router = express.Router(); const models = require('../../../models'); const sequelize = models.sequelize; -router.get('/sectors/organization-count'); - -router.get('/organization-count/sectors', (req, res) => { - try { - const sector = req.query.sector; - - const sql = 'SELECT ' + - 'sector.sector AS sector, ' + - '(' + - 'SELECT COUNT(distinct(org_name)) ' + - 'FROM ' + - 'profile AS p, ' + - 'location AS l, ' + - 'country AS c, ' + - 'sector AS s, ' + - 'status AS st ' + - 'WHERE p.location_id = l.id ' + - 'AND l.country_id = c.id ' + - 'AND p.sector_id = s.id ' + - 'AND p.status_id = st.id ' + - 'AND s.sector = sector.sector ' + - 'AND st.status = "publish" ' + - ') AS organization_count ' + - 'FROM sector ' + - 'GROUP BY sector.id'; - - sequelize - .query(sql, { type: sequelize.QueryTypes.SELECT }) - .then((rows) => { - res.send(rows); - }); - } catch (err) { - console.error(err); - res.status(500).send(); - } -}); +const sectorController = require('../../../controllers/sectorController'); + +router.get('/sectors/total-organizations', + sectorController.totalOrganizationCount); + +router.get('/sector/:sector/total-organizations', + sectorController.organizationCount); + +router.get('/sector/:sector/data-types', + sectorController.dataTypes); + +router.get('/sector/:sector/organization-types', + sectorController.organizationTypes); + +router.get('/sector/:sector/organization-sizes', + sectorController.organizationSizes); + +router.get('/sector/:sector/organization-ages', + sectorController.organizationAges); + +router.get('/sector/:sector/organization-applications', + sectorController.organizationApplications); + +router.get('/sector/:sector/use-cases', + sectorController.useCases); module.exports = router; From 32dbc06f182690e8e24d84ad93930cf565689dae Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Thu, 2 Aug 2018 16:12:00 -0500 Subject: [PATCH 5/8] Added autoincrement to primary keys in all models. --- models/category.js | 1 + models/contact.js | 1 + models/country.js | 1 + models/country_count.js | 1 + models/data_application.js | 1 + models/data_source.js | 1 + models/data_type.js | 1 + models/income_level.js | 1 + models/location.js | 1 + models/org_size.js | 1 + models/org_type.js | 1 + models/profile.js | 1 + models/region.js | 1 + models/sector.js | 1 + models/status.js | 1 + models/use_case.js | 1 + 16 files changed, 16 insertions(+) diff --git a/models/category.js b/models/category.js index 9b159c6..30d3495 100644 --- a/models/category.js +++ b/models/category.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, category: { type: DataTypes.STRING, diff --git a/models/contact.js b/models/contact.js index dc536f9..7eddba6 100644 --- a/models/contact.js +++ b/models/contact.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, profile_id: { type: DataTypes.INTEGER, diff --git a/models/country.js b/models/country.js index dc0574e..532df7d 100644 --- a/models/country.js +++ b/models/country.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, region_id: { type: DataTypes.INTEGER, diff --git a/models/country_count.js b/models/country_count.js index a051f92..6566b63 100644 --- a/models/country_count.js +++ b/models/country_count.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, count: { type: DataTypes.STRING, diff --git a/models/data_application.js b/models/data_application.js index 208054c..5506a2c 100644 --- a/models/data_application.js +++ b/models/data_application.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, profile_id: { type: DataTypes.INTEGER, diff --git a/models/data_source.js b/models/data_source.js index a9fac0a..f2c9105 100644 --- a/models/data_source.js +++ b/models/data_source.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, profile_id: { type: DataTypes.INTEGER, diff --git a/models/data_type.js b/models/data_type.js index 280eac5..057d58c 100644 --- a/models/data_type.js +++ b/models/data_type.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, data_type: { type: DataTypes.STRING, diff --git a/models/income_level.js b/models/income_level.js index 7661e3e..bc48ee9 100644 --- a/models/income_level.js +++ b/models/income_level.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, income_level: { type: DataTypes.STRING, diff --git a/models/location.js b/models/location.js index d9e6090..ff84cf1 100644 --- a/models/location.js +++ b/models/location.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, country_id: { type: DataTypes.INTEGER, diff --git a/models/org_size.js b/models/org_size.js index 428e4f3..5e6a241 100644 --- a/models/org_size.js +++ b/models/org_size.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, size: { type: DataTypes.STRING, diff --git a/models/org_type.js b/models/org_type.js index 23e2dbb..3c6dfd4 100644 --- a/models/org_type.js +++ b/models/org_type.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, type: { type: DataTypes.STRING, diff --git a/models/profile.js b/models/profile.js index b86d0c2..70b4416 100644 --- a/models/profile.js +++ b/models/profile.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, location_id: { type: DataTypes.INTEGER, diff --git a/models/region.js b/models/region.js index 97d164c..8e8403a 100644 --- a/models/region.js +++ b/models/region.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, name: { type: DataTypes.STRING, diff --git a/models/sector.js b/models/sector.js index 98f33b2..2a1eb7a 100644 --- a/models/sector.js +++ b/models/sector.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, sector: { type: DataTypes.STRING, diff --git a/models/status.js b/models/status.js index 04cb3e1..395f6ba 100644 --- a/models/status.js +++ b/models/status.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, status: { type: DataTypes.STRING, diff --git a/models/use_case.js b/models/use_case.js index faa23c7..65b2e53 100644 --- a/models/use_case.js +++ b/models/use_case.js @@ -5,6 +5,7 @@ module.exports = (sequelize, DataTypes) => { id: { type: DataTypes.INTEGER, primaryKey: true, + autoIncrement: true, }, profile_id: { type: DataTypes.INTEGER, From ddeff35ce472cb10a2d852ef1c20426aa9e41be7 Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Mon, 3 Sep 2018 11:36:01 -0500 Subject: [PATCH 6/8] Fixed organization size query to include null results. --- controllers/sectorController.js | 35 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/controllers/sectorController.js b/controllers/sectorController.js index c38d21e..a6cca55 100644 --- a/controllers/sectorController.js +++ b/controllers/sectorController.js @@ -38,7 +38,6 @@ async function getOrgAgeGroupCount (parameters) { result = result[0]['count']; } - console.log(parameters, result); return result; } @@ -182,23 +181,21 @@ exports.organizationSizes = async function (req, res) { const sector = req.params.sector; let sql = 'SELECT ' + - 'size AS organization_size, ' + - '( ' + - 'SELECT COUNT(p.org_name) ' + - 'FROM ' + - 'profile AS p, ' + - 'org_size AS os, ' + - 'sector AS s, ' + - 'status AS st ' + - 'WHERE p.sector_id = s.id ' + - 'AND p.status_id = st.id ' + - 'AND p.org_size_id = os.id ' + - 'AND s.sector = :sector ' + - 'AND os.size = org_size.size ' + + 'COALESCE(size, "N/A") AS organization_size, ' + + 'COUNT(*) AS organization_count ' + + 'FROM profile AS p ' + + 'JOIN sector AS s ' + + 'ON p.sector_id = s.id ' + + 'JOIN status AS st ' + + 'ON p.status_id = st.id ' + + 'LEFT JOIN org_size AS os ' + + 'ON p.org_size_id = os.id ' + + 'WHERE p.sector_id IN ( ' + + 'SELECT id ' + + 'FROM sector ' + + 'WHERE sector = :sector) ' + 'AND st.status = "publish" ' + - ') AS organization_count ' + - 'FROM org_size ' + - 'GROUP BY org_size.size ' + + 'GROUP BY os.size ' + 'ORDER BY ' + 'CASE ' + 'WHEN size = "1 to 10" ' + @@ -211,6 +208,8 @@ exports.organizationSizes = async function (req, res) { 'THEN 4 ' + 'WHEN size = "1000+" ' + 'THEN 5 ' + + 'WHEN size IS NULL ' + + 'THEN 6 ' + 'END'; let result = await sequelize.query(sql, { @@ -360,4 +359,4 @@ exports.useCases = async function (req, res) { console.error(err); res.status(500).send(); } -}; \ No newline at end of file +}; From a62819ebd7d415588a79a85dc74beee81cbf54e2 Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Mon, 3 Sep 2018 11:37:50 -0500 Subject: [PATCH 7/8] Moved use cases to dedicated router and controller. --- controllers/useCaseController.js | 29 +++++++++++++++++++++++++++++ routes/api/v1/index.js | 25 ------------------------- routes/api/v1/use-cases.js | 11 +++++++++++ 3 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 controllers/useCaseController.js create mode 100644 routes/api/v1/use-cases.js diff --git a/controllers/useCaseController.js b/controllers/useCaseController.js new file mode 100644 index 0000000..754fae0 --- /dev/null +++ b/controllers/useCaseController.js @@ -0,0 +1,29 @@ +'use strict'; +const models = require('../models'); +const sequelize = models.sequelize; + +exports.allUseCases = async function (req, res) { + try { + let result = await models.use_case.findAll({ + include: [ + { + model: models.country, + include: [ + models.region, + ], + }, + { + model: models.sector, + }, + ], + order: [ + ['name', 'ASC'], + ], + }); + + res.send(result); + } catch (err) { + console.error(err); + res.status(500).send(); + } +}; diff --git a/routes/api/v1/index.js b/routes/api/v1/index.js index 43f6ef5..4685d53 100644 --- a/routes/api/v1/index.js +++ b/routes/api/v1/index.js @@ -48,29 +48,4 @@ router.get('/impact-map/stats', async (req, res) => { } }); -router.get('/impact-map/use-cases/', async (req, res) => { - try { - let result = await models.use_case.findAll({ - include: [ - { - model: models.country, - include: [ - models.region, - ], - }, - models.sector, - ], - order: [ - ['name', 'ASC'], - ], - logging: console.log, - }) - - res.send(result); - } catch (err) { - console.error(err); - res.status(500).send(); - } -}); - module.exports = router; diff --git a/routes/api/v1/use-cases.js b/routes/api/v1/use-cases.js new file mode 100644 index 0000000..3b04141 --- /dev/null +++ b/routes/api/v1/use-cases.js @@ -0,0 +1,11 @@ +'use strict'; +const express = require('express'); +const router = express.Router(); +const models = require('../../../models'); +const sequelize = models.sequelize; + +const useCaseController = require('../../../controllers/useCaseController'); + +router.get('/impact-map/use-cases', useCaseController.allUseCases); + +module.exports = router; From e15450e999fd51edaac528a98d0eba2c3c1a8f6a Mon Sep 17 00:00:00 2001 From: Andy Lo Date: Sun, 23 Sep 2018 14:15:23 -0500 Subject: [PATCH 8/8] Added opendataimpactmap.org subdomains to allowed origins. --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 42ab7e0..3288636 100644 --- a/app.js +++ b/app.js @@ -19,7 +19,7 @@ app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(cors({ - allowedOrigins: ['*.forestadmin.com'], + allowedOrigins: ['*.opendataimpactmap.org', '*.forestadmin.com'], headers: ['Authorization', 'X-Requested-With', 'Content-Type'] }));