diff --git a/src/v1/controller.js b/src/v1/controller.js index e2048cf..f4402dd 100644 --- a/src/v1/controller.js +++ b/src/v1/controller.js @@ -10,6 +10,10 @@ exports.getProvinces = (req, res) => { name, minPopulation, maxPopulation, + minArea, + maxArea, + minAltitude, + maxAltitude, isMetropolitan, offset, limit, @@ -21,6 +25,10 @@ exports.getProvinces = (req, res) => { name, minPopulation, maxPopulation, + minArea, + maxArea, + minAltitude, + maxAltitude, isMetropolitan, offset, limit, @@ -55,13 +63,28 @@ exports.getExactProvince = (req, res) => { exports.getDistricts = (req, res) => { try { - const { name, minPopulation, maxPopulation, offset, limit, fields, sort } = - req.query; + const { + name, + minPopulation, + maxPopulation, + minArea, + maxArea, + provinceId, + province, + offset, + limit, + fields, + sort, + } = req.query; const districts = Districts.getDistricts( name, minPopulation, maxPopulation, + minArea, + maxArea, + provinceId, + province, offset, limit, fields, @@ -95,13 +118,28 @@ exports.getExactDistrict = (req, res) => { exports.getNeighborhoods = (req, res) => { try { - const { name, minPopulation, maxPopulation, offset, limit, fields, sort } = - req.query; + const { + name, + minPopulation, + maxPopulation, + provinceId, + province, + districtId, + district, + offset, + limit, + fields, + sort, + } = req.query; const neighborhood = Neighborhoods.getNeighborhoods( name, minPopulation, maxPopulation, + provinceId, + province, + districtId, + district, offset, limit, fields, @@ -135,13 +173,28 @@ exports.getExactNeighborhood = (req, res) => { exports.getVillages = (req, res) => { try { - const { name, minPopulation, maxPopulation, offset, limit, fields, sort } = - req.query; + const { + name, + minPopulation, + maxPopulation, + provinceId, + province, + districtId, + district, + offset, + limit, + fields, + sort, + } = req.query; const village = Villages.getVillages( name, minPopulation, maxPopulation, + provinceId, + province, + districtId, + district, offset, limit, fields, @@ -175,13 +228,28 @@ exports.getExactVillage = (req, res) => { exports.getTowns = (req, res) => { try { - const { name, minPopulation, maxPopulation, offset, limit, fields, sort } = - req.query; + const { + name, + minPopulation, + maxPopulation, + provinceId, + province, + districtId, + district, + offset, + limit, + fields, + sort, + } = req.query; const town = Towns.getTowns( name, minPopulation, maxPopulation, + provinceId, + province, + districtId, + district, offset, limit, fields, diff --git a/src/v1/data/Districts.js b/src/v1/data/Districts.js index 4129c23..dcc67c0 100644 --- a/src/v1/data/Districts.js +++ b/src/v1/data/Districts.js @@ -6,6 +6,10 @@ exports.getDistricts = function ( name, minPopulation = 1, maxPopulation = 1000000000, + minArea = 1, + maxArea = 1000000000, + provinceId, + province, offset = 0, limit = 973, fields, @@ -51,6 +55,61 @@ exports.getDistricts = function ( }); } + if (minArea || maxArea) { + if (+minArea <= 0 && +maxArea <= 0) { + throw { + status: 404, + message: "You can't search for a district with an area of 0 or less.", + }; + } + + if (+minArea > +maxArea) { + throw { + status: 404, + message: 'The minimum area cannot be greater than the maximum area.', + }; + } + + districts = districts.filter((item) => { + return item.area >= minArea && item.area <= maxArea; + }); + } + + if (provinceId || province) { + console.log(provinceId, province); + if (provinceId && province) { + throw { + status: 404, + message: + 'You can only use one of the provinceId or province parameters.', + }; + } + + if (provinceId) { + if (!isFinite(provinceId)) { + throw { + status: 404, + message: + 'Invalid province ID. The provinceId parameter must be a number.', + }; + } + + districts = districts.filter((item) => item.provinceId === +provinceId); + } + + if (province) { + const provinceAlt = + province.charAt(0).toLocaleUpperCase('TR') + + province.slice(1).toLocaleLowerCase('tr'); + + districts = districts.filter( + (item) => + item.province.includes(province) || + item.province.includes(provinceAlt), + ); + } + } + if (sort) { const sortArray = sort.split(',').reverse(); diff --git a/src/v1/data/Neighborhoods.js b/src/v1/data/Neighborhoods.js index 1c68e2b..679748f 100644 --- a/src/v1/data/Neighborhoods.js +++ b/src/v1/data/Neighborhoods.js @@ -4,6 +4,10 @@ exports.getNeighborhoods = function ( name, minPopulation = 1, maxPopulation = 1000000000, + provinceId, + province, + districtId, + district, offset = 0, limit, fields, @@ -49,6 +53,78 @@ exports.getNeighborhoods = function ( }); } + if (provinceId || province) { + if (provinceId && province) { + throw { + status: 404, + message: + 'You can only use one of the provinceId or province parameters.', + }; + } + + if (provinceId) { + if (!isFinite(provinceId)) { + throw { + status: 404, + message: + 'Invalid province ID. The provinceId parameter must be a number.', + }; + } + + neighborhoods = neighborhoods.filter( + (item) => item.provinceId === +provinceId, + ); + } + + if (province) { + const provinceAlt = + province.charAt(0).toLocaleUpperCase('TR') + + province.slice(1).toLocaleLowerCase('tr'); + + neighborhoods = neighborhoods.filter( + (item) => + item.province.includes(province) || + item.province.includes(provinceAlt), + ); + } + } + + if (districtId || district) { + if (districtId && district) { + throw { + status: 404, + message: + 'You can only use one of the districtId or district parameters.', + }; + } + + if (districtId) { + if (!isFinite(districtId)) { + throw { + status: 404, + message: + 'Invalid district ID. The districtId parameter must be a number.', + }; + } + + neighborhoods = neighborhoods.filter( + (item) => item.districtId === +districtId, + ); + } + + if (district) { + const districtAlt = + district.charAt(0).toLocaleUpperCase('TR') + + district.slice(1).toLocaleLowerCase('tr'); + + neighborhoods = neighborhoods.filter( + (item) => + item.district.includes(district) || + item.district.includes(districtAlt), + ); + } + } + if (sort) { const sortArray = sort.split(',').reverse(); diff --git a/src/v1/data/Provinces.js b/src/v1/data/Provinces.js index bc4afc9..9c65f8f 100644 --- a/src/v1/data/Provinces.js +++ b/src/v1/data/Provinces.js @@ -7,6 +7,10 @@ exports.getProvinces = function ( name, minPopulation = 1, maxPopulation = 1000000000, + minArea = 1, + maxArea = 1000000000, + minAltitude = 0, + maxAltitude = 10000, isMetropolitan, offset = 0, limit = 81, @@ -66,6 +70,48 @@ exports.getProvinces = function ( }); } + if (minArea || maxArea) { + if (+minArea <= 0 && +maxArea <= 0) { + throw { + status: 404, + message: "You can't search for a province with an area of 0 or less.", + }; + } + + if (+minArea > +maxArea) { + throw { + status: 404, + message: 'The minimum area cannot be greater than the maximum area.', + }; + } + + provinces = provinces.filter((item) => { + return item.area >= minArea && item.area <= maxArea; + }); + } + + if (minAltitude || maxAltitude) { + if (+minAltitude < 0 && +maxAltitude < 0) { + throw { + status: 404, + message: + "You can't search for a province with an altitude of less than 0.", + }; + } + + if (+minAltitude > +maxAltitude) { + throw { + status: 404, + message: + 'The minimum altitude cannot be greater than the maximum altitude.', + }; + } + + provinces = provinces.filter((item) => { + return item.altitude >= minAltitude && item.altitude <= maxAltitude; + }); + } + if (isMetropolitan) { if (isMetropolitan === 'true') { provinces = provinces.filter((item) => item.isMetropolitan === true); diff --git a/src/v1/data/Towns.js b/src/v1/data/Towns.js index 86f3a4d..cd2a0c3 100644 --- a/src/v1/data/Towns.js +++ b/src/v1/data/Towns.js @@ -4,6 +4,10 @@ exports.getTowns = function ( name, minPopulation = 1, maxPopulation = 1000000000, + provinceId, + province, + districtId, + district, offset = 0, limit, fields, @@ -49,6 +53,74 @@ exports.getTowns = function ( }); } + if (provinceId || province) { + if (provinceId && province) { + throw { + status: 404, + message: + 'You can only use one of the provinceId or province parameters.', + }; + } + + if (provinceId) { + if (!isFinite(provinceId)) { + throw { + status: 404, + message: + 'Invalid province ID. The provinceId parameter must be a number.', + }; + } + + towns = towns.filter((item) => item.provinceId === +provinceId); + } + + if (province) { + const provinceAlt = + province.charAt(0).toLocaleUpperCase('TR') + + province.slice(1).toLocaleLowerCase('tr'); + + towns = towns.filter( + (item) => + item.province.includes(province) || + item.province.includes(provinceAlt), + ); + } + } + + if (districtId || district) { + if (districtId && district) { + throw { + status: 404, + message: + 'You can only use one of the districtId or district parameters.', + }; + } + + if (districtId) { + if (!isFinite(districtId)) { + throw { + status: 404, + message: + 'Invalid district ID. The districtId parameter must be a number.', + }; + } + + towns = towns.filter((item) => item.districtId === +districtId); + } + + if (district) { + const districtAlt = + district.charAt(0).toLocaleUpperCase('TR') + + district.slice(1).toLocaleLowerCase('tr'); + + towns = towns.filter( + (item) => + item.district.includes(district) || + item.district.includes(districtAlt), + ); + } + } + if (sort) { const sortArray = sort.split(',').reverse(); diff --git a/src/v1/data/Villages.js b/src/v1/data/Villages.js index 9a1e996..b06de24 100644 --- a/src/v1/data/Villages.js +++ b/src/v1/data/Villages.js @@ -4,6 +4,10 @@ exports.getVillages = function ( name, minPopulation = 1, maxPopulation = 1000000000, + provinceId, + province, + districtId, + district, offset = 0, limit, fields, @@ -49,6 +53,74 @@ exports.getVillages = function ( }); } + if (provinceId || province) { + if (provinceId && province) { + throw { + status: 404, + message: + 'You can only use one of the provinceId or province parameters.', + }; + } + + if (provinceId) { + if (!isFinite(provinceId)) { + throw { + status: 404, + message: + 'Invalid province ID. The provinceId parameter must be a number.', + }; + } + + villages = villages.filter((item) => item.provinceId === +provinceId); + } + + if (province) { + const provinceAlt = + province.charAt(0).toLocaleUpperCase('TR') + + province.slice(1).toLocaleLowerCase('tr'); + + villages = villages.filter( + (item) => + item.province.includes(province) || + item.province.includes(provinceAlt), + ); + } + } + + if (districtId || district) { + if (districtId && district) { + throw { + status: 404, + message: + 'You can only use one of the districtId or district parameters.', + }; + } + + if (districtId) { + if (!isFinite(districtId)) { + throw { + status: 404, + message: + 'Invalid district ID. The districtId parameter must be a number.', + }; + } + + villages = villages.filter((item) => item.districtId === +districtId); + } + + if (district) { + const districtAlt = + district.charAt(0).toLocaleUpperCase('TR') + + district.slice(1).toLocaleLowerCase('tr'); + + villages = villages.filter( + (item) => + item.district.includes(district) || + item.district.includes(districtAlt), + ); + } + } + if (sort) { const sortArray = sort.split(',').reverse();