diff --git a/build/communes.js b/build/communes.js index fe48bae..0dad964 100644 --- a/build/communes.js +++ b/build/communes.js @@ -15,6 +15,7 @@ const MORTES_POUR_LA_FRANCE = ['55189', '55039', '55050', '55239', '55307', '551 async function buildCommunes() { const communesFeatures = await readGeoJSONFeatures(COMMUNES_FEATURES_PATH) const communesFeaturesIndex = keyBy(communesFeatures, f => f.properties.code) + const keyCom = 'collectiviteOutremer' const communesData = communes .filter(commune => { @@ -30,6 +31,9 @@ async function buildCommunes() { codesPostaux: commune.codesPostaux || [], population: commune.population } + if (keyCom in commune) { + communeData[keyCom] = commune[keyCom] + } if (commune.code in communesFeaturesIndex) { const contour = communesFeaturesIndex[commune.code].geometry diff --git a/lib/communeHelpers.js b/lib/communeHelpers.js index 6dd09df..c845045 100644 --- a/lib/communeHelpers.js +++ b/lib/communeHelpers.js @@ -1,7 +1,7 @@ const {initFields, initFormat} = require('./helpers') const initCommuneFields = initFields({ - default: ['nom', 'code', 'codeDepartement', 'codeRegion', 'codesPostaux', 'population'], + default: ['nom', 'code', 'codeDepartement', 'codeRegion', 'codesPostaux', 'population', 'collectiviteOutremer'], base: ['nom', 'code'] }) diff --git a/lib/communes.js b/lib/communes.js index 907b611..f85ec88 100644 --- a/lib/communes.js +++ b/lib/communes.js @@ -19,6 +19,11 @@ const schema = { code: {type: 'token', queryWith: 'code'}, codesPostaux: {type: 'tokenList', queryWith: 'codePostal'}, codeDepartement: {type: 'token', queryWith: 'codeDepartement'}, + collectiviteOutremer: { + type: 'tokenNested', + queryWith: 'collectiviteOutremer', + nestedKey: 'code' + }, codeRegion: {type: 'token', queryWith: 'codeRegion'}, contour: {type: 'geo', queryWith: 'pointInContour'} } diff --git a/lib/searchableCollection/index.js b/lib/searchableCollection/index.js index 6f4217b..756a3f4 100644 --- a/lib/searchableCollection/index.js +++ b/lib/searchableCollection/index.js @@ -6,6 +6,7 @@ const TextIndex = require('./indexes/text') const createIndexByType = { token: (key, params) => new TokenIndex(key, params), tokenList: (key, params) => new TokenIndex(key, {...params, array: true}), + tokenNested: (key, params) => new TokenIndex(key, params), text: (key, params) => new TextIndex(key, params), geo: key => new GeoIndex(key) } diff --git a/lib/searchableCollection/indexes/token.js b/lib/searchableCollection/indexes/token.js index 0e95e35..d62d32a 100644 --- a/lib/searchableCollection/indexes/token.js +++ b/lib/searchableCollection/indexes/token.js @@ -8,6 +8,7 @@ class TokenIndex { this._key = key this._array = options.array || false + this._nestedKey = options.nestedKey || false this._multiple = options.multiple this._index = new Map() } @@ -24,6 +25,8 @@ class TokenIndex { if (this._key in item) { if (this._array) { item[this._key].forEach(token => this.indexForToken(token, item)) + } else if (this._nestedKey) { + this.indexForToken(item[this._key][this._nestedKey], item) } else { this.indexForToken(item[this._key], item) } diff --git a/server.js b/server.js index 1e4c131..3cc3c02 100644 --- a/server.js +++ b/server.js @@ -29,7 +29,7 @@ app.use((req, res, next) => { /* Communes */ app.get('/communes', initLimit(), initCommuneFields, initCommuneFormat, (req, res) => { - const query = pick(req.query, 'type', 'code', 'codePostal', 'nom', 'codeDepartement', 'codeRegion', 'boost') + const query = pick(req.query, 'type', 'code', 'codePostal', 'nom', 'collectiviteOutremer', 'codeDepartement', 'codeRegion', 'boost') if (req.query.lat && req.query.lon) { const lat = parseFloat(req.query.lat) const lon = parseFloat(req.query.lon) diff --git a/test/communeHelpers.js b/test/communeHelpers.js index c381606..07fabd4 100644 --- a/test/communeHelpers.js +++ b/test/communeHelpers.js @@ -17,7 +17,7 @@ describe('communeHelpers', () => { it('empty request should return default fields', done => { runTestCase( {}, - ['nom', 'code', 'codesPostaux', 'codeDepartement', 'codeRegion', 'population'], + ['nom', 'code', 'codeDepartement', 'codeRegion', 'codesPostaux', 'population', 'collectiviteOutremer'], done ) })