/** * Database Clean Script * * Removes all data from the database while preserving the schema. * Useful for resetting to a clean state before seeding. * Run with: pnpm db:clean */ import 'dotenv/config' import { drizzle } from 'drizzle-orm/postgres-js' import { sql } from 'drizzle-orm' import postgres from 'postgres' async function clean() { // Get database connection from environment const connectionString = process.env.DATABASE_URL if (!connectionString) { throw new Error('DATABASE_URL environment variable is not set') } console.log('๐Ÿงน Starting database cleanup...\n') // Create database connection const client = postgres(connectionString) const db = drizzle(client) try { // Delete all data in reverse order of dependencies console.log('Deleting product-role assignments...') await db.execute(sql`DELETE FROM product_role_visibility`) console.log('Deleting user-role assignments...') await db.execute(sql`DELETE FROM user_roles`) console.log('Deleting order items...') await db.execute(sql`DELETE FROM order_items`) console.log('Deleting orders...') await db.execute(sql`DELETE FROM orders`) console.log('Deleting cart items...') await db.execute(sql`DELETE FROM cart_items`) console.log('Deleting carts...') await db.execute(sql`DELETE FROM carts`) console.log('Deleting products...') await db.execute(sql`DELETE FROM products`) console.log('Deleting roles...') await db.execute(sql`DELETE FROM roles`) console.log('Deleting users...') await db.execute(sql`DELETE FROM users`) console.log('\nโœ… Database cleaned successfully!') console.log('๐Ÿ’ก Run `pnpm db:seed` to populate with fresh data') } catch (error) { console.error('โŒ Error cleaning database:', error) throw error } finally { // Close database connection await client.end() } } // Run clean function clean() .then(() => { process.exit(0) }) .catch((error) => { console.error('Fatal error:', error) process.exit(1) })