From 75e667c1d7057f3eb58dffca4533c237f9db54d4 Mon Sep 17 00:00:00 2001 From: tigerenwork Date: Wed, 4 Feb 2026 11:16:46 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=20fix=20reordering=20failure=20iss?= =?UTF-8?q?ue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/actions/step-templates.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/lib/actions/step-templates.ts b/src/lib/actions/step-templates.ts index 629297d..17b326f 100644 --- a/src/lib/actions/step-templates.ts +++ b/src/lib/actions/step-templates.ts @@ -82,6 +82,23 @@ export async function reorderSteps( category: StepCategory, orderedIds: number[] ) { + // Two-phase update to avoid unique constraint violations + // Phase 1: Move all steps to temporary high values (offset by 10000) + for (let i = 0; i < orderedIds.length; i++) { + await db.update(stepTemplates) + .set({ orderIndex: i + 10000 }) + .where(eq(stepTemplates.id, orderedIds[i])); + + // Also update customer steps + await db.update(customerSteps) + .set({ orderIndex: i + 10000 }) + .where(and( + eq(customerSteps.templateId, orderedIds[i]), + eq(customerSteps.category, category) + )); + } + + // Phase 2: Move to final positions for (let i = 0; i < orderedIds.length; i++) { await db.update(stepTemplates) .set({ orderIndex: i }) @@ -95,6 +112,7 @@ export async function reorderSteps( eq(customerSteps.category, category) )); } + revalidatePath(`/releases/${releaseId}/steps`); }