Files
GearBox/.planning/phases/32-setup-sharing-system/32-01-SUMMARY.md
Jean-Luc Makiola 7eb5335a88 docs: add phase 32 plan summaries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:05:24 +02:00

2.0 KiB

Plan 32-01 Summary: Schema Migration (isPublic -> visibility)

Status: Complete Commit: edc9793

What was done

  1. Schema changes (src/db/schema.ts):

    • Replaced isPublic: boolean with visibility: text (default "private") on setups table
    • Added shares table with columns: id, setupId, token, permission, expiresAt, userId, createdAt, revokedAt
    • Removed boolean import from drizzle-orm/pg-core
  2. Migration (drizzle-pg/0005_true_green_goblin.sql):

    • Creates shares table with FK constraints
    • Adds visibility column with data migration (UPDATE setups SET visibility = 'public' WHERE is_public = true)
    • Drops is_public column
  3. Full-stack isPublic -> visibility replacement across 16 files:

    • src/shared/schemas.ts: z.enum(["private", "link", "public"]) replaces z.boolean()
    • src/server/services/setup.service.ts: createSetup, getAllSetups, updateSetup
    • src/server/services/discovery.service.ts: eq(setups.visibility, "public")
    • src/server/services/profile.service.ts: Two occurrences updated
    • src/server/routes/account.ts: Delete account reassignment query
    • src/client/hooks/useSetups.ts: Types and mutation signatures
    • src/client/components/SetupCard.tsx: Visibility badge (public=green, link=blue)
    • src/client/components/SetupsView.tsx: Passes visibility prop
    • src/client/routes/setups/$setupId.tsx: Temporary visibility badge with lock/link/globe icons
    • src/db/dev-seed.ts and src/db/dev-seed-data.ts: Seed data updated
  4. Tests updated across 4 test files (46 tests pass):

    • tests/services/profile.service.test.ts
    • tests/services/discovery.service.test.ts
    • tests/routes/discovery.test.ts
    • tests/routes/profiles.test.ts
    • tests/helpers/db.ts: Added shares to truncation list

Verification

  • bun run lint: Passes (0 errors)
  • All affected tests pass (46/46)
  • Zero isPublic/is_public references in src/ (except unrelated isPublicRoute in __root.tsx)
  • Zero isPublic references in tests/