Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 6ee9752dd7 fix: add withDeleted option when looking up workflow version to copy
https://sonarly.com/issue/6076?type=bug

The `createDraftFromWorkflowVersion` mutation fails with NOT_FOUND when the referenced `workflowVersionIdToCopy` has been soft-deleted (workflow was deleted then the page still held a stale reference) or when the version ID simply doesn't belong to the given workflow.

Fix: Added `withDeleted: true` to both `findOne` calls that look up the source workflow version in `createDraftFromWorkflowVersion` and `duplicateWorkflow` methods.

**Why:** TypeORM's soft-delete mechanism (via the `deleteDate` column on `deletedAt`) causes `findOne` to automatically exclude records where `deletedAt IS NOT NULL`. When a workflow is deleted, all its versions are soft-deleted via `workflowVersionRepository.softDelete({ workflowId })` in `workflow-common.workspace-service.ts`. If the frontend still holds a cached reference to a soft-deleted version ID (stale Apollo cache, browser tab left open), the `createDraftFromWorkflowVersion` mutation fails with NOT_FOUND.

**What changed:** Both source version lookups now include `withDeleted: true`, which is the same pattern already used in `workflow-common.workspace-service.ts` (lines 274, 298, 388) for similar workflow version queries. Since these are read-only lookups that copy trigger/steps data into a new draft, including soft-deleted versions is safe and correct — we never write back to the soft-deleted record.
2026-03-22 23:29:00 +00:00
@@ -65,6 +65,7 @@ export class WorkflowVersionWorkspaceService {
id: workflowVersionIdToCopy,
workflowId,
},
withDeleted: true,
});
if (!isDefined(workflowVersionToCopy)) {
@@ -196,6 +197,7 @@ export class WorkflowVersionWorkspaceService {
id: workflowVersionIdToCopy,
workflowId: workflowIdToDuplicate,
},
withDeleted: true,
});
if (!isDefined(sourceVersion)) {