From f509464947e42d3626953e7e293969770f1d639e Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Mon, 2 Sep 2024 21:05:30 +0800 Subject: [PATCH] slack integration reinstall --- backend/src/services/slack/slack-service.ts | 48 +++++++++++++++---- .../NotificationSection/NotificationTab.tsx | 26 +++++++--- 2 files changed, 58 insertions(+), 16 deletions(-) diff --git a/backend/src/services/slack/slack-service.ts b/backend/src/services/slack/slack-service.ts index d4a2dd81b..aa72d0d82 100644 --- a/backend/src/services/slack/slack-service.ts +++ b/backend/src/services/slack/slack-service.ts @@ -21,7 +21,7 @@ import { type TSlackServiceFactoryDep = { slackIntegrationDAL: Pick< TSlackIntegrationDALFactory, - "create" | "findOne" | "findById" | "updateById" | "deleteById" + "create" | "findOne" | "findById" | "updateById" | "deleteById" | "transaction" >; permissionService: Pick; projectDAL: Pick; @@ -62,15 +62,43 @@ export const slackServiceFactory = ({ plainText: Buffer.from(botAccessToken, "utf8") }); - await slackIntegrationDAL.create({ - projectId, - teamId, - teamName, - slackUserId, - slackAppId, - slackBotId, - slackBotUserId, - encryptedBotAccessToken + await slackIntegrationDAL.transaction(async (tx) => { + const slackIntegration = await slackIntegrationDAL.findOne( + { + projectId + }, + tx + ); + + if (slackIntegration) { + return slackIntegrationDAL.updateById( + slackIntegration.id, + { + teamId, + teamName, + slackUserId, + slackAppId, + slackBotId, + slackBotUserId, + encryptedBotAccessToken + }, + tx + ); + } + + return slackIntegrationDAL.create( + { + projectId, + teamId, + teamName, + slackUserId, + slackAppId, + slackBotId, + slackBotUserId, + encryptedBotAccessToken + }, + tx + ); }); }; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/NotificationSection/NotificationTab.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/NotificationSection/NotificationTab.tsx index 9f0dadaaf..3a6ae45fd 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/NotificationSection/NotificationTab.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/NotificationSection/NotificationTab.tsx @@ -59,6 +59,7 @@ export const NotificationTab = () => { const router = useRouter(); const [isConnectToSlackLoading, setIsConnectToSlackLoading] = useToggle(false); + const [isReinstallLoading, setIsReinstallLoading] = useToggle(false); const secretRequestNotifState = watch("isSecretRequestNotificationEnabled"); const accessRequestNotifState = watch("isAccessRequestNotificationEnabled"); @@ -95,6 +96,13 @@ export const NotificationTab = () => { }); }; + const triggerSlackInstall = async () => { + const slackInstallUrl = await fetchSlackInstallUrl(currentWorkspace?.id); + if (slackInstallUrl) { + router.push(slackInstallUrl); + } + }; + useEffect(() => { if (slackIntegration) { setValue( @@ -131,10 +139,7 @@ export const NotificationTab = () => { isLoading={isConnectToSlackLoading} onClick={async () => { setIsConnectToSlackLoading.on(); - const slackInstallUrl = await fetchSlackInstallUrl(currentWorkspace?.id); - if (slackInstallUrl) { - router.push(slackInstallUrl); - } + await triggerSlackInstall(); }} > Connect to Slack @@ -144,8 +149,16 @@ export const NotificationTab = () => {
Connected Slack workspace: {slackIntegration.teamName}
-
+

Events