Files
my2/server/database/clean.ts
Bastian Masanek 268d91f548 Enhance database management with cleanup and reset scripts
- Added a new database cleanup script to remove all data while preserving the schema, facilitating a clean state before seeding.
- Updated package.json to include new commands for database cleaning and resetting.
- Modified schema definitions to use an array format for index and constraint definitions, improving clarity and consistency.
- Updated product seeding logic to utilize role-based assignments directly from mock data, enhancing flexibility in product-role relationships.
2025-11-02 10:35:07 +01:00

76 lines
2.0 KiB
TypeScript

/**
* 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)
})