From ff2bfc67b23738f6d97f7a8e08ae293fc8441de1 Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Mon, 20 Apr 2026 08:52:38 +0000 Subject: [PATCH] fixed making revisions to Hubspot push up --- .../[portfolioId]/approvals/route.ts | 2 + src/app/lib/hubspot/dealSync.ts | 65 +++++++++++++------ 2 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/app/api/portfolio/[portfolioId]/approvals/route.ts b/src/app/api/portfolio/[portfolioId]/approvals/route.ts index 9714052..85f2962 100644 --- a/src/app/api/portfolio/[portfolioId]/approvals/route.ts +++ b/src/app/api/portfolio/[portfolioId]/approvals/route.ts @@ -227,6 +227,8 @@ export async function POST( measureName: r.measureName, approvedByEmail: r.approvedByEmail ?? "unknown", })), + actedByEmail: session.user.email, + actedAt: now, }); } diff --git a/src/app/lib/hubspot/dealSync.ts b/src/app/lib/hubspot/dealSync.ts index 32a3f4f..08d1395 100644 --- a/src/app/lib/hubspot/dealSync.ts +++ b/src/app/lib/hubspot/dealSync.ts @@ -68,29 +68,52 @@ export async function syncContractorDocUploadToHubSpot(params: { export async function syncMeasureApprovalsToHubSpot(params: { hubspotDealId: string; approvedMeasures: Array<{ measureName: string; approvedByEmail: string }>; + actedByEmail: string; + actedAt: Date; }): Promise { - try { - const client = getHubSpotClient(); + const dateStr = params.actedAt.toLocaleString("en-GB", { + day: "2-digit", + month: "short", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + timeZone: "UTC", + timeZoneName: "short", + }); - const log = - params.approvedMeasures.length === 0 - ? "No measures currently approved" - : [ - "Approved measures:", - ...params.approvedMeasures.map( - (m) => `- ${m.measureName} (approved by ${m.approvedByEmail})`, - ), - ].join("\n"); + const log = + params.approvedMeasures.length === 0 + ? `All measures unapproved by ${params.actedByEmail} on ${dateStr}` + : [ + `Approved measures (updated by ${params.actedByEmail} on ${dateStr}):`, + ...params.approvedMeasures.map((m) => `- ${m.measureName}`), + ].join("\n"); - await client.crm.deals.basicApi.update(params.hubspotDealId, { - properties: { - client_measures_approval_log: log, - }, - }); - } catch (err) { - console.error("[HubSpot] syncMeasureApprovalsToHubSpot failed", { - dealId: params.hubspotDealId, - error: err, - }); + const maxAttempts = 3; + for (let attempt = 1; attempt <= maxAttempts; attempt++) { + try { + const client = getHubSpotClient(); + await client.crm.deals.basicApi.update(params.hubspotDealId, { + properties: { + client_measures_approval_log: log, + }, + }); + return; + } catch (err) { + const isReset = + err instanceof Error && + "code" in err && + (err as NodeJS.ErrnoException).code === "ECONNRESET"; + if (isReset && attempt < maxAttempts) { + await new Promise((resolve) => setTimeout(resolve, 200 * attempt)); + continue; + } + console.error("[HubSpot] syncMeasureApprovalsToHubSpot failed", { + dealId: params.hubspotDealId, + attempt, + error: err, + }); + return; + } } }