From ee9b90e3d1d59cf90d31e0176f91f65916ffc442 Mon Sep 17 00:00:00 2001 From: robbond Date: Thu, 5 Mar 2026 13:46:03 +0000 Subject: [PATCH] fix(domains): correctly match subscriptions to domains for status --- app/dashboard/page.tsx | 56 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 49aefba..c05500c 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -17,6 +17,10 @@ type ActionLogSummary = Pick< "target_id" | "status" | "action" | "created_at" | "error_message" >; +function normalizeDomainLike(value: string) { + return value.trim().toLowerCase().replace(/\.$/, ""); +} + export default async function DashboardPage() { const context = await getServerAgencyContextOrRedirect(); const supabase = createSupabaseServerClient() as any; @@ -50,7 +54,7 @@ export default async function DashboardPage() { supabase .from("plesk_domains") .select( - "id, plesk_instance_id, subscription_id, status, domain_name, hosting_type, source_created_at, aliases_count, updated_at", + "id, plesk_instance_id, subscription_id, external_subscription_id, status, domain_name, hosting_type, source_created_at, aliases_count, updated_at", ) .eq("agency_id", context.agencyId) .order("updated_at", { ascending: false }) @@ -101,6 +105,7 @@ export default async function DashboardPage() { id: string; plesk_instance_id: string; subscription_id: string | null; + external_subscription_id: string | null; domain_name: string; status: string | null; hosting_type: string | null; @@ -121,13 +126,17 @@ export default async function DashboardPage() { ), ); + const domainInstanceIds = Array.from( + new Set((domains ?? []).map((domain) => domain.plesk_instance_id)), + ); + const { data: domainSubscriptions } = - domainSubscriptionIds.length > 0 + domainInstanceIds.length > 0 ? await supabase .from("plesk_subscriptions") - .select("id, status") + .select("id, plesk_instance_id, plesk_subscription_id, name, status") .eq("agency_id", context.agencyId) - .in("id", domainSubscriptionIds) + .in("plesk_instance_id", domainInstanceIds) : { data: [] }; const subscriptionStatusById = new Map( @@ -137,6 +146,31 @@ export default async function DashboardPage() { ]), ); + const subscriptionStatusByExternalId = new Map( + (domainSubscriptions ?? []) + .filter((subscription: any) => + Boolean( + subscription?.plesk_instance_id && + subscription?.plesk_subscription_id, + ), + ) + .map((subscription: any) => [ + `${String(subscription.plesk_instance_id)}:${String(subscription.plesk_subscription_id)}`, + subscription?.status ? String(subscription.status) : null, + ]), + ); + + const subscriptionStatusByInstanceAndName = new Map( + (domainSubscriptions ?? []) + .filter((subscription: any) => + Boolean(subscription?.plesk_instance_id && subscription?.name), + ) + .map((subscription: any) => [ + `${String(subscription.plesk_instance_id)}:${normalizeDomainLike(String(subscription.name))}`, + subscription?.status ? String(subscription.status) : null, + ]), + ); + const autoSyncByInstance = new Map< string, { status: string; created_at: string; error_message: string | null } @@ -192,9 +226,21 @@ export default async function DashboardPage() { instances={instances ?? []} subscriptions={subscriptions ?? []} domains={(domains ?? []).map((domain) => { - const joinedStatus = domain.subscription_id + const joinedStatusByLocalId = domain.subscription_id ? subscriptionStatusById.get(domain.subscription_id) : null; + const joinedStatusByExternalId = domain.external_subscription_id + ? subscriptionStatusByExternalId.get( + `${domain.plesk_instance_id}:${domain.external_subscription_id}`, + ) + : null; + const joinedStatusByName = subscriptionStatusByInstanceAndName.get( + `${domain.plesk_instance_id}:${normalizeDomainLike(domain.domain_name)}`, + ); + const joinedStatus = + joinedStatusByLocalId ?? + joinedStatusByExternalId ?? + joinedStatusByName; return { ...domain, -- 2.39.5