diff --git a/app/src/api/controllers/buildingController.ts b/app/src/api/controllers/buildingController.ts index b729329e..3993b619 100644 --- a/app/src/api/controllers/buildingController.ts +++ b/app/src/api/controllers/buildingController.ts @@ -1,5 +1,6 @@ import express from 'express'; +import { parseIntParam } from '../helpers'; import asyncController from '../routes/asyncController'; import * as buildingService from '../services/building'; import * as userService from '../services/user'; @@ -34,7 +35,7 @@ const getBuildingsByReference = asyncController(async (req: express.Request, res // GET individual building, POST building updates const getBuildingById = asyncController(async (req: express.Request, res: express.Response) => { - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); try { const result = await buildingService.getBuildingById(buildingId); @@ -62,7 +63,7 @@ const updateBuildingById = asyncController(async (req: express.Request, res: exp }); async function updateBuilding(req: express.Request, res: express.Response, userId: string) { - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); const buildingUpdate = req.body; @@ -83,7 +84,7 @@ async function updateBuilding(req: express.Request, res: express.Response, userI // GET building UPRNs const getBuildingUPRNsById = asyncController(async (req: express.Request, res: express.Response) => { - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); try { const result = await buildingService.getBuildingUPRNsById(buildingId); @@ -104,7 +105,7 @@ const getBuildingLikeById = asyncController(async (req: express.Request, res: ex return res.send({ like: false }); // not logged in, so cannot have liked } - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); try { const like = await buildingService.getBuildingLikeById(buildingId, req.session.user_id); @@ -117,7 +118,7 @@ const getBuildingLikeById = asyncController(async (req: express.Request, res: ex }); const getBuildingEditHistoryById = asyncController(async (req: express.Request, res: express.Response) => { - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); try { const editHistory = await buildingService.getBuildingEditHistory(buildingId); @@ -133,7 +134,7 @@ const updateBuildingLikeById = asyncController(async (req: express.Request, res: return res.send({ error: 'Must be logged in' }); } - const buildingId = parseBuildingId(req.params.building_id); + const buildingId = parseIntParam(req.params.building_id); const { like } = req.body; try { @@ -162,14 +163,6 @@ const getLatestRevisionId = asyncController(async (req: express.Request, res: ex } }); -function parseBuildingId(building_id: string) { - const result = parseInt(building_id, 10); - if(isNaN(result)) { - throw new Error('Invalid building ID format'); - } - return result; -} - export default { getBuildingsByLocation, getBuildingsByReference, diff --git a/app/src/api/controllers/extractController.ts b/app/src/api/controllers/extractController.ts index 183c23d8..369459be 100644 --- a/app/src/api/controllers/extractController.ts +++ b/app/src/api/controllers/extractController.ts @@ -1,5 +1,6 @@ import express from 'express'; +import { parseIntParam } from '../helpers'; import asyncController from '../routes/asyncController'; import * as dataExtractService from '../services/dataExtract'; @@ -15,7 +16,7 @@ const getAllDataExtracts = asyncController(async function(req: express.Request, const getDataExtract = asyncController(async function(req: express.Request, res: express.Response) { try { - const extractId = req.params.extract_id; + const extractId = parseIntParam(req.params.extract_id); const extract = await dataExtractService.getDataExtractById(extractId); res.send({ extract: extract }); } catch (err) { diff --git a/app/src/api/helpers.ts b/app/src/api/helpers.ts new file mode 100644 index 00000000..4028248c --- /dev/null +++ b/app/src/api/helpers.ts @@ -0,0 +1,9 @@ +import { strictParseInt } from '../parse'; + +export function parseIntParam(param: string) { + const result = strictParseInt(param); + if (isNaN(result)) { + throw new Error('Invalid parameter format: not an integer'); + } + return result; +}