diff --git a/lib/models/user.js b/lib/models/user.js index e4a58f8..f748dc3 100644 --- a/lib/models/user.js +++ b/lib/models/user.js @@ -1,13 +1,45 @@ const Model = require('./model'); const {promisePool} = require('../db'); -const sqlAccount = 'SELECT * FROM users WHERE account_sid = ?'; -const sqlSP = 'SELECT * FROM users WHERE service_provider_sid = ?'; +const sqlAll = ` +SELECT u.user_sid, u.name, u.email, u.account_sid, u.service_provider_sid, u.is_active, +u.force_change, u.phone, u.pending_email, u.provider, u.provider_userid, +u.email_activation_code, u.email_validated, +sp.name as service_provider_name, acc.name as account_name +FROM users u +LEFT JOIN service_providers as sp ON u.service_provider_sid = sp.service_provider_sid +LEFT JOIN accounts acc ON u.account_sid = acc.account_sid +`; +const sqlAccount = ` +SELECT u.user_sid, u.name, u.email, u.account_sid, u.service_provider_sid, u.is_active, +u.force_change, u.phone, u.pending_email, u.provider, u.provider_userid, +u.email_activation_code, u.email_validated, +sp.name as service_provider_name, acc.name as account_name +FROM users u +LEFT JOIN service_providers as sp ON u.service_provider_sid = sp.service_provider_sid +LEFT JOIN accounts acc ON u.account_sid = acc.account_sid +WHERE u.account_sid = ? +`; +const sqlSP = ` +SELECT u.user_sid, u.name, u.email, u.account_sid, u.service_provider_sid, u.is_active, +u.force_change, u.phone, u.pending_email, u.provider, u.provider_userid, +u.email_activation_code, u.email_validated, +sp.name as service_provider_name, acc.name as account_name +FROM users u +LEFT JOIN service_providers as sp ON u.service_provider_sid = sp.service_provider_sid +LEFT JOIN accounts acc ON u.account_sid = acc.account_sid +WHERE u.service_provider_sid = ? +`; class User extends Model { constructor() { super(); } + static async retrieveAll() { + const [rows] = await promisePool.query(sqlAll); + return rows; + } + static async retrieveAllForAccount(account_sid) { const [rows] = await promisePool.query(sqlAccount, [account_sid]); return rows; diff --git a/lib/routes/api/users.js b/lib/routes/api/users.js index c38eb3d..9a59250 100644 --- a/lib/routes/api/users.js +++ b/lib/routes/api/users.js @@ -72,10 +72,10 @@ router.get('/', async(req, res) => { results = await User.retrieveAll(); } else if (decodedJwt.scope === 'account') { - results = await User.retrieveAllForAccount(decodedJwt.account_sid); + results = await User.retrieveAllForAccount(decodedJwt.account_sid, true); } else if (decodedJwt.scope === 'service_provider') { - results = await User.retrieveAllForServiceProvider(decodedJwt.service_provider_sid); + results = await User.retrieveAllForServiceProvider(decodedJwt.service_provider_sid, true); } else { throw new DbErrorBadRequest(`invalid scope: ${decodedJwt.scope}`); @@ -84,7 +84,17 @@ router.get('/', async(req, res) => { if (results.length === 0) throw new Error('failure retrieving users list'); usersList = results.map((user) => { - const {user_sid, name, email, force_change, is_active, account_sid, service_provider_sid} = user; + const { + user_sid, + name, + email, + force_change, + is_active, + account_sid, + service_provider_sid, + account_name, + service_provider_name + } = user; let scope; if (account_sid && service_provider_sid) { scope = 'account'; @@ -94,16 +104,19 @@ router.get('/', async(req, res) => { scope = 'admin'; } - return { + const obj = { user_sid, name, email, scope, force_change, is_active, - account_sid, - service_provider_sid + ...(account_sid && {account_sid}), + ...(account_name && {account_name}), + ...(service_provider_sid && {service_provider_sid}), + ...(service_provider_name && {service_provider_name}) }; + return obj; }); } catch (err) { sysError(logger, res, err);