From e773d1dc5201d906f9892cf2ceda5a3a45f0978c Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Mon, 10 Nov 2025 00:29:51 +0000 Subject: [PATCH] completionId: cgen-f56c2e4ea4844e18ad901fce69459562 cgen-f56c2e4ea4844e18ad901fce69459562 --- api/discord/oauth/callback.ts | 39 +++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/api/discord/oauth/callback.ts b/api/discord/oauth/callback.ts index 62a5e6d2..1a17ee10 100644 --- a/api/discord/oauth/callback.ts +++ b/api/discord/oauth/callback.ts @@ -142,6 +142,45 @@ export default async function handler(req: any, res: any) { // Initialize Supabase client with service role const supabase = createClient(supabaseUrl, supabaseServiceRole); + // LINKING FLOW: Link Discord to authenticated user + if (isLinkingFlow && authenticatedUserId) { + console.log("[Discord OAuth] Linking Discord to user:", authenticatedUserId); + + // Check if Discord ID is already linked to someone else + const { data: existingLink } = await supabase + .from("discord_links") + .select("user_id") + .eq("discord_id", discordUser.id) + .single(); + + if (existingLink && existingLink.user_id !== authenticatedUserId) { + console.error("[Discord OAuth] Discord ID already linked to different user"); + return res.redirect( + `/dashboard?error=already_linked&message=${encodeURIComponent("This Discord account is already linked to another AeThex account")}`, + ); + } + + // Create or update Discord link + const { error: linkError } = await supabase + .from("discord_links") + .upsert({ + discord_id: discordUser.id, + user_id: authenticatedUserId, + linked_at: new Date().toISOString(), + }); + + if (linkError) { + console.error("[Discord OAuth] Link creation failed:", linkError); + return res.redirect( + `/dashboard?error=link_failed&message=${encodeURIComponent("Failed to link Discord account")}`, + ); + } + + console.log("[Discord OAuth] Successfully linked Discord:", discordUser.id); + return res.redirect(redirectTo); + } + + // LOGIN/SIGNUP FLOW: Standard OAuth login // Check if Discord user already exists const { data: existingLink } = await supabase .from("discord_links")