fix: fix reordering failure issue

This commit is contained in:
tigerenwork 2026-02-04 11:16:46 +08:00
parent 7f2bd8bb82
commit 75e667c1d7
1 changed files with 18 additions and 0 deletions

View File

@ -82,6 +82,23 @@ export async function reorderSteps(
category: StepCategory, category: StepCategory,
orderedIds: number[] 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++) { for (let i = 0; i < orderedIds.length; i++) {
await db.update(stepTemplates) await db.update(stepTemplates)
.set({ orderIndex: i }) .set({ orderIndex: i })
@ -95,6 +112,7 @@ export async function reorderSteps(
eq(customerSteps.category, category) eq(customerSteps.category, category)
)); ));
} }
revalidatePath(`/releases/${releaseId}/steps`); revalidatePath(`/releases/${releaseId}/steps`);
} }