Files
HealthLog/prisma/migrations/0057_user_onboarding_step/migration.sql
T
Marc-André Bombeck 4c4fa645b1 docs(db): rewrite Migration 0057 PG11+ default-backfill comment
The original comment claimed that `DEFAULT 0` "only applies to *new*
inserts on PostgreSQL — existing rows are not backfilled". That's
wrong for PG11+: the fast-path `ADD COLUMN ... DEFAULT` materialises
the default for every existing row in O(1) time without rewriting the
table. The comment confused future readers about why the Wizard mount
treats `NULL` as 0 (defensive against the legacy ambiguity, not
because of any general PG behaviour).

Rewrite to match reality, and point at Migration 0060 as the follow-on
that flips the column to NOT NULL.

Fix-O / code-M8.
2026-05-14 22:36:33 +02:00

29 lines
1.4 KiB
SQL

-- v1.4.25 W14b — onboarding wizard resume-state.
--
-- Adds `onboarding_step` to the `users` table so the rebuilt multi-step
-- wizard at `/onboarding/[step]` can resume the user at the highest
-- step they reached. Without this column, closing the tab mid-flow
-- wipes progress and forces users back to step 0.
--
-- Step encoding (mirrors `src/components/onboarding/OnboardingShell.tsx`
-- and `src/app/onboarding/[step]/page.tsx`):
-- 0 = welcome (carousel / value-prop intro)
-- 1 = goals ("what do you want to track?")
-- 2 = source ("connect a source" — Withings / Apple Health / manual)
-- 3 = baseline (first measurement / sync confirmation)
-- 4 = done (success screen; same write that flips
-- `onboarding_completed_at` from NULL to NOW())
--
-- Existing rows are backfilled to 0 by PostgreSQL's fast-path
-- `ADD COLUMN ... DEFAULT` (PG11+), which materialises the default
-- without rewriting the table — every pre-W14b user lands at step 0
-- in O(1) time. The column ships nullable purely so the DDL stays
-- additive on every replica; Migration 0060 follows up by flipping
-- it to NOT NULL once the deploy has rolled.
--
-- The `IF NOT EXISTS` guards make the migration idempotent — if the
-- column landed via a prior dev-DB hand-edit, the migration still
-- runs cleanly to completion.
ALTER TABLE "users"
ADD COLUMN IF NOT EXISTS "onboarding_step" INTEGER DEFAULT 0;