From 446cc57e09915949bbf3fab9d761a145967dbe61 Mon Sep 17 00:00:00 2001 From: Dave Horton Date: Fri, 27 Aug 2021 13:42:09 -0400 Subject: [PATCH] when deleting a service provider, delete the associated speech_credentials and voip_carriers --- lib/routes/api/service-providers.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/routes/api/service-providers.js b/lib/routes/api/service-providers.js index f9c611d..be38782 100644 --- a/lib/routes/api/service-providers.js +++ b/lib/routes/api/service-providers.js @@ -1,4 +1,5 @@ const router = require('express').Router(); +const {promisePool} = require('../../db'); const {DbErrorUnprocessableRequest} = require('../../utils/errors'); const Webhook = require('../../models/webhook'); const ServiceProvider = require('../../models/service-provider'); @@ -12,11 +13,29 @@ const decorate = require('./decorate'); const preconditions = { 'delete': noActiveAccounts }; +const sqlDeleteSipGateways = `DELETE from sip_gateways +WHERE voip_carrier_sid IN ( + SELECT voip_carrier_sid + FROM voip_carriers + WHERE service_provider_sid = ? +)`; +const sqlDeleteSmppGateways = `DELETE from smpp_gateways +WHERE voip_carrier_sid IN ( + SELECT voip_carrier_sid + FROM voip_carriers + WHERE service_provider_sid = ? +)`; /* can not delete a service provider if it has any active accounts */ async function noActiveAccounts(req, sid) { const activeAccounts = await ServiceProvider.getForeignKeyReferences('accounts.service_provider_sid', sid); if (activeAccounts > 0) throw new DbErrorUnprocessableRequest('cannot delete service provider with active accounts'); + + /* ok we can delete -- no active accounts. remove carriers and speech credentials */ + await promisePool.execute('DELETE from speech_credentials WHERE service_provider_sid = ?', [sid]); + await promisePool.query(sqlDeleteSipGateways, [sid]); + await promisePool.query(sqlDeleteSmppGateways, [sid]); + await promisePool.query('DELETE from voip_carriers WHERE service_provider_sid = ?', [sid]); } decorate(router, ServiceProvider, ['delete'], preconditions);