From 3b34b4198920689aac81667a7979f3075d654777 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 11 May 2026 11:30:19 +0200 Subject: [PATCH] fix(documents): syncEntityFolderName defense-in-depth + log level MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two follow-ups from code review: 1. The UPDATE in the retry loop now scopes by both id and port_id so it matches every other mutation in document-folders.service.ts and honours the CLAUDE.md defense-in-depth pattern. 2. The three entity-rename hooks now log at warn level (not error) — a missed folder rename is best-effort cosmetic drift, not a paging incident. Matches the existing convention used elsewhere in the codebase for non-fatal background work. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/lib/services/clients.service.ts | 2 +- src/lib/services/companies.service.ts | 2 +- src/lib/services/document-folders.service.ts | 2 +- src/lib/services/yachts.service.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/services/clients.service.ts b/src/lib/services/clients.service.ts index c060c2df..f99627a4 100644 --- a/src/lib/services/clients.service.ts +++ b/src/lib/services/clients.service.ts @@ -533,7 +533,7 @@ export async function updateClient( if (data.fullName !== undefined) { await syncEntityFolderName(portId, 'client', id, meta.userId).catch((err) => { - logger.error({ err, clientId: id }, 'Failed to sync client folder name'); + logger.warn({ err, clientId: id }, 'Failed to sync client folder name'); }); } diff --git a/src/lib/services/companies.service.ts b/src/lib/services/companies.service.ts index a0b88eb9..6bf69230 100644 --- a/src/lib/services/companies.service.ts +++ b/src/lib/services/companies.service.ts @@ -185,7 +185,7 @@ export async function updateCompany( if (data.name !== undefined) { await syncEntityFolderName(portId, 'company', id, meta.userId).catch((err) => { - logger.error({ err, companyId: id }, 'Failed to sync company folder name'); + logger.warn({ err, companyId: id }, 'Failed to sync company folder name'); }); } diff --git a/src/lib/services/document-folders.service.ts b/src/lib/services/document-folders.service.ts index 14483edc..1988b882 100644 --- a/src/lib/services/document-folders.service.ts +++ b/src/lib/services/document-folders.service.ts @@ -561,7 +561,7 @@ export async function syncEntityFolderName( const [updated] = await db .update(documentFolders) .set({ name: candidate, updatedAt: new Date() }) - .where(eq(documentFolders.id, folder.id)) + .where(and(eq(documentFolders.id, folder.id), eq(documentFolders.portId, portId))) .returning(); if (updated) return; } catch (err) { diff --git a/src/lib/services/yachts.service.ts b/src/lib/services/yachts.service.ts index f6001f1c..c6cd2f0b 100644 --- a/src/lib/services/yachts.service.ts +++ b/src/lib/services/yachts.service.ts @@ -165,7 +165,7 @@ export async function updateYacht( if (data.name !== undefined) { await syncEntityFolderName(portId, 'yacht', id, meta.userId).catch((err) => { - logger.error({ err, yachtId: id }, 'Failed to sync yacht folder name'); + logger.warn({ err, yachtId: id }, 'Failed to sync yacht folder name'); }); }