From 825bf8dc84b888ec6dccfd74e4184eb01ef1e0f6 Mon Sep 17 00:00:00 2001 From: robbond Date: Thu, 5 Mar 2026 14:20:07 +0000 Subject: [PATCH] fix(actions): send and use subscription_id for domain suspend/unsuspend --- app/api/plesk/domains/[id]/action/route.ts | 16 ++++++++++------ components/dashboard/dashboard-controls.tsx | 20 ++++++++++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app/api/plesk/domains/[id]/action/route.ts b/app/api/plesk/domains/[id]/action/route.ts index 716b474..24b5b73 100644 --- a/app/api/plesk/domains/[id]/action/route.ts +++ b/app/api/plesk/domains/[id]/action/route.ts @@ -12,6 +12,7 @@ import { createSupabaseRouteClient } from "@/lib/supabase/route"; const actionSchema = z.object({ action: z.enum(["suspend", "unsuspend"]), + subscription_id: z.string().uuid().optional(), }); export async function POST( @@ -32,7 +33,8 @@ export async function POST( assertAgencyAdmin(context); assertRateLimit(`plesk-domain-action:${context.userId}`, 10, 60_000); - const { action } = actionSchema.parse(await req.json()); + const payload = actionSchema.parse(await req.json()); + const { action } = payload; requestedAction = action; const { data: domainRow, error: domainError } = await supabase @@ -46,21 +48,23 @@ export async function POST( throw new Error("Domain not found"); } + const resolvedSubscriptionId = + payload.subscription_id ?? + (domainRow.subscription_id ? String(domainRow.subscription_id) : null); + domain = { id: String(domainRow.id), - subscription_id: domainRow.subscription_id - ? String(domainRow.subscription_id) - : null, + subscription_id: resolvedSubscriptionId, }; - if (!domain.subscription_id) { + if (!resolvedSubscriptionId) { throw new Error("Domain is not linked to a subscription"); } const { data: subscriptionRow, error: subscriptionError } = await supabase .from("plesk_subscriptions") .select("id, plesk_subscription_id, plesk_instance_id") - .eq("id", domain.subscription_id) + .eq("id", resolvedSubscriptionId) .eq("agency_id", context.agencyId) .single(); diff --git a/components/dashboard/dashboard-controls.tsx b/components/dashboard/dashboard-controls.tsx index a868e1b..b1994e8 100644 --- a/components/dashboard/dashboard-controls.tsx +++ b/components/dashboard/dashboard-controls.tsx @@ -239,13 +239,23 @@ export function DashboardControls({ } async function onDomainAction( - domainId: string, + domain: Domain, action: "suspend" | "unsuspend", ) { + if (!domain.subscription_id) { + setMessage( + "Domain is not linked to a subscription yet. Run Sync Now (or backfill links) and try again.", + ); + return; + } + setLoading(true); setMessage(null); try { - await runRequest(`/api/plesk/domains/${domainId}/action`, { action }); + await runRequest(`/api/plesk/domains/${domain.id}/action`, { + action, + subscription_id: domain.subscription_id, + }); setMessage("Domain action completed."); window.location.reload(); } catch (error) { @@ -633,7 +643,7 @@ export function DashboardControls({