From bb5eef73d49b931b994b2fae8b7690080e31f353 Mon Sep 17 00:00:00 2001 From: Peter Morgan Date: Sat, 28 Dec 2019 21:58:23 -0700 Subject: [PATCH] Refactored /org/users/:name route and getOrganizationMembers() --- routes/api/v2.js | 61 ++++++++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/routes/api/v2.js b/routes/api/v2.js index a37f30c..b67717d 100644 --- a/routes/api/v2.js +++ b/routes/api/v2.js @@ -75,7 +75,7 @@ const queryGitHubAPI = async requestURL => { const fetchAllWithPagination = async (apiPath, page, lst) => { try { const req = await queryGithubAPIRaw(`${apiPath}?page=${page}${API_PAGINATION}`); - if (req) { + if (req.body.hasOwnProperty("length")) { const list = lst.concat(req.body); if(page < API_MAX_PAGES && req.length === API_PAGINATION_SIZE) { const redo = await fetchAllWithPagination(apiPath, page + 1, list); @@ -165,29 +165,21 @@ const queryFriends = async user => { * * @param {*} orgName */ -function getOrganizationMembers(orgName) -{ +const getOrganizationMembers = async orgName => { const cacheHit = cache.get("/org/users/" + orgName); - return new Promise((resolve, reject)=> - { - if(cacheHit == null) - { - fetchAllWithPagination(API_ORGS_PATH + orgName + "/members", 1, []).then((mems)=> - { - var minimized = minimizeFriends(mems); - resolve(minimized); - cache.put("/org/users/" + orgName, minimized); - }).catch((err)=> - { - console.log(err) - }) - } - else - { - console.log("Org members cache hit"); - resolve(cacheHit); - } - }); + if (cacheHit){ + console.log("Org members cache hit"); + return cacheHit; + } + + try { + const members = await fetchAllWithPagination(API_ORGS_PATH + orgName + "/members", 1, []); + const membersMin = minimizeFriends(members); + cache.put("/org/users/" + orgName, membersMin); + return membersMin; + } catch (error) { + console.log(error); + } } @@ -258,22 +250,19 @@ routes.get("/friends/:name", async (req, res)=> { -routes.get("/org/users/:name", (request, result)=> -{ - getOrganizationMembers(request.params.name).then(friends=> - { - result.json(friends) - .end(); - }).catch(error=> - { - result.status(500) - .json({error: 'API error fetching friends'}) - .end(); - }); +routes.get("/org/users/:name", async (request, res) => { + try { + const orgMembers = await getOrganizationMembers(request.params.name); + res.json(orgMembers).end(); + } catch (error) { + res + .status(500) + .json({error: 'API error fetching friends'}) + .end(); + } }); - routes.get("/repositories/:name", (request, result)=> { queryRepositories(request.params.name, API_USER_PATH).then(repos=>