From 72b539f35bef2b45057a8fb4b372eae8d5f8a169 Mon Sep 17 00:00:00 2001 From: Esteban Dalel R Date: Thu, 26 Oct 2023 17:36:56 -0500 Subject: [PATCH] Watermelon using app token (team tool) (#326) * Test using the installation id * Add more logging * Fix text to be clearer * Extract pr labeling * Fix missing params * Remove logging * Move log detection * Restore order for labeling * Add response with tracking * Simplify code depth * Add editing comment to triggers * Remove unnecessary code * Create createTeamAndMatchUser.ts * Add team matching * Remove github PAT fetching * Test two branch option * Make services suggest login * Remove unused code * Remove duplicate request object prop destructuring * Fix TS error * Fix TS error --------- Co-authored-by: baristaGeek --- app/api/actions/github/route.ts | 44 ++-- app/api/extension/getContext/route.ts | 14 +- utils/actions/getAllServices.ts | 321 ++++++++++++++++++-------- 3 files changed, 254 insertions(+), 125 deletions(-) diff --git a/app/api/actions/github/route.ts b/app/api/actions/github/route.ts index f0b95120..995b248f 100644 --- a/app/api/actions/github/route.ts +++ b/app/api/actions/github/route.ts @@ -281,6 +281,7 @@ export async function POST(request: Request) { .slice(0, 6); const serviceAnswers = await getAllServices({ userLogin, + installationId, repo, owner, randomWords, @@ -307,27 +308,30 @@ export async function POST(request: Request) { }); } if (!watermelon_user) { - { - // Post a new comment if no existing comment was found - await octokit - .request( - "POST /repos/{owner}/{repo}/issues/{issue_number}/comments", - { - owner, - issue_number: number, - repo, - body: "[Please login to Watermelon to see the results](https://app.watermelontools.com/)", - } - ) - .then((response) => { - console.info("post comment", response.data); - }) - .catch((error) => { - return console.error("posting comment error", error); - }); - return NextResponse.json("User not registered"); - } + // Post a new comment if no existing comment was found + await octokit + .request( + "POST /repos/{owner}/{repo}/issues/{issue_number}/comments", + { + owner, + issue_number: number, + repo, + body: "[Please login to GitHub in Watermelon to see the results](https://app.watermelontools.com/)", + } + ) + .then((response) => { + console.info("post comment", response.data); + }) + .catch((error) => { + return console.error("posting comment error", error); + }); + return NextResponse.json("User not registered"); } + const team = await createTeamAndMatchUser({ + name: organization.login, + id: organization.id, + watermelon_user, + }); const team = await createTeamAndMatchUser({ name: organization.login, diff --git a/app/api/extension/getContext/route.ts b/app/api/extension/getContext/route.ts index 5c6db26b..f7a313a2 100644 --- a/app/api/extension/getContext/route.ts +++ b/app/api/extension/getContext/route.ts @@ -79,13 +79,13 @@ export async function POST(request: Request) { url: request.url, email: req.email, data: { - github: github?.fullData || github?.error, - jira: jira?.fullData || jira?.error, - confluence: confluence?.fullData || confluence?.error, - slack: slack?.fullData || slack?.error, - notion: notion?.fullData || notion?.error, - linear: linear?.fullData || linear?.error, - asana: asana?.fullData || asana?.error, + github: github?.error || github?.fullData, + jira: jira?.error || jira?.fullData, + confluence: confluence?.error || confluence?.fullData, + slack: slack?.error || slack?.fullData, + notion: notion?.error || notion?.fullData, + linear: linear?.error || linear?.fullData, + asana: asana?.error || asana?.fullData, watermelonSummary: standardWatermelonAISummary, }, }); diff --git a/utils/actions/getAllServices.ts b/utils/actions/getAllServices.ts index 516d476a..5d78aa07 100644 --- a/utils/actions/getAllServices.ts +++ b/utils/actions/getAllServices.ts @@ -31,108 +31,233 @@ export default async function getAllServices({ let query = ""; if (email) { query = `EXEC dbo.get_all_user_tokens @watermelon_user='${email}'`; - } - if (userLogin) { - query = `EXEC dbo.get_all_tokens_from_gh_username @github_user='${userLogin}'`; - } + try { + let wmUserData = await executeRequest(query); + const { + github_token, + jira_token, + jira_refresh_token, + confluence_token, + confluence_refresh_token, + confluence_id, + cloudId, + slack_token, + notion_token, + linear_token, + asana_token, + asana_workspace, + user_email, + AISummary, + JiraTickets, + GitHubPRs, + SlackMessages, + NotionPages, + LinearTickets, + ConfluencePages, + AsanaTasks, + watermelon_user, + } = wmUserData; + const [github, jira, confluence, slack, notion, linear, asana] = + await Promise.all([ + getGitHub({ + repo, + owner, + github_token, + randomWords, + amount: GitHubPRs, + }), + getJira({ + user: user_email, + token: jira_token, + refresh_token: jira_refresh_token, + randomWords, + amount: JiraTickets, + }), + getConfluence({ + token: confluence_token, + refresh_token: confluence_refresh_token, + cloudId: confluence_id, + user: user_email, + randomWords, + amount: ConfluencePages, + }), + getSlack({ + slack_token, + searchString: randomWords.join(" "), + amount: SlackMessages, + }), + getNotion({ + notion_token, + randomWords, + amount: NotionPages, + }), + getLinear({ + linear_token, + randomWords, + amount: LinearTickets, + }), + getAsana({ + access_token: asana_token, + user: user_email, + randomWords, + workspace: asana_workspace, + amount: AsanaTasks, + }), + ]); - let wmUserData = await executeRequest(query); - const { - github_token, - jira_token, - jira_refresh_token, - confluence_token, - confluence_refresh_token, - confluence_id, - cloudId, - slack_token, - notion_token, - linear_token, - asana_token, - asana_workspace, - user_email, - AISummary, - JiraTickets, - GitHubPRs, - SlackMessages, - NotionPages, - LinearTickets, - ConfluencePages, - AsanaTasks, - watermelon_user, - } = wmUserData; - try { - wmUserData = await executeRequest(query); - } catch (error) { - console.error( - "An error occurred while getting user tokens:", - error.message - ); - failedPosthogTracking({ - url: url, - error: error.message, - email: email, - }); - return { error: error.message }; - } - const [github, jira, confluence, slack, notion, linear, asana] = - await Promise.all([ - getGitHub({ - repo, - owner, + return { + github, + jira, + confluence, + slack, + notion, + linear, + asana, + watermelon_user, + AISummary, + user_email, + }; + } catch (error) { + console.error( + "An error occurred while getting user tokens:", + error.message + ); + failedPosthogTracking({ + url: url, + error: error.message, + email: email, + }); + return { error: error.message }; + } + } else { + query = `EXEC dbo.get_all_tokens_from_gh_username @github_user='${userLogin}'`; + try { + let wmUserData = await executeRequest(query); + const { github_token, - randomWords, - amount: GitHubPRs, - }), - getJira({ - user: user_email, - token: jira_token, - refresh_token: jira_refresh_token, - randomWords, - amount: JiraTickets, - }), - getConfluence({ - token: confluence_token, - refresh_token: confluence_refresh_token, - cloudId: confluence_id, - user: user_email, - randomWords, - amount: ConfluencePages, - }), - getSlack({ + jira_token, + jira_refresh_token, + confluence_token, + confluence_refresh_token, + confluence_id, + cloudId, slack_token, - searchString: randomWords.join(" "), - amount: SlackMessages, - }), - getNotion({ notion_token, - randomWords, - amount: NotionPages, - }), - getLinear({ linear_token, - randomWords, - amount: LinearTickets, - }), - getAsana({ - access_token: asana_token, - user: user_email, - randomWords, - workspace: asana_workspace, - amount: AsanaTasks, - }), - ]); + asana_token, + asana_workspace, + user_email, + AISummary, + JiraTickets, + GitHubPRs, + SlackMessages, + NotionPages, + LinearTickets, + ConfluencePages, + AsanaTasks, + watermelon_user, + } = wmUserData; + if (!watermelon_user) { + const [github] = await Promise.all([ + getTeamGitHub({ + repo, + owner, + installationId, + randomWords, + amount: GitHubPRs, + }), + ]); + return { + github, + asana: { error: "no asana token", data: [], fullData: [] }, + confluence: { error: "no confluence token", data: [], fullData: [] }, + jira: { error: "no jira token", data: [], fullData: [] }, + linear: { error: "no linear token", data: [], fullData: [] }, + notion: { error: "no notion token", data: [], fullData: [] }, + slack: { error: "no slack token", data: [], fullData: [] }, + watermelon_user: "team", + AISummary, + JiraTickets, + GitHubPRs, + SlackMessages, + NotionPages, + LinearTickets, + ConfluencePages, + AsanaTasks, + }; + } else { + const [github, jira, confluence, slack, notion, linear, asana] = + await Promise.all([ + getGitHub({ + repo, + owner, + github_token, + randomWords, + amount: GitHubPRs, + }), + getJira({ + user: user_email, + token: jira_token, + refresh_token: jira_refresh_token, + randomWords, + amount: JiraTickets, + }), + getConfluence({ + token: confluence_token, + refresh_token: confluence_refresh_token, + cloudId: confluence_id, + user: user_email, + randomWords, + amount: ConfluencePages, + }), + getSlack({ + slack_token, + searchString: randomWords.join(" "), + amount: SlackMessages, + }), + getNotion({ + notion_token, + randomWords, + amount: NotionPages, + }), + getLinear({ + linear_token, + randomWords, + amount: LinearTickets, + }), + getAsana({ + access_token: asana_token, + user: user_email, + randomWords, + workspace: asana_workspace, + amount: AsanaTasks, + }), + ]); - return { - github, - jira, - confluence, - slack, - notion, - linear, - asana, - watermelon_user, - AISummary, - user_email, - }; + return { + github, + jira, + confluence, + slack, + notion, + linear, + asana, + watermelon_user, + AISummary, + user_email, + }; + } + } catch (error) { + console.error( + "An error occurred while getting user tokens:", + error.message + ); + failedPosthogTracking({ + url: url, + error: error.message, + email: email, + }); + return { error: error.message }; + } + } }