From 6e3dc0590fbfbac710edbf2c96893912777bc59b Mon Sep 17 00:00:00 2001 From: adityagarg06 Date: Wed, 18 Oct 2023 21:04:56 +0530 Subject: [PATCH] refactor promises using async/await in apikey --- server/controllers/user.controller/apiKey.js | 125 ++++++++----------- 1 file changed, 52 insertions(+), 73 deletions(-) diff --git a/server/controllers/user.controller/apiKey.js b/server/controllers/user.controller/apiKey.js index 8ac26e2b0f..1fec4e6872 100644 --- a/server/controllers/user.controller/apiKey.js +++ b/server/controllers/user.controller/apiKey.js @@ -2,6 +2,10 @@ import crypto from 'crypto'; import User from '../../models/user'; +function sendFailure(res, code, error) { + res.status(code).json({ error }); +} + /** * Generates a unique token to be used as a Personal Access Token * @returns Promise A promise that resolves to the token, or an Error @@ -18,93 +22,68 @@ function generateApiKey() { }); } -export function createApiKey(req, res) { - return new Promise((resolve, reject) => { - function sendFailure(code, error) { - res.status(code).json({ error }); - resolve(); - } - - User.findById(req.user.id, async (err, user) => { - if (!user) { - sendFailure(404, 'User not found'); - return; - } +export async function createApiKey(req, res) { + try { + const user = await User.findById(req.user.id); - if (!req.body.label) { - sendFailure( - 400, - "Expected field 'label' was not present in request body" - ); - return; - } + if (!user) { + sendFailure(res, 404, 'User not found'); + return; + } - const keyToBeHashed = await generateApiKey(); + if (!req.body.label) { + sendFailure( + res, + 400, + "Expected field 'label' was not present in the request body" + ); + return; + } - const addedApiKeyIndex = user.apiKeys.push({ - label: req.body.label, - hashedKey: keyToBeHashed - }); + const keyToBeHashed = await generateApiKey(); - user.save((saveErr) => { - if (saveErr) { - sendFailure(500, saveErr); - return; - } + const addedApiKeyIndex = user.apiKeys.push({ + label: req.body.label, + hashedKey: keyToBeHashed + }); - const apiKeys = user.apiKeys.map((apiKey, index) => { - const fields = apiKey.toObject(); - const shouldIncludeToken = index === addedApiKeyIndex - 1; + await user.save(); - return shouldIncludeToken - ? { ...fields, token: keyToBeHashed } - : fields; - }); + const apiKeys = user.apiKeys.map((apiKey, index) => { + const fields = apiKey.toObject(); + const shouldIncludeToken = index === addedApiKeyIndex - 1; - res.json({ apiKeys }); - resolve(); - }); + return shouldIncludeToken ? { ...fields, token: keyToBeHashed } : fields; }); - }); + + res.json({ apiKeys }); + } catch (error) { + sendFailure(res, 500, error); + } } -export function removeApiKey(req, res) { - return new Promise((resolve, reject) => { - function sendFailure(code, error) { - res.status(code).json({ error }); - resolve(); - } +export async function removeApiKey(req, res) { + try { + const user = await User.findById(req.user.id); - User.findById(req.user.id, (err, user) => { - if (err) { - sendFailure(500, err); - return; - } + if (!user) { + sendFailure(res, 404, 'User not found'); + return; + } - if (!user) { - sendFailure(404, 'User not found'); - return; - } + const keyToDelete = user.apiKeys.find((key) => key.id === req.params.keyId); - const keyToDelete = user.apiKeys.find( - (key) => key.id === req.params.keyId - ); - if (!keyToDelete) { - sendFailure(404, 'Key does not exist for user'); - return; - } + if (!keyToDelete) { + sendFailure(res, 404, 'Key does not exist for user'); + return; + } - user.apiKeys.pull({ _id: req.params.keyId }); + user.apiKeys.pull({ _id: req.params.keyId }); - user.save((saveErr) => { - if (saveErr) { - sendFailure(500, saveErr); - return; - } + await user.save(); - res.status(200).json({ apiKeys: user.apiKeys }); - resolve(); - }); - }); - }); + res.status(200).json({ apiKeys: user.apiKeys }); + } catch (error) { + sendFailure(res, 500, error); + } }