fix(folders): logging, files-rescue, hard-delete wiring, audit logs

- A6: logger import + warn calls in document-folders.service.ts
- G-C1: re-parent files (not just documents) in deleteFolderSoftRescue
- A4: importer sets files.folder_id (was only setting documents.folder_id)
- A7 + G-C3: demote system folder + nullify scratchpadNotes in client-hard-delete
- Defense-in-depth portId on folder-move UPDATE
- Audit logs for createFolder, syncEntityFolderName, archive/restore suffix
- portId in companies/yachts archive log context
- Row-count telemetry in backfill CLI

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-11 13:57:42 +02:00
parent b5ebed9c36
commit 955911302b
8 changed files with 213 additions and 25 deletions

View File

@@ -188,7 +188,7 @@ export async function updateCompany(
if (data.name !== undefined) {
await syncEntityFolderName(portId, 'company', id, meta.userId).catch((err) => {
logger.warn({ err, companyId: id }, 'Failed to sync company folder name');
logger.warn({ err, companyId: id, portId }, 'Failed to sync company folder name');
});
}
@@ -215,8 +215,11 @@ export async function archiveCompany(id: string, portId: string, meta: AuditMeta
.set({ archivedAt: new Date() })
.where(and(eq(companies.id, id), eq(companies.portId, portId)));
void applyEntityArchivedSuffix(portId, 'company', id).catch((err) => {
logger.warn({ err, companyId: id }, 'Failed to apply archived suffix to company folder');
void applyEntityArchivedSuffix(portId, 'company', id, meta.userId).catch((err) => {
logger.warn(
{ err, companyId: id, portId },
'Failed to apply archived suffix to company folder',
);
});
void createAuditLog({