You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

103 lines
3.0 KiB

/**
* Database Seed Script
*
* Seeds the database with initial mock product data for development and testing.
* Run with: pnpm db:seed
*/
import 'dotenv/config'
import { drizzle } from 'drizzle-orm/postgres-js'
import postgres from 'postgres'
import { products } from './schema'
/**
* Sample annual pass products for experimenta
*/
const mockProducts = [
{
navProductId: 'MSPACE-JK-2025',
name: 'Makerspace Jahreskarte',
description:
'Unbegrenzter Zugang zum Makerspace für 365 Tage. Nutze modernste Werkzeuge, 3D-Drucker, Lasercutter und vieles mehr. Perfekt für Maker, Tüftler und kreative Köpfe.',
price: '120.00',
stockQuantity: 100,
category: 'makerspace-annual-pass',
active: true,
},
{
navProductId: 'EXPERIMENTA-JK-2025',
name: 'experimenta Jahreskarte',
description:
'Erlebe die Ausstellungswelt der experimenta ein ganzes Jahr lang. Mit freiem Eintritt zu allen Ausstellungen, Science Dome Shows und Sonderausstellungen.',
price: '85.00',
stockQuantity: 200,
category: 'annual-pass',
active: true,
},
{
navProductId: 'PAEDAGOGEN-JK-2025',
name: 'Pädagogen Jahreskarte',
description:
'Speziell für Lehrkräfte und Pädagogen. Mit exklusiven Fortbildungsangeboten, didaktischen Materialien und freiem Zugang zu allen Ausstellungen.',
price: '60.00',
stockQuantity: 50,
category: 'educator-annual-pass',
active: true,
},
]
async function seed() {
// 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 seed...')
// Create database connection
const client = postgres(connectionString)
const db = drizzle(client)
try {
// Insert products
console.log(`📦 Inserting ${mockProducts.length} products...`)
const insertedProducts = await db
.insert(products)
.values(mockProducts)
.onConflictDoUpdate({
target: products.navProductId,
set: {
name: mockProducts[0].name, // Drizzle requires a set object, using sql.excluded in real impl
description: mockProducts[0].description,
price: mockProducts[0].price,
stockQuantity: mockProducts[0].stockQuantity,
updatedAt: new Date(),
},
})
.returning()
console.log(`✅ Successfully inserted/updated ${insertedProducts.length} products:`)
insertedProducts.forEach((product) => {
console.log(` - ${product.name} (${product.navProductId}) - €${product.price}`)
})
console.log('\n✨ Database seed completed successfully!')
} catch (error) {
console.error('❌ Error seeding database:', error)
throw error
} finally {
// Close database connection
await client.end()
}
}
// Run seed function
seed()
.then(() => {
process.exit(0)
})
.catch((error) => {
console.error('Fatal error:', error)
process.exit(1)
})