mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2026-07-04 19:21:53 +00:00
d656857509
Co-authored-by: Guilherme Rauen <g.rauen@cognigy.com>
134 lines
3.7 KiB
JavaScript
134 lines
3.7 KiB
JavaScript
const router = require('express').Router();
|
|
const sysError = require('../error');
|
|
const AccountLimits = require('../../models/account-limits');
|
|
const ServiceProviderLimits = require('../../models/service-provider-limits');
|
|
const {parseAccountSid, parseServiceProviderSid} = require('./utils');
|
|
const {promisePool} = require('../../db');
|
|
const sqlDeleteSPLimits = `
|
|
DELETE FROM service_provider_limits
|
|
WHERE service_provider_sid = ?
|
|
`;
|
|
const sqlDeleteSPLimitsByCategory = `
|
|
DELETE FROM service_provider_limits
|
|
WHERE service_provider_sid = ?
|
|
AND category = ?
|
|
`;
|
|
const sqlDeleteAccountLimits = `
|
|
DELETE FROM account_limits
|
|
WHERE account_sid = ?
|
|
`;
|
|
const sqlDeleteAccountLimitsByCategory = `
|
|
DELETE FROM account_limits
|
|
WHERE account_sid = ?
|
|
AND category = ?
|
|
`;
|
|
|
|
router.post('/', async(req, res) => {
|
|
const logger = req.app.locals.logger;
|
|
const {
|
|
category,
|
|
quantity
|
|
} = req.body;
|
|
|
|
try {
|
|
let service_provider_sid;
|
|
const account_sid = parseAccountSid(req);
|
|
if (!account_sid) {
|
|
if (!req.user.hasServiceProviderAuth && !req.user.hasAdminAuth) {
|
|
logger.error('POST /SpeechCredentials invalid credentials');
|
|
return res.sendStatus(403);
|
|
}
|
|
service_provider_sid = parseServiceProviderSid(req);
|
|
}
|
|
|
|
let uuid;
|
|
if (account_sid) {
|
|
const existing = (await AccountLimits.retrieve(account_sid) || [])
|
|
.find((el) => el.category === category);
|
|
if (existing) {
|
|
uuid = existing.account_limits_sid;
|
|
await AccountLimits.update(uuid, {category, quantity});
|
|
}
|
|
else {
|
|
uuid = await AccountLimits.make({
|
|
account_sid,
|
|
category,
|
|
quantity
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
const existing = (await ServiceProviderLimits.retrieve(service_provider_sid) || [])
|
|
.find((el) => el.category === category);
|
|
if (existing) {
|
|
uuid = existing.service_provider_limits_sid;
|
|
await ServiceProviderLimits.update(uuid, {category, quantity});
|
|
}
|
|
else {
|
|
uuid = await ServiceProviderLimits.make({
|
|
service_provider_sid,
|
|
category,
|
|
quantity
|
|
});
|
|
}
|
|
}
|
|
res.status(201).json({sid: uuid});
|
|
} catch (err) {
|
|
sysError(logger, res, err);
|
|
}
|
|
});
|
|
|
|
/**
|
|
* retrieve all limits for an account or service provider
|
|
*/
|
|
router.get('/', async(req, res) => {
|
|
let service_provider_sid;
|
|
const logger = req.app.locals.logger;
|
|
|
|
try {
|
|
const account_sid = parseAccountSid(req);
|
|
if (!account_sid) service_provider_sid = parseServiceProviderSid(req);
|
|
const limits = account_sid ?
|
|
await AccountLimits.retrieve(account_sid) :
|
|
await ServiceProviderLimits.retrieve(service_provider_sid);
|
|
|
|
if (req.query?.category) {
|
|
return res.status(200).json(limits.filter((el) => el.category === req.query.category));
|
|
}
|
|
res.status(200).json(limits);
|
|
} catch (err) {
|
|
sysError(logger, res, err);
|
|
}
|
|
});
|
|
|
|
router.delete('/', async(req, res) => {
|
|
const logger = req.app.locals.logger;
|
|
|
|
try {
|
|
const account_sid = parseAccountSid(req);
|
|
const {category} = req.query;
|
|
const service_provider_sid = parseServiceProviderSid(req);
|
|
if (account_sid) {
|
|
if (category) {
|
|
await promisePool.execute(sqlDeleteAccountLimitsByCategory, [account_sid, category]);
|
|
}
|
|
else {
|
|
await promisePool.execute(sqlDeleteAccountLimits, [account_sid]);
|
|
}
|
|
}
|
|
else {
|
|
if (category) {
|
|
await promisePool.execute(sqlDeleteSPLimitsByCategory, [service_provider_sid, category]);
|
|
}
|
|
else {
|
|
await promisePool.execute(sqlDeleteSPLimits, [service_provider_sid]);
|
|
}
|
|
}
|
|
res.status(204).end();
|
|
} catch (err) {
|
|
sysError(logger, res, err);
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|