chore: shell script for nuke-and-reseed (runs inside container)
All checks were successful
CI / ci (push) Successful in 1m16s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 14:20:03 +02:00
parent c3874d031a
commit 9864a09fc1
2 changed files with 38 additions and 54 deletions

38
scripts/nuke-and-reseed.sh Executable file
View File

@@ -0,0 +1,38 @@
#!/bin/bash
# Nuke dev seed user and re-seed. Run inside the container:
# docker exec -it <container> bash scripts/nuke-and-reseed.sh
# Delete after use.
set -e
echo "Deleting dev seed user..."
bun -e "
import { eq } from 'drizzle-orm';
import { db } from './src/db/index.ts';
import { apiKeys, categories, items, sessions, settings, setupItems, setups, threadCandidates, threads, users } from './src/db/schema.ts';
const [user] = await db.select().from(users).where(eq(users.logtoSub, 'dev-user-seed')).limit(1);
if (!user) { console.log('No dev user found'); process.exit(0); }
const uid = user.id;
const userSetups = await db.select().from(setups).where(eq(setups.userId, uid));
for (const s of userSetups) await db.delete(setupItems).where(eq(setupItems.setupId, s.id));
await db.delete(setups).where(eq(setups.userId, uid));
const userThreads = await db.select().from(threads).where(eq(threads.userId, uid));
for (const t of userThreads) await db.delete(threadCandidates).where(eq(threadCandidates.threadId, t.id));
await db.delete(threads).where(eq(threads.userId, uid));
await db.delete(items).where(eq(items.userId, uid));
await db.delete(settings).where(eq(settings.userId, uid));
await db.delete(apiKeys).where(eq(apiKeys.userId, uid));
await db.delete(sessions).where(eq(sessions.userId, uid));
await db.delete(categories).where(eq(categories.userId, uid));
await db.delete(users).where(eq(users.id, uid));
console.log('Dev user deleted');
"
echo "Re-seeding..."
bun run db:seed:dev
echo "Done!"

View File

@@ -1,54 +0,0 @@
// Temporary script to delete dev seed user and all related data.
// Usage: bun run scripts/nuke-dev-user.ts && bun run db:seed:dev
// Delete this file after use.
import { eq } from "drizzle-orm";
import { db } from "../src/db/index.ts";
import {
apiKeys,
categories,
items,
sessions,
settings,
setupItems,
setups,
threadCandidates,
threads,
users,
} from "../src/db/schema.ts";
const [user] = await db
.select()
.from(users)
.where(eq(users.logtoSub, "dev-user-seed"))
.limit(1);
if (!user) {
console.log("No dev user found");
process.exit(0);
}
const uid = user.id;
// Delete in FK order
const userSetups = await db.select().from(setups).where(eq(setups.userId, uid));
for (const s of userSetups)
await db.delete(setupItems).where(eq(setupItems.setupId, s.id));
await db.delete(setups).where(eq(setups.userId, uid));
const userThreads = await db
.select()
.from(threads)
.where(eq(threads.userId, uid));
for (const t of userThreads)
await db.delete(threadCandidates).where(eq(threadCandidates.threadId, t.id));
await db.delete(threads).where(eq(threads.userId, uid));
await db.delete(items).where(eq(items.userId, uid));
await db.delete(settings).where(eq(settings.userId, uid));
await db.delete(apiKeys).where(eq(apiKeys.userId, uid));
await db.delete(sessions).where(eq(sessions.userId, uid));
await db.delete(categories).where(eq(categories.userId, uid));
await db.delete(users).where(eq(users.id, uid));
console.log("Dev user and all related data deleted");