abac9dfe6c
- Add source code from apps/api - Add packages/db and packages/types workspace dependencies - Add GitHub Actions CI workflow (lint, typecheck, test, docker) - Generate pnpm-lock.yaml - Add .gitignore Co-Authored-By: Paperclip <noreply@paperclip.ing>
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
/**
|
|
* reset.ts — Drop all application tables and re-run migrations + seed.
|
|
*
|
|
* Intended for local development only. Never run against production.
|
|
*
|
|
* Usage:
|
|
* DATABASE_URL=postgres://... npx tsx packages/db/src/reset.ts
|
|
*/
|
|
|
|
import postgres from "postgres";
|
|
|
|
async function reset() {
|
|
const url = process.env.DATABASE_URL;
|
|
if (!url) {
|
|
console.error("DATABASE_URL is not set");
|
|
process.exit(1);
|
|
}
|
|
|
|
if (process.env.NODE_ENV === "production" && process.env.ALLOW_RESET !== "true") {
|
|
console.error("[FATAL] db:reset must not be run in production without ALLOW_RESET=true.");
|
|
process.exit(1);
|
|
}
|
|
|
|
const client = postgres(url, { max: 1 });
|
|
|
|
console.log("Dropping all application tables...\n");
|
|
|
|
// Drop in dependency order (children before parents)
|
|
await client`
|
|
DO $$ DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
FOR r IN (
|
|
SELECT tablename FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
) LOOP
|
|
EXECUTE 'DROP TABLE IF EXISTS public.' || quote_ident(r.tablename) || ' CASCADE';
|
|
END LOOP;
|
|
END $$;
|
|
`;
|
|
|
|
// Drop custom enums
|
|
await client`
|
|
DO $$ DECLARE
|
|
r RECORD;
|
|
BEGIN
|
|
FOR r IN (
|
|
SELECT typname FROM pg_type
|
|
WHERE typtype = 'e' AND typnamespace = (
|
|
SELECT oid FROM pg_namespace WHERE nspname = 'public'
|
|
)
|
|
) LOOP
|
|
EXECUTE 'DROP TYPE IF EXISTS ' || quote_ident(r.typname) || ' CASCADE';
|
|
END LOOP;
|
|
END $$;
|
|
`;
|
|
|
|
// Drop the drizzle migrations tracking table
|
|
await client`DROP TABLE IF EXISTS drizzle.__drizzle_migrations CASCADE`;
|
|
await client`DROP SCHEMA IF EXISTS drizzle CASCADE`;
|
|
|
|
console.log("✓ All tables and enums dropped\n");
|
|
|
|
await client.end();
|
|
}
|
|
|
|
reset().catch((err) => {
|
|
console.error("Reset failed:", err);
|
|
process.exit(1);
|
|
});
|