From 0a8a56db2aca0be46d38d2b45c3f519c30bb798b Mon Sep 17 00:00:00 2001 From: Zen0space Date: Sat, 11 Apr 2026 20:51:39 +0800 Subject: [PATCH] fix(db): make email index migration idempotent to stop recurring error Migration 000002 failed on every deploy because the email index was already replaced by migration 000003 (partialFilterExpression). Now checks if an email index exists first and skips if so. Co-Authored-By: Claude Opus 4 (1M context) --- .../migrations/20260407000002_fix_email_index_sparse.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/kal-db/migrations/20260407000002_fix_email_index_sparse.js b/packages/kal-db/migrations/20260407000002_fix_email_index_sparse.js index 2025455..abf1432 100644 --- a/packages/kal-db/migrations/20260407000002_fix_email_index_sparse.js +++ b/packages/kal-db/migrations/20260407000002_fix_email_index_sparse.js @@ -8,6 +8,15 @@ */ export const up = async (db, client) => { + const indexes = await db.collection("users").indexes(); + const hasEmailIndex = indexes.some((idx) => idx.key?.email === 1); + + if (hasEmailIndex) { + // Index already exists (possibly replaced by a later migration) — skip + console.log("✅ email index already exists, skipping sparse migration"); + return; + } + // Drop the old non-sparse unique index await db .collection("users")