From 1b41349239af58f1c2b0a9ed74e87af48df42d93 Mon Sep 17 00:00:00 2001 From: Quan HL Date: Tue, 14 Nov 2023 15:11:26 +0700 Subject: [PATCH 1/2] fix create update lcr generate too much request --- lib/routes/api/lcrs.js | 83 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/lib/routes/api/lcrs.js b/lib/routes/api/lcrs.js index bf300faa..55ac4a2f 100644 --- a/lib/routes/api/lcrs.js +++ b/lib/routes/api/lcrs.js @@ -100,6 +100,89 @@ const preconditions = { decorate(router, Lcr, ['add', 'update', 'delete'], preconditions); +const validateLcrBatchAdd = async(lcr_sid, body, lookupCarrierBySid) => { + for (const lcr_route of body) { + lcr_route.lcr_sid = lcr_sid; + if (!lcr_route.lcr_carrier_set_entries || lcr_route.lcr_carrier_set_entries.length === 0) { + throw new DbErrorBadRequest('Lcr Route batch process require lcr_carrier_set_entries'); + } + for (const entry of lcr_route.lcr_carrier_set_entries) { + // check voip_carrier_sid is exist + if (!entry.voip_carrier_sid) { + throw new DbErrorBadRequest('One of lcr_carrier_set_entries is missing voip_carrier_sid'); + } + const carrier = await lookupCarrierBySid(entry.voip_carrier_sid); + if (!carrier) { + throw new DbErrorBadRequest('unknown voip_carrier_sid'); + } + } + } +}; + + +const addNewLcrRoute = async(lcr_route) => { + const lcr_sid = lcr_route.lcr_sid; + const lcr_carrier_set_entries = lcr_route.lcr_carrier_set_entries; + delete lcr_route.lcr_carrier_set_entries; + const lcr_route_sid = await LcrRoutes.make(lcr_route); + for (const entry of lcr_carrier_set_entries) { + entry.lcr_route_sid = lcr_route_sid; + const lcr_carrier_set_entry_sid = await LcrCarrierSetEntry.make(entry); + if (lcr_route.priority === 9999) { + // this is default lcr set entry + const [lcr] = await Lcr.retrieve(lcr_sid); + if (lcr) { + lcr.default_carrier_set_entry_sid = lcr_carrier_set_entry_sid; + delete lcr.lcr_sid; + await Lcr.update(lcr_sid, lcr); + } + } + } +}; + +router.put('/:sid/createRoutes', async(req, res) => { + const {logger, lookupCarrierBySid} = req.app.locals; + try { + const body = req.body; + await validateLcrBatchAdd(req.params.sid, body, lookupCarrierBySid); + for (const lcr_route of body) { + await addNewLcrRoute(lcr_route, lookupCarrierBySid); + } + res.sendStatus(204); + + } catch (err) { + sysError(logger, res, err); + } +}); + +router.put('/:sid/updateRoutes', async(req, res) => { + const {logger, lookupCarrierBySid} = req.app.locals; + try { + const body = req.body; + await validateLcrBatchAdd(req.params.sid, body, lookupCarrierBySid); + for (const lcr_route of body) { + if (lcr_route.lcr_route_sid) { + const lcr_route_sid = lcr_route.lcr_route_sid; + delete lcr_route.lcr_route_sid; + const lcr_carrier_set_entries = lcr_route.lcr_carrier_set_entries; + delete lcr_route.lcr_carrier_set_entries; + await LcrRoutes.update(lcr_route_sid, lcr_route); + for (const entry of lcr_carrier_set_entries) { + const lcr_carrier_set_entry_sid = entry.lcr_carrier_set_entry_sid; + delete entry.lcr_carrier_set_entry_sid; + await LcrCarrierSetEntry.update(lcr_carrier_set_entry_sid, entry); + } + } else { + // Route is not available yet, let create it now + await addNewLcrRoute(lcr_route, lookupCarrierBySid); + } + } + res.sendStatus(204); + } catch (err) { + sysError(logger, res, err); + } +}); + router.get('/', async(req, res) => { const logger = req.app.locals.logger; try { From 76f0766bc0bf54cfef2f3e86ca8ae0113ee20f67 Mon Sep 17 00:00:00 2001 From: Quan HL Date: Tue, 14 Nov 2023 15:57:09 +0700 Subject: [PATCH 2/2] wip --- lib/routes/api/lcrs.js | 8 +++-- lib/swagger/swagger.yaml | 76 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/lib/routes/api/lcrs.js b/lib/routes/api/lcrs.js index 55ac4a2f..d2773082 100644 --- a/lib/routes/api/lcrs.js +++ b/lib/routes/api/lcrs.js @@ -140,7 +140,9 @@ const addNewLcrRoute = async(lcr_route) => { } }; -router.put('/:sid/createRoutes', async(req, res) => { +router.post('/:sid/Routes', async(req, res) => { + const results = await Lcr.retrieve(req.params.sid); + if (results.length === 0) return res.sendStatus(404); const {logger, lookupCarrierBySid} = req.app.locals; try { const body = req.body; @@ -155,7 +157,9 @@ router.put('/:sid/createRoutes', async(req, res) => { } }); -router.put('/:sid/updateRoutes', async(req, res) => { +router.put('/:sid/Routes', async(req, res) => { + const results = await Lcr.retrieve(req.params.sid); + if (results.length === 0) return res.sendStatus(404); const {logger, lookupCarrierBySid} = req.app.locals; try { const body = req.body; diff --git a/lib/swagger/swagger.yaml b/lib/swagger/swagger.yaml index 43e88d1e..f6ac37c1 100644 --- a/lib/swagger/swagger.yaml +++ b/lib/swagger/swagger.yaml @@ -4415,6 +4415,69 @@ paths: application/json: schema: $ref: '#/components/schemas/GeneralError' + /Lcrs/{LcrSid}/Routes: + parameters: + - name: LcrSid + in: path + required: true + style: simple + explode: false + schema: + type: string + post: + tags: + - Lcrs + summary: Create least cost routing routes and carrier set entries + operationId: createLeastCostRoutingRoutesAndCarrierEntries + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LcrRoutes' + responses: + 204: + description: least cost routing routes and carrier set entries created + 400: + description: bad request + content: + application/json: + schema: + $ref: '#/components/schemas/GeneralError' + 404: + description: least cost routing not found + 500: + description: system error + content: + application/json: + schema: + $ref: '#/components/schemas/GeneralError' + put: + tags: + - Lcrs + summary: update least cost routing routes and carrier set entries + operationId: updateLeastCostRoutingRoutesAndCarrierEntries + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/LcrRoutes' + responses: + 204: + description: least cost routing ruoutes and carrier entries updated + 400: + description: bad request + content: + application/json: + schema: + $ref: '#/components/schemas/GeneralError' + 404: + description: least cost routing not found + 500: + description: system error + content: + application/json: + schema: + $ref: '#/components/schemas/GeneralError' /LcrRoutes: post: tags: @@ -5832,6 +5895,19 @@ components: - lcr_route_sid - voip_carrier_sid - priority + LcrRouteAndCarrierEntries: + allOf: + - $ref: '#/components/schemas/LcrRoute' + - type: object + properties: + lcr_carrier_set_entries: + type: array + items: + $ref: '#/components/schemas/LcrCarrierSetEntry' + LcrRoutes: + type: array + items: + $ref: '#/components/schemas/LcrRouteAndCarrierEntries' GoogleCustomVoice: type: object properties: