43 lines
2.0 KiB
Markdown
43 lines
2.0 KiB
Markdown
# 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/
|